Merge branch 'master' into lineup_as_table

This commit is contained in:
2021-11-12 14:30:45 -06:00
14 changed files with 291 additions and 124 deletions

View File

@@ -9,7 +9,7 @@
<div class="row">
<div class="col-6">
{# <ul class="list-group">#}
<form action="{% url 'edit lineup' id=event.id%}" method="post">
<form action="{% url 'edit lineup' event_id=event.id%}" method="post">
{# {% csrf_token %}#}
{# {{ positionings_formset.management_form }}#}

View File

@@ -1,3 +1,52 @@
from django.test import TestCase
from django.test import TestCase, Client
from django.test.utils import setup_test_environment
from django.urls import reverse
from .models import Positioning, Player
from .forms import PositioningFormSet
# Create your tests here.
class TestVenueViews(TestCase):
fixtures = ['blaseball']
def test_positioning_list(self):
response = self.client.get(reverse('edit lineup', args=[1]))
self.assertEqual(response.status_code, 200)
def test_positioning_formset(self):
event = 1
sample_data = [
# first player positioning
(1, Player.objects.get(id=1).id, 'P'),
(2, Player.objects.get(id=2).id, 'C'),
(3, Player.objects.get(id=3).id, '1B')
]
data = {}
for i, (order, player, position) in enumerate(sample_data):
data[f'form-{i}-order']=order
data[f'form-{i}-player']=player
data[f'form-{i}-position'] = position
management = {
'form-INITIAL_FORMS': '0',
'form-TOTAL_FORMS': len(sample_data),
'form-MAX_NUM_FORMS': ''
}
formset = PositioningFormSet({**management, **data})
self.assertTrue(formset.is_valid())
for form in formset:
self.assertTrue(form.is_valid())
response = self.client.post(reverse('edit lineup', args=[event]), {**management, **data})
self.assertEqual(response.status_code, 200)
for d in sample_data:
with self.subTest(d):
p = Positioning.objects.get(player_id=d[1], event_id=event)
self.assertEqual(d[0], p.order)
self.assertEqual(d[2], p.position)
pass

View File

@@ -5,5 +5,5 @@ from django.urls import path, include
from . import views
urlpatterns = [
path('edit/<int:id>', views.edit, name="edit lineup"),
path('edit/<int:event_id>', views.edit, name="edit lineup"),
]

View File

@@ -8,7 +8,7 @@ from events.models import Event
from players.models import Player
# Create your views here.
def edit(request, id):
def edit(request, event_id):
if request.method == 'POST':
# create a form instance and populate it with data from the request:
@@ -18,12 +18,21 @@ def edit(request, id):
# process the data in form.cleaned_data as required
# ...
# redirect to a new URL:
form.cleaned_data.pop('id') #FIXME this is a workaround, not sure why it is necessary
new_positioning, did_create = Positioning.objects.update_or_create(id=form['id'].data, defaults=form.cleaned_data)
# form.cleaned_data.pop('id')
if isinstance(form.cleaned_data['id'], Positioning):
positioning_id = form.cleaned_data.pop('id').id #FIXME this is a workaround, not sure why it is necessary
positioning = Positioning.objects.filter(id=positioning_id)
positioning.update(**form.cleaned_data)
did_create = False
else:
positioning = Positioning.objects.create(**form.cleaned_data, event_id=event_id)
did_create = True
return render(request, 'success.html', {'call_back':'edit lineup','id':event_id}, status=200)
# return render(request, 'success.html', {'call_back':'schedule'})
event = Event.objects.get(id=id)
event = Event.objects.get(id=event_id)
players = Player.objects.all()
qset = Positioning.objects.filter(event_id=id, order__isnull = False)
qset = Positioning.objects.filter(event_id=event_id, order__isnull = False)
formset = PositioningFormSet(queryset=qset)
for form in formset:
for field in form.fields: