diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 42f95288..756cf751 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -740,7 +740,7 @@ def race_rower_status(r,race): else: resultobj = IndoorVirtualRaceResult - vs = IndoorVirtualRaceResult.objects.filter(userid=r.id,race=race) + vs = resultobj.objects.filter(userid=r.id,race=race) if vs: has_registered = True is_complete = vs[0].coursecompleted @@ -825,10 +825,10 @@ def race_can_adddiscipline(r,race): userid=r.id, race=race) - if not records: return False + start_time = race.start_time start_date = race.startdate startdatetime = datetime.combine(start_date,start_time) @@ -838,7 +838,6 @@ def race_can_adddiscipline(r,race): evaluation_closure = race.evaluation_closure - if timezone.now() < evaluation_closure: is_complete,has_registered = race_rower_status(r,race) if has_registered: @@ -1120,6 +1119,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0): id=recordid ) + records = IndoorVirtualRaceResult.objects.filter( userid=r.id, race=race, diff --git a/rowers/tests/test_aavirtualevents.py b/rowers/tests/test_aavirtualevents.py index 895eca36..73ad8504 100644 --- a/rowers/tests/test_aavirtualevents.py +++ b/rowers/tests/test_aavirtualevents.py @@ -119,7 +119,7 @@ class VirtualEventViewTest(TestCase): ) # register Piet for submitergrace - record = IndoorVirtualRaceResult.objects.create( + self.pietrecord = IndoorVirtualRaceResult.objects.create( userid = self.rpiet.id, teamname = faker.word(), race = self.submitergrace, @@ -127,17 +127,18 @@ class VirtualEventViewTest(TestCase): f = self.upiet.first_name, l = self.upiet.last_name ), - weightcategory='hwt', - adaptiveclass='None', - duration=datetime.time(0,0), - boatclass='rower', - coursecompleted=False, + weightcategory='hwt', + adaptiveclass='None', + duration=datetime.time(0,0), + boatclass='rower', + coursecompleted=False, + sex='male' ) result = plannedsessions.add_rower_race(self.rpiet,self.submitergrace) # register Henk for submitergrace - record = IndoorVirtualRaceResult.objects.create( + self.henkrecord = IndoorVirtualRaceResult.objects.create( userid = self.rhenk.id, teamname = faker.word(), race = self.submitergrace, @@ -207,7 +208,7 @@ class VirtualEventViewTest(TestCase): ) # register Piet for submitotwgrace - record = VirtualRaceResult.objects.create( + self.pietotwrecord = VirtualRaceResult.objects.create( userid = self.rpiet.id, teamname = faker.word(), race = self.submitotwrace, @@ -231,7 +232,7 @@ class VirtualEventViewTest(TestCase): # OTW matching course result = get_random_file(filename='rowers/tests/testdata/uherskehradiste_otw.csv') - self.wuh_otw = WorkoutFactory(user=self.r, + self.wuh_otw = WorkoutFactory(user=self.rpiet, csvfilename=result['filename'], starttime=result['starttime'], startdatetime=result['startdatetime'], @@ -340,6 +341,38 @@ class VirtualEventViewTest(TestCase): url = reverse('virtualevents_view') response = self.c.get(url) self.assertEqual(response.status_code,200) + + # post + + form_data = { + 'country':'All', + 'regattatype':'upcoming' + } + form = VirtualRaceSelectForm(form_data) + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data) + self.assertEqual(response.status_code,200) + + form_data = { + 'country':'All', + 'regattatype':'ongoing' + } + form = VirtualRaceSelectForm(form_data) + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data) + self.assertEqual(response.status_code,200) + + form_data = { + 'country':'All', + 'regattatype':'previous' + } + form = VirtualRaceSelectForm(form_data) + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data) + self.assertEqual(response.status_code,200) # set up new OTE race @@ -385,6 +418,51 @@ class VirtualEventViewTest(TestCase): + # set up new OTE race + def test_edit_indoorrace(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('indoorvirtualevent_edit_view', + kwargs={'id':self.openergrace.id}) + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'startdate':self.tomorrow.strftime('%Y-%m-%d'), + 'start_time':'8:00:00', + 'enddate': self.nextweek.strftime('%Y-%m-%d'), + 'end_time':'8:00:00', + 'comment': faker.text(), + 'sessionunit': 'm', + 'sessionvalue': 500, + 'name': faker.word(), + 'registration_form':'deadline', + 'registration_closure_0': self.nextweek.strftime('%Y-%m-%d'), + 'registration_closure_1': self.nextweek.strftime('%H:%M:%S'), + 'evaluation_closure_0': self.nextweek.strftime('%Y-%m-%d'), + 'evaluation_closure_1': self.nextweek.strftime('%H:%M:%S'), + 'contact_phone': '', + 'contact_email': self.u.email, + 'timezone': 'UTC' + } + + + form = IndoorVirtualRaceForm(form_data) + if not form.is_valid(): + print form.errors + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data,follow=True) + + self.assertRedirects(response, + expected_url = reverse('virtualevent_view', + kwargs={'id':self.openergrace.id}), + status_code=302,target_status_code=200) + + + + # set up new otw race # set up new OTE race @@ -425,6 +503,44 @@ class VirtualEventViewTest(TestCase): expected_url = reverse('virtualevents_view'), status_code=302,target_status_code=200) + def test_edit_race(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('virtualevent_edit_view',kwargs={'id':self.openotwrace.id}) + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'startdate':self.tomorrow.strftime('%Y-%m-%d'), + 'start_time':'8:00:00', + 'enddate': self.nextweek.strftime('%Y-%m-%d'), + 'end_time':'8:00:00', + 'comment': faker.text(), + 'course': str(self.course.id), + 'name': faker.word(), + 'registration_form':'deadline', + 'registration_closure_0': self.nextweek.strftime('%Y-%m-%d'), + 'registration_closure_1': self.nextweek.strftime('%H:%M:%S'), + 'evaluation_closure_0': self.nextweek.strftime('%Y-%m-%d'), + 'evaluation_closure_1': self.nextweek.strftime('%H:%M:%S'), + 'contact_phone': '', + 'contact_email': self.u.email, + } + + + form = VirtualRaceForm(form_data) + if not form.is_valid(): + print form.errors + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data,follow=True) + + self.assertRedirects(response, + expected_url = reverse('virtualevent_view', + kwargs={'id':self.openotwrace.id}), + status_code=302,target_status_code=200) + # view def test_race_view(self): login = self.c.login(username=self.u.username, password=self.password) @@ -450,12 +566,15 @@ class VirtualEventViewTest(TestCase): # register # withdraw - def register_race_view(self): + def test_register_race_view(self): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('indoorvirtualevent_register_view',kwargs={'id':self.openergrace.id}) + url = reverse('indoorvirtualevent_register_view', + kwargs={'id':self.openergrace.id}) + response = self.c.get(url) + self.assertEqual(response.status_code,200) form_data = { 'teamname': faker.word(), @@ -484,6 +603,7 @@ class VirtualEventViewTest(TestCase): url = reverse('indoorvirtualevent_register_view',kwargs={'id':self.openergrace.id}) response = self.c.get(url) + self.assertEqual(response.status_code,200) form_data = { 'teamname': faker.word(), @@ -506,6 +626,12 @@ class VirtualEventViewTest(TestCase): expected_url=expected_url, status_code=302,target_status_code=200) + url = reverse('indoorvirtualevent_toggle_email_view', + kwargs={'id':self.openergrace.id}) + + response = self.c.get(url,follow=True) + self.assertEqual(response.status_code,200) + url = reverse('virtualevent_withdraw_view',kwargs={'id':self.openergrace.id}) response = self.c.get(url,follow=True) @@ -515,14 +641,205 @@ class VirtualEventViewTest(TestCase): expected_url=expected_url, status_code=302,target_status_code=200) + # add boat (OTW) + def test_register_otwrace_view(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('virtualevent_register_view', + kwargs={'id':self.openotwrace.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'teamname': faker.word(), + 'weightcategory': 'hwt', + 'adaptiveclass': 'None', + 'age': 46, + 'boatclass':'water', + 'boattype':'1x' + } + + form = VirtualRaceResultForm(form_data) + if not form.is_valid(): + print form.errors + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data,follow=True) + + expected_url = reverse('virtualevent_view',kwargs={'id':self.openotwrace.id}) + + self.assertRedirects(response, + expected_url=expected_url, + status_code=302,target_status_code=200) + + url = reverse('virtualevent_addboat_view', + kwargs = {'id':self.openotwrace.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'teamname': faker.word(), + 'weightcategory': 'hwt', + 'adaptiveclass': 'None', + 'age': 46, + 'boatclass':'water', + 'boattype':'2x' + } + + form = VirtualRaceResultForm(form_data) + if not form.is_valid(): + print form.errors + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data,follow=True) + + expected_url = reverse('virtualevent_view',kwargs={'id':self.openotwrace.id}) + + self.assertRedirects(response, + expected_url=expected_url, + status_code=302,target_status_code=200) + + url = reverse('virtualevent_toggle_email_view', + kwargs={'id':self.openotwrace.id}) + + response = self.c.get(url,follow=True) + self.assertEqual(response.status_code,200) + + # submit result (OTE) + def test_ote_submit(self): + login = self.c.login(username=self.upiet.username, password=self.passwordpiet) + self.assertTrue(login) + + url = reverse('virtualevent_submit_result_view', + kwargs={'id':self.submitergrace.id, + 'workoutid':self.wduzend_rpiet.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'workouts':[self.wduzend_rpiet.id], + 'record': self.pietrecord.id + } + + response = self.c.post(url,form_data,follow=True) + self.assertEqual(response.status_code,200) + + therecord = IndoorVirtualRaceResult.objects.get(userid=self.rpiet.id, + race=self.submitergrace, + id=self.pietrecord.id) + + + self.assertTrue(therecord.coursecompleted) + + url = reverse('virtualevent_ranking_view', + kwargs={'id':self.submitergrace.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + # submit result (OTE) + def test_ote_submitfalse(self): + login = self.c.login(username=self.upiet.username, password=self.passwordpiet) + self.assertTrue(login) + + url = reverse('virtualevent_submit_result_view', + kwargs={'id':self.submitergrace.id, + 'workoutid':self.wother_rpiet.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'workouts':[self.wother_rpiet.id], + 'record': self.pietrecord.id + } + + response = self.c.post(url,form_data,follow=True) + self.assertEqual(response.status_code,200) + + therecord = IndoorVirtualRaceResult.objects.get(userid=self.rpiet.id, + race=self.submitergrace, + id=self.pietrecord.id) + + + self.assertTrue(not therecord.coursecompleted) # submit result (OTW) + def test_otw_submit(self): + login = self.c.login(username=self.upiet.username, password=self.passwordpiet) + self.assertTrue(login) + + url = reverse('virtualevent_submit_result_view', + kwargs={'id':self.submitotwrace.id, + 'workoutid':self.wuh_otw.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'workouts':[self.wuh_otw.id], + 'record': self.pietotwrecord.id + } + + response = self.c.post(url,form_data,follow=True) + self.assertEqual(response.status_code,200) + # course view - + # submit result (OTW) + def test_otw_courses(self): + login = self.c.login(username=self.upiet.username, password=self.passwordpiet) + self.assertTrue(login) + + url = reverse('courses_view') + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + url = reverse('course_map_view',kwargs={'id':self.course.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + url = reverse('course_view',kwargs={'id':self.course.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + def test_otw_courses_edit(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('course_edit_view',kwargs={'id':self.course.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'name': faker.word(), + 'country': 'Czechia', + 'notes': faker.text(), + } + + form = GeoCourseEditForm(form_data) + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data) + self.assertEqual(response.status_code,200) + + url = reverse('course_map_view',kwargs={'id':self.course.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + # disqualify # standalone # calculate course adherence diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index 5c341767..2fe01ee9 100644 Binary files a/rowers/tests/testdata/testdata.csv.gz and b/rowers/tests/testdata/testdata.csv.gz differ diff --git a/rowers/urls.py b/rowers/urls.py index ca60e2cf..3fe4c64b 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -627,10 +627,12 @@ urlpatterns = [ url(r'^courses/(?P\d+)/edit/$',views.course_edit_view, name='course_edit_view'), url(r'^courses/(?P\d+)/delete/$',views.course_delete_view), - url(r'^courses/(?P\d+)/downloadkml/$',views.course_kmldownload_view), - url(r'^courses/(?P\d+)/replace/$',views.course_replace_view), - url(r'^courses/(?P\d+)/$',views.course_view), - url(r'^courses/(?P\d+)/map/$',views.course_map_view), + url(r'^courses/(?P\d+)/downloadkml/$',views.course_kmldownload_view, + name='course_kmldownload_view'), + url(r'^courses/(?P\d+)/replace/$',views.course_replace_view, + name='course_replace_view'), + url(r'^courses/(?P\d+)/$',views.course_view,name='course_view'), + url(r'^courses/(?P\d+)/map/$',views.course_map_view,name='course_map_view'), # URLS to be created url(r'^help/$',TemplateView.as_view(template_name='help.html'), name='help'), diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index 3067f23c..139d82c3 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -1232,7 +1232,7 @@ def virtualevent_addboat_view(request,id=0): 'name': race.name }, { - 'url': reverse(virtualevent_addboat_view, + 'url': reverse('virtualevent_addboat_view', kwargs = {'id':race.id} ), 'name': 'Add Discipline' @@ -1441,7 +1441,7 @@ def virtualevent_toggle_email_view(request,id=0): record.save() url = reverse('virtualevent_view', - kwargs={'id':record.race.id}) + kwargs={'id':race.id}) return HttpResponseRedirect(url) @@ -1463,7 +1463,7 @@ def indoorvirtualevent_toggle_email_view(request,id=0): record.save() url = reverse('virtualevent_view', - kwargs={'id':record.race.id}) + kwargs={'id':race.id}) return HttpResponseRedirect(url) @@ -2194,7 +2194,6 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): workouts = Workout.objects.filter(id=selectedworkout) - if race.sessiontype == 'race': result,comments,errors,jobid = add_workout_race( workouts,race,r,