From 60c657f639ed7e56bdadb68a281a7c1426684fb5 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 12 Apr 2021 22:03:40 +0200 Subject: [PATCH] coverage changes --- rowers/templates/workflowconfig2.html | 6 +- rowers/tests/test_team.py | 89 +++++++++++++++++ rowers/urls.py | 4 +- rowers/views/workoutviews.py | 137 ++++++-------------------- 4 files changed, 125 insertions(+), 111 deletions(-) diff --git a/rowers/templates/workflowconfig2.html b/rowers/templates/workflowconfig2.html index 9dff8e1a..3924505a 100644 --- a/rowers/templates/workflowconfig2.html +++ b/rowers/templates/workflowconfig2.html @@ -29,16 +29,16 @@ {{ middlepanel_formset.as_table }} {% csrf_token %} - +
  • {% if rower.defaultlandingpage == 'workout_edit_view' %}

    Default landing page is Edit View. Set default landing page to

    - Workflow View + Workflow View {% else %}

    Default landing page is Workflow View. Set default landing page to

    - Edit View + Edit View {% endif %}
  • diff --git a/rowers/tests/test_team.py b/rowers/tests/test_team.py index 05d16b5a..16a7d96c 100644 --- a/rowers/tests/test_team.py +++ b/rowers/tests/test_team.py @@ -63,6 +63,7 @@ class TeamTest(TestCase): self.c = Client() self.u = self.users[0] + self.r = self.users[0].rower self.password = self.user_passwords[0] self.t = TeamFactory(manager=self.u) @@ -83,6 +84,29 @@ class TeamTest(TestCase): ) self.rekwest.save() + result = get_random_file(filename='rowers/tests/testdata/erg1.csv') + + self.werg1 = WorkoutFactory(user=self.r, + csvfilename=result['filename'], + starttime=result['starttime'], + startdatetime=result['startdatetime'], + duration=result['duration'], + distance=result['totaldist'], + workouttype = 'rower', + ) + + result = get_random_file(filename='rowers/tests/testdata/erg2.csv') + + self.werg2 = WorkoutFactory(user=self.r, + csvfilename=result['filename'], + starttime=result['starttime'], + startdatetime=result['startdatetime'], + duration=result['duration'], + distance=result['totaldist'], + workouttype = 'rower', + ) + + def tearDown(self): for csvfilename in self.csvfilenames: try: @@ -126,6 +150,71 @@ class TeamTest(TestCase): response = self.c.get(url) self.assertEqual(response.status_code, 200) + @patch('rowers.dataprep.create_engine') + @patch('rowers.dataprep.getsmallrowdata_db') + @patch('rowers.middleware.myqueue') + def test_compares(self, mocked_sqlalchemy, mocked_getsmallrowdata_db, + mocked_myqueue): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + + session = self.c.session + session['ids'] = [self.werg1.id,self.werg2.id] + session.save() + + response = self.c.get('/') + + url = reverse('team_comparison_select',kwargs={'teamid':self.t.id}) + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + d1 = self.werg1.date-timedelta(days=2) + d2 = self.werg2.date+timedelta(days=2) + + form_data = { + 'startdate': d1.strftime('%Y-%m-%d'), + 'enddate': d2.strftime('%Y-%m-%d'), + 'modality':'water', + 'waterboattype':['1x'], + } + + form = DateRangeForm(form_data) + self.assertTrue(form.is_valid()) + + form = TrendFlexModalForm(form_data) + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data) + self.assertEqual(response.status_code,200) + + url = reverse('multi_compare_view',kwargs={ + 'userid':self.u.id, + 'id':encoder.encode_hex(self.werg1.id), + }) + + form_data = { + 'xparam':'time', + 'yparam':'power', + 'plottype':'line', + 'teamid': '', + } + + + response = self.c.post(url,form_data,follow=True) + self.assertEqual(response.status_code,200) + + session['plottype'] = 'scatter' + session['xparam'] = 'time' + session['yparam'] = 'hr' + + session.save() + + response = self.c.get('/') + + response = self.c.get(url,follow=True) + self.assertEqual(response.status_code,200) + def test_teamsview(self): url = '/rowers/me/teams/' diff --git a/rowers/urls.py b/rowers/urls.py index e36d55e0..b796cb97 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -344,7 +344,7 @@ urlpatterns = [ # name='workouts_join_select'), re_path(r'^workouts-join/$',views.workouts_join_view,name='workouts_join_view'), re_path(r'^workouts-join/user/(?P\d+)$',views.workouts_join_view,name='workouts_join_view'), - re_path(r'^workouts-join-select/team/(?P\d+)/$',views.workouts_join_select,name='workouts_join_select'), + #re_path(r'^workouts-join-select/team/(?P\d+)/$',views.workouts_join_select,name='workouts_join_select'), # re_path(r'^workouts-join-select/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/$',views.workouts_join_select,name='workouts_join_select'), re_path(r'^workouts-join-select/$',views.workouts_join_select,name='workouts_join_select'), re_path(r'^workouts-join-select/user/(?P\d+)/$',views.workouts_join_select,name='workouts_join_select'), @@ -454,7 +454,7 @@ urlpatterns = [ name='workout_edit_view'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/map/$',views.workout_map_view,name='workout_map_view'), # re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/setprivate/$',views.workout_setprivate_view), - re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/updatecp/$',views.workout_update_cp_view,name='workout_update_cp_view'), +# re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/updatecp/$',views.workout_update_cp_view,name='workout_update_cp_view'), # re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/makepublic/$',views.workout_makepublic_view), # re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/geeky/$',views.workout_geeky_view), # re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/advanced/$',views.workout_advanced_view), diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 69311627..9d908aaa 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -744,7 +744,7 @@ def addmanual_view(request,raceid=0): kwargs={'id':encoder.encode_hex(id)} ) return HttpResponseRedirect(url) - else: + else: # pragma: no cover iform = ImageForm() return render(request,'manualadd.html', {'form':form, @@ -777,27 +777,6 @@ def addmanual_view(request,raceid=0): -@permission_required('workout.change_workout',fn=get_workout_by_opaqueid,raise_exception=True) -@permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True) -@user_passes_test(ispromember,login_url="/rowers/paidplans", - message="This functionality requires a Pro plan or higher. If you are already a Pro user, please log in to access this functionality. If you are already a Pro user, please log in to access this functionality", - redirect_field_name=None) -def workout_update_cp_view(request,id=0): - row = get_workoutuser(id, request) - - row.rankingpiece = True - row.save() - - r = getrower(request.user) - - dataprep.runcpupdate(r) - - if row.workouttype in mytypes.otwtypes: - url = reverse('otwrankings_view') - else: - url = reverse('oterankings_view') - - return HttpResponseRedirect(url) # Reload the workout and calculate the summary from the stroke data (lapIDx) @@ -872,12 +851,11 @@ def workouts_join_view(request,userid=0): return HttpResponseRedirect(url) - else: - return HttpResponse("form is not valid") + else: # pragma: no cover + messages.error("Form is not valid") - else: - url = reverse('workouts_join_select') - return HttpResponseRedirect(url) + url = reverse('workouts_join_select') + return HttpResponseRedirect(url) defaultoptions = { 'includereststrokes': False, @@ -891,17 +869,12 @@ defaultoptions = { message="This functionality requires a Pro plan or higher", redirect_field_name=None) @permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True) -def video_selectworkout(request,userid=0,teamid=0): +def video_selectworkout(request,userid=0): r = getrequestrower(request, userid=userid) user = r.user userid = user.id workouts = Workout.objects.filter(user=r).order_by('-date') - try: - theteam = Team.objects.get(id=teamid) - except Team.DoesNotExist: - theteam = None - if 'options' in request.session: options = request.session['options'] @@ -914,7 +887,7 @@ def video_selectworkout(request,userid=0,teamid=0): except KeyError: # pragma: no cover workouttypes = ['rower','dynamic','slides'] - try: + try: # pragma: no cover modalities = options['modalities'] modality = modalities[0] except KeyError: # pragma: no cover @@ -975,7 +948,7 @@ def video_selectworkout(request,userid=0,teamid=0): url = reverse('workout_video_create_view', kwargs={'id':encoder.encode_hex(selectedworkout.id)}) return HttpResponseRedirect(url) - else: + else: # pragma: no cover id = 0 else: form = WorkoutSingleSelectForm(workouts=workouts) @@ -989,7 +962,7 @@ def video_selectworkout(request,userid=0,teamid=0): negtypes = [] for b in mytypes.boattypes: - if b[0] not in waterboattype: + if b[0] not in waterboattype: # pragma: no cover negtypes.append(b[0]) @@ -1003,29 +976,16 @@ def video_selectworkout(request,userid=0,teamid=0): negtypes = [] for b in mytypes.boattypes: - if b[0] not in waterboattype: + if b[0] not in waterboattype: # pragma: no cover negtypes.append(b[0]) - if theteam is not None and (theteam.viewing == 'allmembers' or theteam.manager == request.user): - workouts = Workout.objects.filter(team=theteam, - startdatetime__gte=startdate, - startdatetime__lte=enddate, - workouttype__in=modalities, - ) - elif theteam is not None and theteam.viewing == 'coachonly': - workouts = Workout.objects.filter(team=theteam,user=r, - startdatetime__gte=startdate, - startdatetime__lte=enddate, - workouttype__in=modalities, - ) - else: - workouts = Workout.objects.filter(user=r, - startdatetime__gte=startdate, - startdatetime__lte=enddate, - workouttype__in=modalities, - ) + workouts = Workout.objects.filter(user=r, + startdatetime__gte=startdate, + startdatetime__lte=enddate, + workouttype__in=modalities, + ) workouts = workouts.order_by( "-date", "-starttime" @@ -1035,17 +995,6 @@ def video_selectworkout(request,userid=0,teamid=0): if rankingonly: workouts = workouts.exclude(rankingpiece=False) - - - - optionsform = AnalysisOptionsForm(initial={ - 'modality':modality, - 'waterboattype':waterboattype, - 'rankingonly':rankingonly, - }) - - - startdatestring = startdate.strftime('%Y-%m-%d') enddatestring = enddate.strftime('%Y-%m-%d') request.session['startdate'] = startdatestring @@ -1091,7 +1040,7 @@ def workouts_join_select(request, userid=0, startdate=timezone.now()-datetime.timedelta(days=30), enddate=timezone.now()+datetime.timedelta(days=1), - teamid=0): + ): @@ -1105,7 +1054,7 @@ def workouts_join_select(request, if 'modalities' in request.session: modalities = request.session['modalities'] - if len(modalities) > 1: + if len(modalities) > 1: # pragma: no cover modality = 'all' else: modality = modalities[0] @@ -1126,12 +1075,12 @@ def workouts_join_select(request, if modalityform.is_valid(): modality = modalityform.cleaned_data['modality'] waterboattype = modalityform.cleaned_data['waterboattype'] - if modality == 'all': + if modality == 'all': # pragma: no cover modalities = [m[0] for m in mytypes.workouttypes] else: modalities = [modality] - if modality != 'water': + if modality != 'water': # pragma: no cover waterboattype = [b[0] for b in mytypes.boattypes] @@ -1164,32 +1113,14 @@ def workouts_join_select(request, enddate = startdate startdate = s - try: - theteam = Team.objects.get(id=teamid) - except Team.DoesNotExist: - theteam = 0 - if theteam and (theteam.viewing == 'allmembers' or theteam.manager == request.user): - workouts = Workout.objects.filter(team=theteam, - startdatetime__gte=startdate, - startdatetime__lte=enddate, - workouttype__in=modalities).order_by("-date", "-starttime").exclude(boattype__in=negtypes) - elif theteam and theteam.viewing == 'coachonly': - workouts = Workout.objects.filter(team=theteam,user=r, - startdatetime__gte=startdate, - startdatetime__lte=enddate, - workouttype__in=modalities).order_by("-date","-starttime").exclude(boattype__in=negtypes) - - - else: - theteam = None - workouts = Workout.objects.filter(user=r, - startdatetime__gte=startdate, - startdatetime__lte=enddate, - workouttype__in=modalities).order_by("-date", "-starttime").exclude(boattype__in=negtypes) + workouts = Workout.objects.filter(user=r, + startdatetime__gte=startdate, + startdatetime__lte=enddate, + workouttype__in=modalities).order_by("-date", "-starttime").exclude(boattype__in=negtypes) query = request.GET.get('q') - if query: + if query: # pragma: no cover query_list = query.split() workouts = workouts.filter( reduce(operator.and_, @@ -1204,10 +1135,6 @@ def workouts_join_select(request, form = WorkoutMultipleCompareForm() form.fields["workouts"].queryset = workouts - if theteam: - theid = theteam.id - else: - theid = 0 joinparamform = WorkoutJoinParamForm() modalityform = TrendFlexModalForm(initial={ @@ -1226,7 +1153,6 @@ def workouts_join_select(request, 'startdate':startdate, 'enddate':enddate, 'active':'nav-workouts', - 'team':theteam, 'form':form, 'joinparamform':joinparamform, 'modalityform':modalityform, @@ -1330,14 +1256,14 @@ def team_comparison_select(request, else: waterboattype = mytypes.waterboattype - if 'rankingonly' in request.session: + if 'rankingonly' in request.session: # pragma: no cover rankingonly = request.session['rankingonly'] else: rankingonly = False if 'modalities' in request.session: modalities = request.session['modalities'] - if len(modalities) > 1: + if len(modalities) > 1: # pragma: no cover modality = 'all' else: modality = modalities[0] @@ -1359,18 +1285,18 @@ def team_comparison_select(request, if modalityform.is_valid(): modality = modalityform.cleaned_data['modality'] waterboattype = modalityform.cleaned_data['waterboattype'] - if modality == 'all': + if modality == 'all': # pragma: no cover modalities = [m[0] for m in mytypes.workouttypes] else: modalities = [modality] - if modality != 'water': + if modality != 'water': # pragma: no cover waterboattype = [b[0] for b in mytypes.boattypes] if 'rankingonly' in modalityform.cleaned_data: rankingonly = modalityform.cleaned_data['rankingonly'] - else: + else: # pragma: no cover rankingonly = False request.session['modalities'] = modalities @@ -1432,7 +1358,7 @@ def team_comparison_select(request, startdatetime__lte=enddate, workouttype__in=modalities).order_by("-date", "-starttime").exclude(boattype__in=negtypes) - if rankingonly: + if rankingonly: # pragma: no cover workouts = workouts.exclude(rankingpiece=False) query = request.GET.get('q') @@ -1450,8 +1376,7 @@ def team_comparison_select(request, if id: firstworkout = get_workout(id) - if not is_workout_team(request.user,firstworkout): - + if not is_workout_team(request.user,firstworkout): # pragma: no cover raise PermissionDenied("You are not allowed to use this workout") firstworkoutquery = Workout.objects.filter(id=encoder.decode_hex(id))