diff --git a/rowers/models.py b/rowers/models.py index f0ced8e5..4b40e835 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2885,8 +2885,11 @@ class PlannedSession(models.Model): if self.sessionvalue <= 0: # pragma: no cover self.sessionvalue = 1 + is_virtualevent = kwargs.pop('is_virtualevent', False) + # manager = self.manager - if self.sessiontype not in ['race', 'indoorrace']: + #if self.sessiontype not in ['race', 'indoorrace']: + if not is_virtualevent: if not can_add_session(self.manager): raise ValidationError( "You must be a Self-Coach user or higher to create a planned session" @@ -3108,6 +3111,8 @@ class VirtualRace(PlannedSession): if self.evaluation_closure < enddatetime: # pragma: no cover self.evaluation_closure = enddatetime + timezone.timedelta(days=1) + kwargs['is_virtualevent'] = True + super(VirtualRace, self).save(*args, **kwargs) diff --git a/rowers/tests/test_races.py b/rowers/tests/test_races.py index 8e7ac627..9a00c6fb 100644 --- a/rowers/tests/test_races.py +++ b/rowers/tests/test_races.py @@ -16,7 +16,7 @@ import rowers.courses as courses import rowers.tasks as tasks from rowers.views.racesviews import * from rowers.utils import calculate_age -from rowers.views import addmanual_view, virtualevent_compare_view +from rowers.views import addmanual_view, virtualevent_compare_view, virtualevent_create_view, fastestvirtualevent_create_view from django.contrib.messages.storage.fallback import FallbackStorage from django.contrib.sessions.middleware import SessionMiddleware @@ -469,6 +469,62 @@ class ChallengesTest(TestCase): self.assertEqual(response.status_code, 200) + @patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests) + def test_fastestrace_create_view(self, mock_get): + self.u.rower.rowerplan = 'basic' + self.u.rower.save() + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('fastestvirtualevent_create_view') + response = self.c.get(url) + self.assertEqual(response.status_code, 200) + + startdate = arrow.get(datetime.datetime.now()-datetime.timedelta(days=1)).datetime.date() + start_time = timezone.now().time() + enddate = startdate+datetime.timedelta(days=5) + end_time = start_time + evaluation_closure = startdate+datetime.timedelta(days=6) + registration_closure = evaluation_closure + + + form_data = { + 'name': 'test 2', + 'startdate': startdate.strftime("%Y-%m-%d"), + 'initial-startdate': startdate.strftime("%Y-%m-%d"), + 'start_time': '13:12:14', + 'enddate': enddate.strftime("%Y-%m-%d"), + 'initial-enddate': enddate.strftime("%Y-%m-%d"), + 'end_time': '13:12:16', + 'timezone': 'US/Pacific', + 'sessionvalue': '2000', + 'sessionunit': 'm', + 'registration_form': 'manual', + 'registration_closure_0': registration_closure.strftime("%Y-%m-%d"), + 'registration_closure_1': registration_closure.strftime("%H:%M:%S"), + 'evaluation_closure_0': evaluation_closure.strftime("%Y-%m-%d"), + 'evaluation_closure_1': evaluation_closure.strftime("%H:%M:%S"), + 'comment': 'no comment', + 'coursestandards': '', + 'contact_phone': '+3164805181', + 'contact_email': 'test@rowsandall.com', + } + + + form = IndoorVirtualRaceForm(form_data) + if not form.is_valid(): + print(form.cleaned_data) + print(form.errors) + self.assertTrue(form.is_valid()) + + response = self.c.post(url, form_data, follow=True) + + expected_url = reverse('virtualevents_view') + + self.assertRedirects(response, expected_url=expected_url, status_code=302, target_status_code=200) + self.assertEqual(response.status_code,200) + + @patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests) def test_fastestrace_view(self, mock_get): login = self.c.login(username=self.u.username, password=self.password) diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index a8798240..db3bde7f 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ