From 4a772ed409bd9ddd98e43db21854efb9b3e1a67c Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 4 Nov 2021 16:30:45 +0100 Subject: [PATCH 1/2] changes in plan and payment around instant plans --- rowers/forms.py | 4 ++-- rowers/views/paymentviews.py | 2 ++ rowers/views/planviews.py | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index db7daea4..ce63eb52 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -108,7 +108,7 @@ class InstantPlanSelectForm(forms.Form): datechoice = forms.ChoiceField(choices=datechoices,initial='enddate',label='Plan by target, start or end date', widget=forms.RadioSelect) notes = forms.CharField(required=False, - max_length=200,label='Course Notes', + max_length=200,label='Plan Notes', widget=forms.Textarea) def __init__(self, *args, **kwargs): @@ -184,7 +184,7 @@ class TrainingPlanBillingForm(forms.Form): paymenttype = forms.CharField(max_length=255,required=True) enddate = forms.DateField(widget=forms.HiddenInput) name = forms.CharField(max_length=255,required=False) - notes = forms.CharField(max_length=255,required=True) + notes = forms.CharField(max_length=255,required=False) status = forms.CharField(max_length=255,required=True) tac= forms.BooleanField(required=True,initial=False) diff --git a/rowers/views/paymentviews.py b/rowers/views/paymentviews.py index 998f6e6e..c93fbceb 100644 --- a/rowers/views/paymentviews.py +++ b/rowers/views/paymentviews.py @@ -249,6 +249,8 @@ def purchase_checkouts_view(request): messages.error(request,"There was an error in the payment form") url = reverse("purchase_checkouts_view") return HttpResponseRedirect(url) + else: + messages.error(request,"There was an error in the payment form") url = reverse('rower_select_instantplan') # pragma: no cover if 'plan' in request.POST: # pragma: no cover diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 5f069603..a9e3a145 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -2670,6 +2670,8 @@ def rower_view_instantplan(request,id='',userid=0): create_sessions_from_json(plansteps,r,startdate,r.user) + messages.info(request,'Your Sessions have been added') + url = reverse('plannedsessions_view') timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') url = url+'?when='+timeperiod @@ -2745,7 +2747,7 @@ def add_instantplan_view(request): if not request.user.is_staff: # pragma: no cover raise PermissionDenied("Not Allowed") - r = getrequestrower(request) + r = request.user.rower if request.method == 'POST': # pragma: no cover form = InstantPlanForm(request.POST,request.FILES) From be5178c155a215355c1d5e4328176e34ac8f71e6 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 4 Nov 2021 19:41:11 +0100 Subject: [PATCH 2/2] adding a few more tests - coverage --- rowers/tasks.py | 19 ++++++++++------ rowers/tests/test_races.py | 42 ++++++++++++++++++++++++++++++++++++ rowers/views/workoutviews.py | 7 +++--- 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/rowers/tasks.py b/rowers/tasks.py index fbef29dd..d6d5284d 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -348,18 +348,25 @@ def handle_strava_sync(stravatoken,workoutid,filename,name,activity_type,descrip try: act = client.update_activity(res.id,activity_type=activity_type, description=description,device_name='Rowsandall.com') + dologging('stravalog.log','Updating activity {id} to {type}'.format( + id=workoutid, + type=activity_type + )) except TypeError: # pragma: no cover act = client.update_activity(res.id,activity_type=activity_type, description=description) + dologging('stravalog.log','Updating activity {id} to {type}'.format( + id=workoutid, + type=activity_type + )) except: # pragma: no cover e = sys.exc_info()[0] - t = time.localtime() - timestamp = bytes('{t}'.format(t=time.strftime('%b-%d-%Y_%H%M', t)),'utf-8') - with open('stravalog.log','ab') as f: - f.write(b'\n') - f.write(timestamp) - f.write(str(e)) + dologging('stravalog.log','Update activity failed with error {e} for {id} to {type}'.format( + id=workoutid, + type=activity_type, + e=e + )) try: os.remove(filename) except: # pragma: no cover diff --git a/rowers/tests/test_races.py b/rowers/tests/test_races.py index e9a9c765..53fa254b 100644 --- a/rowers/tests/test_races.py +++ b/rowers/tests/test_races.py @@ -269,6 +269,24 @@ class ChallengesTest(TestCase): response = self.c.get(url) self.assertEqual(response.status_code,200) + def test_coursemapcompare_view(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('course_mapcompare_view',kwargs={'id':self.ThyroBaantje.id}) + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + def test_coursecompare_view(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('course_compare_view',kwargs={'id':self.ThyroBaantje.id}) + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + + def test_course_create_edit_delete(self): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) @@ -553,6 +571,25 @@ class ChallengesTest(TestCase): response = self.c.post(url) self.assertEqual(response.status_code,200) + @patch('rowers.views.racesviews.myqueue') + def test_course_view(self, mocked_myqueue): + login = self.c.login(username=self.u, password=self.password) + self.assertTrue(login) + + url = reverse('workout_summary_edit_view',kwargs={'id':encoder.encode_hex(self.wthyro.id)}) + + response = self.c.get(url) + self.assertEqual(response.status_code, 200) + + + formdata = { + 'course': self.ThyroBaantje.id + } + + response = self.c.post(url, formdata, follow=True) + self.assertEqual(response.status_code, 200) + + @patch('rowers.views.racesviews.myqueue') def test_virtualevent_view(self,mocked_myqueue): login = self.c.login(username=self.u.username, password=self.password) @@ -764,6 +801,11 @@ class ChallengesTest(TestCase): response = self.c.get(url) self.assertEqual(response.status_code,200) + # workout_mapcompare + url = reverse('workout_course_view', kwargs={'id':encoder.encode_hex(self.wthyro.id)}) + response = self.c.get(url) + self.assertEqual(response.status_code, 200) + # post to compare form_data = { 'workouts':[self.wthyro2.id], diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index ea75cd0a..1245b057 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -308,7 +308,7 @@ def workout_video_create_view(request,id=0): metricsgroups = metricsform.cleaned_data['groups'] try: video_id = get_video_id(url) - except ValueError: + except ValueError: # pragma: no cover messages.error(request,"Not a valid YouTube video link") video_id = None if 'save_button' in request.POST: @@ -2646,7 +2646,7 @@ def workout_view(request,id=0,raceresult=0,sessionresult=0,nocourseraceresult=0) longitudes = rowdata.df[' longitude'] mapscript,mapdiv = leaflet_chart(latitudes,longitudes,row.name,raceresult=raceresult) records = VirtualRaceResult.objects.filter(workoutid=row.id,userid=row.user.user.id,coursecompleted=True) - if records.count()>0: + if records.count()>0: # pragma: no cover courses = list(set([record.course for record in records])) @@ -4751,7 +4751,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""): pass records = VirtualRaceResult.objects.filter(workoutid=row.id,userid=row.user.user.id,coursecompleted=True) - if records.count()>0: + if records.count()>0: # pragma: no cover courses = list(set([record.course for record in records])) @@ -6430,6 +6430,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" ): row = get_workout_by_opaqueid(request,id) r = getrower(request.user) + breadcrumbs = [ { 'url':'/rowers/list-workouts/',