diff --git a/rowers/tasks.py b/rowers/tasks.py index 6b19f50d..fdaf22fe 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -2834,7 +2834,7 @@ def handle_rp3_async_workout(userid,rp3token,rp3id,startdatetime,max_attempts,de ) - if response.status_code != 200: + if response.status_code != 200: # pragma: no cover have_link = True workout_download_details = pd.json_normalize(response.json()['data']['download']) @@ -2845,12 +2845,12 @@ def handle_rp3_async_workout(userid,rp3token,rp3id,startdatetime,max_attempts,de counter += 1 - if counter>max_attempts: + if counter>max_attempts: # pragma: no cover have_link = True time.sleep(waittime) - if download_url == '': + if download_url == '': # pragma: no cover return 0 filename = 'media/RP3Import_'+str(rp3id)+'.csv' @@ -2858,15 +2858,15 @@ def handle_rp3_async_workout(userid,rp3token,rp3id,startdatetime,max_attempts,de res = requests.get(download_url,headers=headers) - if not startdatetime: + if not startdatetime: # pragma: no cover startdatetime = str(timezone.now()) try: startdatetime = str(startdatetime) - except: + except: # pragma: no cover pass - if res.status_code != 200: + if res.status_code != 200: # pragma: no cover return 0 @@ -2889,7 +2889,7 @@ def handle_rp3_async_workout(userid,rp3token,rp3id,startdatetime,max_attempts,de response = session.post(UPLOAD_SERVICE_URL,json=uploadoptions) - if response.status_code != 200: + if response.status_code != 200: # pragma: no cover return 0 workoutid = response.json()['id'] @@ -2902,7 +2902,7 @@ def handle_nk_async_workout(alldata,userid,nktoken,nkid,delaysec,defaulttimezone try: data = alldata[nkid] - except KeyError: + except KeyError: # pragma: no cover data = alldata[int(nkid)] params = { @@ -3001,7 +3001,7 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone try: t = data['comments'].split('\n', 1)[0] title += t[:40] - except: + except: # pragma: no cover title = '' weightcategory = 'hwt' @@ -3033,7 +3033,7 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone try: notes = data['comments'] name = notes[:40] - except (KeyError,TypeError): + except (KeyError,TypeError): # pragma: no cover notes = 'C2 Import Workout from {startdatetime}'.format(startdatetime=startdatetime) name = notes @@ -3044,10 +3044,10 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone url = "https://log.concept2.com/api/users/me/results/"+str(c2id)+"/strokes" try: s = requests.get(url,headers=headers) - except ConnectionError: + except ConnectionError: # pragma: no cover return 0 - if s.status_code != 200: + if s.status_code != 200: # pragma: no cover return 0 strokedata = pd.DataFrame.from_dict(s.json()['data']) @@ -3065,7 +3065,7 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone nr_rows = len(unixtime) - try: + try: # pragma: no cover latcoord = strokedata.loc[:,'lat'] loncoord = strokedata.loc[:,'lon'] except: @@ -3075,19 +3075,19 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone try: strokelength = strokedata.loc[:,'strokelength'] - except: + except: # pragma: no cover strokelength = np.zeros(nr_rows) dist2 = 0.1*strokedata.loc[:,'d'] try: spm = strokedata.loc[:,'spm'] - except KeyError: + except KeyError: # pragma: no cover spm = 0*dist2 try: hr = strokedata.loc[:,'hr'] - except KeyError: + except KeyError: # pragma: no cover hr = 0*spm pace = strokedata.loc[:,'p']/10. @@ -3096,7 +3096,7 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone velo = 500./pace power = 2.8*velo**3 - if workouttype == 'bike': + if workouttype == 'bike': # pragma: no cover velo = 1000./pace df = pd.DataFrame({'TimeStamp (sec)':unixtime, @@ -3142,12 +3142,12 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone response = session.post(UPLOAD_SERVICE_URL,json=uploadoptions) - if response.status_code != 200: + if response.status_code != 200: # pragma: no cover return 0 workoutid = response.json()['id'] - if debug: + if debug: # pragma: no cover engine = create_engine(database_url_debug, echo=False) else: engine = create_engine(database_url, echo=False) @@ -3158,7 +3158,7 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone with engine.connect() as conn, conn.begin(): result = conn.execute(query) tdata = result.fetchall() - if tdata: + if tdata: # pragma: no cover newc2id = tdata[0][0] conn.close() @@ -3185,16 +3185,16 @@ def handle_c2_async_workout(alldata,userid,c2token,c2id,delaysec,defaulttimezone # summary if 'workout' in data: - if 'splits' in data['workout']: + if 'splits' in data['workout']: # pragma: no cover splitdata = data['workout']['splits'] - elif 'intervals' in data['workout']: + elif 'intervals' in data['workout']: # pragma: no cover splitdata = data['workout']['intervals'] - else: + else: # pragma: no cover splitdata = False else: splitdata = False - if splitdata: + if splitdata: # pragma: no cover summary,sa,results = summaryfromsplitdata(splitdata,data,csvfilename,workouttype=workouttype) query = "UPDATE `rowers_workout` SET `summary` = '%s' WHERE `id` = %s" % (summary, workoutid) @@ -3440,7 +3440,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu try: power = strokedata.loc[:,'power'] - except KeyError: + except KeyError: # pragma: no cover power = 2.8*velo**3 #if power.std() == 0 and power.mean() == 0: diff --git a/rowers/tests/test_imports.py b/rowers/tests/test_imports.py index affe1025..ce2463a4 100644 --- a/rowers/tests/test_imports.py +++ b/rowers/tests/test_imports.py @@ -292,6 +292,20 @@ class C2Objects(DjangoTestCase): res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2') + @patch('rowers.tasks.requests.get',side_effect=mocked_requests) + @patch('rowers.tasks.requests.post',side_effect=mocked_requests) + @patch('rowers.tasks.requests.session', side_effect=mocked_requests) + def test_handle_c2_get_workouts(self, mock_get, mockpost,MockSession): + with open('rowers/tests/testdata/c2workoutlist.txt','r') as infile: + c2workoutdata = json.load(infile) + + alldata = {} + for item in c2workoutdata['data']: + alldata[item['id']] = item + + res = tasks.handle_c2_async_workout(alldata,self.u.id,self.r.c2token,33991243,0,self.r.defaulttimezone) + self.assertEqual(res,1) + @override_settings(TESTING=True) class C2ObjectsTokenExpired(DjangoTestCase): def setUp(self): diff --git a/rowers/tests/test_plans.py b/rowers/tests/test_plans.py index a961e0bb..18651eea 100644 --- a/rowers/tests/test_plans.py +++ b/rowers/tests/test_plans.py @@ -182,6 +182,99 @@ class TrainingPlanTest(TestCase): # status_code=302,target_status_code=200) +@override_settings(TESTING=True) +class SessionTemplateTest(TestCase): + def setUp(self): + self.u = UserFactory() + + self.r = Rower.objects.create(user=self.u, + birthdate=faker.profile()['birthdate'], + gdproptin=True,surveydone=True, + gdproptindate=timezone.now(), + rowerplan='coach') + + self.c = Client() + self.user_workouts = WorkoutFactory.create_batch(5, user=self.r) + self.factory = RequestFactory() + self.password = faker.word() + self.u.set_password(self.password) + self.u.save() + self.pss = [] + + for w in self.user_workouts: + startdatetime = w.startdatetime + + startdate = (startdatetime-datetime.timedelta(days=1)).date() + enddate = (startdatetime+datetime.timedelta(days=1)).date() + preferreddate = startdatetime.date() + + ps = SessionFactory(startdate=startdate,enddate=enddate, + sessiontype='session', + sessionmode = 'time', + criterium = 'none', + sessionvalue = 60, + sessionunit='min', + preferreddate=preferreddate, + manager=self.u, + ) + + + ps.save() + + self.pss.append(ps) + + result = plannedsessions.add_rower_session(self.r,ps) + + + def tearDown(self): + for workout in self.user_workouts: + try: + os.remove(workout.csvfilename) + except (IOError, FileNotFoundError,OSError): + pass + + def test_createtemplate_view(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('plannedsession_createtemplate_view') + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + post_data = { + 'comment': faker.text(), + 'criterium': 'none', + 'sessionsport': 'water', + 'sessionmode':'time', + 'sessiontype':'session', + 'sessionunit':'min', + 'sessionvalue': '60', + 'name': faker.word(), + } + + form = PlannedSessionTemplateForm(post_data) + self.assertTrue(form.is_valid()) + + expected_url = reverse('template_library_view') + + + response = self.c.post(url,post_data,follow=True) + self.assertRedirects(response,expected_url=expected_url,status_code=302,target_status_code=200) + + templates = PlannedSession.objects.filter(is_template=True) + self.assertEqual(templates.count(),1) + + t = templates[0] + t.tags.add('test') + url = reverse('template_share_view',kwargs={'id':t.id}) + + response = self.c.get(url,follow=True) + self.assertRedirects(response,expected_url=expected_url,status_code=302,target_status_code=200) + + url = reverse('template_makeprivate_view',kwargs={'id':t.id}) + + response = self.c.get(url,follow=True) + self.assertRedirects(response,expected_url=expected_url,status_code=302,target_status_code=200) @override_settings(TESTING=True) class SessionLinkTest(TestCase): @@ -1335,6 +1428,7 @@ class PlannedSessionsView(TestCase): self.ps_trimp.save() added = plannedsessions.add_rower_session(self.u.rower,self.ps_trimp) added = plannedsessions.add_team_session(self.team,self.ps_trimp) + self.ps_trimp.save() def tearDown(self): try: @@ -1359,6 +1453,53 @@ class PlannedSessionsView(TestCase): # expected_url=expected_url, # status_code=302,target_status_code=200) + def test_teamclone_view(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('plannedsession_teamclone_view',kwargs={'id':self.ps_trimp.id}) + + today = datetime.date.today() + b = datetime.date.today()-timezone.timedelta(today.weekday()) + e = b+timezone.timedelta(days=6) + + expected_url = '/rowers/sessions/teamedit/5/' + + response = self.c.get(url,follow=True) + self.assertEqual(response.status_code,200) + + def test_totemplate_view(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('plannedsession_totemplate_view',kwargs={'id':self.ps_trimp.id}) + response = self.c.get(url,follow=True) + self.assertEqual(response.status_code,200) + + + def test_message_view(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('plannedsession_message_view',kwargs={'id':self.ps_trimp.id}) + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'rower':[self.r.id], + 'subject':'test', + 'message':'apestaart en knokroos' + } + + form = VirtualRaceAthleteForm(form_data,instance=self.ps_trimp) + self.assertTrue(form.is_valid()) + + response = self.c.post(url,form_data,follow=True) + expected_url = reverse('plannedsession_view',kwargs={'id':self.ps_trimp.id}) + + self.assertRedirects(response,expected_url=expected_url,status_code=302,target_status_code=200) + + def test_multiclone_view(self): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) @@ -1441,6 +1582,7 @@ class PlannedSessionsView(TestCase): form_data = { 'team':[self.team.id], + 'members': [self.r.id], 'startdate': self.w1.startdatetime.date(), 'enddate': (self.w1.startdatetime+datetime.timedelta(days=5)).date(), 'preferreddate': self.w1.startdatetime.date(), @@ -1466,6 +1608,21 @@ class PlannedSessionsView(TestCase): response = self.c.post(url,form_data,follow=True) self.assertEqual(response.status_code,200) + pss = PlannedSession.objects.filter(name=form_data['name'],comment=form_data['comment']) + self.assertEqual(pss.count(),1) + ps = pss[0] + url = reverse('plannedsession_teamedit_view',kwargs={'id':ps.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data['name'] = faker.word() + plannedsessionform = PlannedSessionForm(form_data,instance=ps) + self.assertTrue(plannedsessionform.is_valid()) + + response = self.c.post(url,form_data,follow=True) + self.assertEqual(response.status_code,200) + def test_teamedit_view(self): login = self.c.login(username=self.u.username, password=self.password) @@ -1630,9 +1787,7 @@ class PlannedSessionsView(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = '/rowers/sessions/{id}/edit/'.format( - id=self.ps_time.id, - ) + url = reverse('plannedsession_edit_view',kwargs={'id':self.ps_time.id}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -1658,7 +1813,7 @@ class PlannedSessionsView(TestCase): self.assertTrue(form.is_valid()) - response = self.c.post(url,follow=True) + response = self.c.post(url,form_data,follow=True) self.assertEqual(response.status_code,200) diff --git a/rowers/urls.py b/rowers/urls.py index c7b0d31c..26674436 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -761,16 +761,20 @@ urlpatterns = [ name='plannedsession_edit_view'), re_path(r'^sessions/(?P\d+)/templateedit/',views.plannedsession_templateedit_view, name='plannedsession_templateedit_view'), - re_path(r'^sessions/(?P\d+)/maketemplate/$',views.plannedsession_totemplate_view), + re_path(r'^sessions/(?P\d+)/maketemplate/$',views.plannedsession_totemplate_view, + name='plannedsession_totemplate_view'), re_path(r'^sessions/(?P\d+)/compare/$', views.plannedsession_compare_view, name='plannedsession_compare_view'), re_path(r'^sessions/(?P\d+)/compare/user/(?P\d+)/$', views.plannedsession_compare_view, name='plannedsession_compare_view'), - re_path(r'^sessions/(?P\d+)/edit/user/(?P\d+)/$',views.plannedsession_edit_view), - re_path(r'^sessions/(?P\d+)/clone/user/(?P\d+)/$',views.plannedsession_clone_view), - re_path(r'^sessions/(?P\d+)/clone/team/$',views.plannedsession_teamclone_view), + re_path(r'^sessions/(?P\d+)/edit/user/(?P\d+)/$',views.plannedsession_edit_view, + name='plannedsession_edit_view'), + re_path(r'^sessions/(?P\d+)/clone/user/(?P\d+)/$',views.plannedsession_clone_view, + name='plannedsession_clone_view'), + re_path(r'^sessions/(?P\d+)/clone/team/$',views.plannedsession_teamclone_view, + name='plannedsession_teamclone_view'), re_path(r'^sessions/(?P\d+)/clone/$',views.plannedsession_clone_view), re_path(r'^sessions/(?P\d+)/detach/(?P\b[0-9A-Fa-f]+\b)/user/(?P\d+)/$',views.plannedsession_detach_view), re_path(r'^sessions/(?P\d+)/detach/(?P\b[0-9A-Fa-f]+\b)/$',views.plannedsession_detach_view), diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 62f5bd92..918c40c1 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -25,9 +25,9 @@ def plannedsession_comment_view(request,id=0,userid=0): comment = cd['comment'] comment = bleach.clean(comment) try: - if isinstance(comment,unicode): + if isinstance(comment,unicode): # pragma: no cover comment = comment.encode('utf8') - elif isinstance(comment, str): + elif isinstance(comment, str): # pragma: no cover comment = comment.decode('utf8') except: pass @@ -45,13 +45,13 @@ def plannedsession_comment_view(request,id=0,userid=0): comment = comment, url = url, ) - if request.user != manager: + if request.user != manager: # pragma: no cover a_messages.info(r.user,message.encode('ascii','ignore')) sessiontype = 'training session' - if ps.sessiontype == 'race': + if ps.sessiontype == 'race': # pragma: no cover sessiontype = 'online virtual race' - elif ps.sessiontype == 'indoorrace': + elif ps.sessiontype == 'indoorrace': # pragma: no cover sessiontype = 'indoor online virtual race' res = myqueue(queuehigh, @@ -67,14 +67,14 @@ def plannedsession_comment_view(request,id=0,userid=0): ) commenters = {oc.user for oc in comments if oc.notification} - if ps.sessiontype=='race': + if ps.sessiontype=='race': # pragma: no cover registrations = VirtualRaceResult.objects.filter( race__id=ps.id, emailnotifications=True) ids = [rg.userid for rg in registrations] rwrs = Rower.objects.filter(id__in= ids) rowers = {u.user for u in rwrs} - elif ps.sessiontype=='indoorrace': + elif ps.sessiontype=='indoorrace': # pragma: no cover registrations = IndoorVirtualRaceResult.objects.filter( race__id=ps.id, emailnotifications=True) @@ -87,9 +87,9 @@ def plannedsession_comment_view(request,id=0,userid=0): for u in commenters: try: a_messages.info(u,message) - except ValueError: + except ValueError: # pragma: no cover pass - if u != request.user and u != r.user: + if u != request.user and u != r.user: # pragma: no cover ocr = Rower.objects.get(user=u) res = myqueue(queue, handle_sendemailnewresponse, @@ -106,7 +106,7 @@ def plannedsession_comment_view(request,id=0,userid=0): sessiontype = sessiontype, commentlink = url ) - if ps.sessiontype in ['race','indoorrace']: + if ps.sessiontype in ['race','indoorrace']: # pragma: no cover followers = VirtualRaceFollower.objects.filter(race__id=ps.id) for follower in followers: othername = '' @@ -133,7 +133,7 @@ def plannedsession_comment_view(request,id=0,userid=0): rower = getrower(request.user) - if ps.sessiontype in ['race','indoorrace']: + if ps.sessiontype in ['race','indoorrace']: # pragma: no cover breadcrumbs = [ { 'url':reverse('virtualevents_view'), @@ -209,12 +209,14 @@ def plannedsession_message_view(request,id=0,userid=0): message, ) + url = reverse('plannedsession_view',kwargs={'id':ps.id}) + if ps.sessiontype in ['race','indoorrace']: # pragma: no cover + url = reverse('virtualevent_view',kwargs={'id':ps.id}) - url = reverse('virtualevent_view',kwargs={'id':ps.id}) return HttpResponseRedirect(url) - if ps.sessiontype in ['race','indoorrace']: + if ps.sessiontype in ['race','indoorrace']: # pragma: no cover breadcrumbs = [ { 'url':reverse('virtualevents_view'), @@ -274,7 +276,7 @@ def plannedsession_multiclone_view( startdate,enddate = get_dates_timeperiod(request) teamid = get_team(request) - if request.method == 'POST' and 'daterange' in request.POST: + if request.method == 'POST' and 'daterange' in request.POST: # pragma: no cover dateform = DateRangeForm(request.POST) if dateform.is_valid(): startdate = dateform.cleaned_data['startdate'] @@ -337,7 +339,7 @@ def plannedsession_multiclone_view( "startdate","preferreddate","enddate").exclude( sessiontype='race') - if teamid: + if teamid: # pragma: no cover sps = sps.filter(team__in=[teamid]) try: team = Team.objects.get(id=teamid) @@ -349,7 +351,7 @@ def plannedsession_multiclone_view( team = None query = request.GET.get('q') - if query: + if query: # pragma: no cover query_list = query.split() sps = sps.filter( reduce(operator.and_, @@ -390,7 +392,7 @@ def plannedsession_multiclone_view( if Team.objects.filter(manager=request.user).count()>=1: teamform = RowerTeamForm(request.user) - if teamid: + if teamid: # pragma: no cover teamform = RowerTeamForm(request.user,initial={'team':teamid}) else: teamform = None @@ -422,7 +424,7 @@ def template_share_view(request,id=0,userid=0): if ps.can_be_shared: ps.is_public = True ps.save() - else: + else: # pragma: no cover messages.error(request,'This planned session comes from a third party and cannot be shared') return HttpResponseRedirect(reverse(template_library_view)) @@ -471,7 +473,7 @@ def template_library_view(request,userid=0): alltags = uniqify(alltags) tag = request.GET.get('tag') - if tag: + if tag: # pragma: no cover tags = [tag] templates = templates.filter(tags__name__in=tags).distinct() @@ -539,11 +541,11 @@ def plannedsession_create_view(request, }) - if '_continue' in request.POST: + if '_continue' in request.POST: # pragma: no cover url = reverse('plannedsession_edit_view',kwargs={ 'id':ps.id, }) - elif '_addanother' in request.POST: + elif '_addanother' in request.POST: # pragma: no cover url = reverse('plannedsession_create_view',kwargs={'userid':userid}) url = url+'?when='+timeperiod @@ -551,7 +553,7 @@ def plannedsession_create_view(request, return HttpResponseRedirect(url) else: - if 'fstartdate' in request.session: + if 'fstartdate' in request.session: # pragma: no cover try: fstartdate = arrow.get(request.session['fstartdate']).date() except KeyError: @@ -586,7 +588,7 @@ def plannedsession_create_view(request, preferreddate = startdate.date() except AttributeError: preferreddate = startdate - if preferreddate < timezone.now().date(): + if preferreddate < timezone.now().date(): # pragma: no cover preferreddate = timezone.now().date() try: @@ -594,7 +596,7 @@ def plannedsession_create_view(request, except AttributeError: pass - if preferreddate > enddate: + if preferreddate > enddate: # pragma: no cover preferreddate = enddate forminitial = { @@ -626,7 +628,7 @@ def plannedsession_create_view(request, sessiontemplates = sessiontemplates.order_by("name") alltags = [] - for t in sessiontemplates: + for t in sessiontemplates: # pragma: no cover tags = t.tags.all() for tag in tags: alltags.append(tag) @@ -634,7 +636,7 @@ def plannedsession_create_view(request, alltags = uniqify(alltags) tag = request.GET.get('tag') - if tag: + if tag: # pragma: no cover tags = [tag] sessiontemplates = sessiontemplates.filter(tags__name__in=tags).distinct() @@ -709,11 +711,11 @@ def plannedsession_createtemplate_view(request, url = reverse('template_library_view') - if '_continue' in request.POST: + if '_continue' in request.POST: # pragma: no cover url = reverse('plannedsession_templateedit_view',kwargs={ 'id':ps.id, }) - elif '_addanother' in request.POST: + elif '_addanother' in request.POST: # pragma: no cover url = reverse('plannedsession_createtemplate_view') return HttpResponseRedirect(url) @@ -733,7 +735,7 @@ def plannedsession_createtemplate_view(request, sessiontemplates = sessiontemplates.order_by("name") alltags = [] - for t in sessiontemplates: + for t in sessiontemplates: # pragma: no cover tags = t.tags.all() for tag in tags: alltags.append(tag) @@ -806,7 +808,7 @@ def plannedsession_multicreate_view(request, ).order_by("startdate","preferreddate","enddate").exclude( sessiontype='race') - if teamid: + if teamid: # pragma: no cover qset = qset.filter(team__in=[teamid]) try: team = Team.objects.get(id=teamid) @@ -844,10 +846,10 @@ def plannedsession_multicreate_view(request, for ps in instances: ps.save() add_rower_session(r,ps) - if team: + if team: # pragma: no cover add_team_session(team,ps) messages.info(request,"Saved changes for Planned Session "+str(ps)) - for obj in ps_formset.deleted_objects: + for obj in ps_formset.deleted_objects: # pragma: no cover messages.info(request,"Deleted Planned Session "+str(obj)) obj.delete() @@ -862,7 +864,7 @@ def plannedsession_multicreate_view(request, enddatestring = enddate.strftime('%Y-%m-%d') url += '?when='+startdatestring+'/'+enddatestring - if team: + if team: # pragma: no cover url += '&team={teamid}'.format(teamid=team.id) return HttpResponseRedirect(url) @@ -888,7 +890,7 @@ def plannedsession_multicreate_view(request, if Team.objects.filter(manager=request.user).count()>=1: teamform = RowerTeamForm(request.user) - if teamid: + if teamid: # pragma: no cover teamform = RowerTeamForm(request.user,initial={'team':teamid}) else: teamform = None @@ -975,11 +977,11 @@ def plannedsession_teamcreate_view(request, 'userid':userid, }) - if '_continue' in request.POST: + if '_continue' in request.POST: # pragma: no cover url = reverse('plannedsession_edit_view',kwargs={ 'id':ps.id, }) - elif '_addanother' in request.POST: + elif '_addanother' in request.POST: # pragma: no cover url = reverse('plannedsession_teamcreate_view',kwargs={'userid':userid}) url = url+'?when='+timeperiod @@ -995,7 +997,7 @@ def plannedsession_teamcreate_view(request, #next = request.GET.get('next', url) #return HttpResponseRedirect(next) - else: + else: # pragma: no cover timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') breadcrumbs = [ { @@ -1035,7 +1037,7 @@ def plannedsession_teamcreate_view(request, 'preferreddate':startdate, } - if 'teams' in request.session: + if 'teams' in request.session: # pragma: no cover teams = request.session['teams'] theteams = Team.objects.filter(id__in=teams) initialteam = { @@ -1113,7 +1115,7 @@ def plannedsession_teamedit_view(request, startdate__lte = startdate, rowers = r, enddate__gte = enddate)[0] - except IndexError: + except IndexError: # pragma: no cover trainingplan = None sps = [] @@ -1138,11 +1140,10 @@ def plannedsession_teamedit_view(request, ) sessionrowerform = PlannedSessionTeamMemberForm(ps,request.POST) - if sessioncreateform.is_valid(): cd = sessioncreateform.cleaned_data - if cd['sessionunit'] == 'min': + if cd['sessionunit'] == 'min': # pragma: no cover cd['sessionmode'] = 'time' elif cd['sessionunit'] in ['km','m']: cd['sessionmode'] = 'distance' @@ -1152,7 +1153,7 @@ def plannedsession_teamedit_view(request, if res: messages.info(request,message) - else: + else: # pragma: no cover messages.error(request,message) @@ -1166,14 +1167,15 @@ def plannedsession_teamedit_view(request, rs = Rower.objects.filter(team__in=[team]) for r in rs: add_rower_session(r,ps) - else: + else: # pragma: no cover remove_team_session(team,ps) - else: + else: # pragma: no cover selectedteams = [] for team in teams: remove_team_session(team,ps) + if sessionrowerform.is_valid(): cd = sessionrowerform.cleaned_data selectedrowers = cd['members'] @@ -1279,7 +1281,7 @@ def plannedsessions_coach_view(request, trainingplan = None - if teamid != 0: + if teamid != 0:# pragma: no cover try: theteam = Team.objects.get(id=teamid) except Team.DoesNotExist: @@ -1297,7 +1299,7 @@ def plannedsessions_coach_view(request, if therower.rowerplan != 'freecoach': rowers = [therower] - else: + else:# pragma: no cover rowers = [] for ps in sps: @@ -1356,7 +1358,7 @@ def plannedsessions_coach_view(request, }) ttemplate = 'plannedsessionscoach.html' - if len(rowers) > 5 and len(rowers) > len(sps): + if len(rowers) > 5 and len(rowers) > len(sps): # pragma: no cover ttemplate = 'plannedsessionscoach2.html' @@ -1386,16 +1388,16 @@ def plannedsessions_view(request, try: r = getrequestplanrower(request,userid=userid) - except PermissionDenied: + except PermissionDenied: # pragma: no cover r = request.user.rower - if startdatestring: + if startdatestring: # pragma: no cover try: startdate = iso8601.parse_date(startdatestring) except ParseError: pass - if enddatestring: + if enddatestring: # pragma: no cover try: enddate = iso8601.parse_date(enddatestring) except ParseError: @@ -1454,7 +1456,7 @@ def plannedsessions_view(request, tss = hrtss totals['distance'] += w.distance totals['time'] += timefield_to_seconds_duration(w.duration) - if w.plannedsession: + if w.plannedsession: # pragma: no cover if w.plannedsession.sessionmode == 'distance': totals['actualdistance'] += w.distance elif w.plannedsession.sessionmode == 'time': @@ -1464,7 +1466,7 @@ def plannedsessions_view(request, elif w.plannedsession.sessionmode == 'TRIMP': totals['actualtrimp'] += thetrimp - if not sps and request.user.rower.rowerplan == 'basic': + if not sps and request.user.rower.rowerplan == 'basic': # pragma: no cover messages.error(request, "You must purchase Coach or Self-coach plans or be part of a team to get planned sessions") @@ -1479,9 +1481,9 @@ def plannedsessions_view(request, totals['planneddistance'] += ps.sessionvalue elif ps.sessionmode == 'time': totals['plannedtime'] += ps.sessionvalue - elif ps.sessionmode == 'rScore': + elif ps.sessionmode == 'rScore': # pragma: no cover totals['plannedrscore'] += ps.sessionvalue - elif ps.sessionmode == 'TRIMP': + elif ps.sessionmode == 'TRIMP': # pragma: no cover totals['plannedtrimp'] += ps.sessionvalue totals['time'] = int(totals['time']/60.) @@ -1572,7 +1574,7 @@ def plannedsessions_manage_view(request,userid=0, initialsession=0): is_ajax = False - if request.is_ajax(): + if request.is_ajax(): # pragma: no cover is_ajax = True r = getrequestrower(request,userid=userid) @@ -1614,7 +1616,7 @@ def plannedsessions_manage_view(request,userid=0, linkedworkouts = [] for w in ws: - if w.plannedsession is not None: + if w.plannedsession is not None: # pragma: no cover linkedworkouts.append(w.id) plannedsessionstuple = [] @@ -1672,7 +1674,7 @@ def plannedsessions_manage_view(request,userid=0, w_form = WorkoutSessionSelectForm(workoutdata=workoutdata) - if is_ajax: + if is_ajax: # pragma: no cover ajax_workouts = [] for id,name in workoutdata['choices']: ininitial = id in initialworkouts @@ -1746,7 +1748,7 @@ def plannedsession_clone_view(request,id=0,userid=0): startdate__lte = startdate, rowers = r, enddate__gte = enddate)[0] - except IndexError: + except IndexError: # pragma: no cover trainingplan = None ps = get_object_or_404(PlannedSession,pk=id) @@ -1773,7 +1775,7 @@ def plannedsession_clone_view(request,id=0,userid=0): if rowers: for rower in rowers: add_rower_session(rower,ps) - else: + else: # pragma: no cover add_rower_session(r,ps) for team in teams: add_team_session(team,ps) @@ -2010,7 +2012,7 @@ def plannedsession_edit_view(request,id=0,userid=0): startdate__lte = startdate, rowers = r, enddate__gte = enddate)[0] - except IndexError: + except IndexError: # pragma: no cover trainingplan = None ps = get_object_or_404(PlannedSession,pk=id) @@ -2147,13 +2149,13 @@ def plannedsession_view(request,id=0,userid=0): r = getrequestplanrower(request,userid=userid) ps = get_object_or_404(PlannedSession,pk=id) - if ps.steps is not None: + if ps.steps is not None: # pragma: no cover jsons = ps.steps else: jsons = {} - try: + try: # pragma: no cover r = VirtualRace.objects.get(id=ps.id) url = reverse('virtualevent_view', kwargs={'id':ps.id} @@ -2162,7 +2164,7 @@ def plannedsession_view(request,id=0,userid=0): except VirtualRace.DoesNotExist: pass - if ps.course: + if ps.course: # pragma: no cover coursescript,coursediv = course_map(ps.course) else: coursescript = '' @@ -2208,7 +2210,7 @@ def plannedsession_view(request,id=0,userid=0): 'sessionresult':0, 'workoutid':w.id, } - if ps.sessiontype == 'coursetest': + if ps.sessiontype == 'coursetest': # pragma: no cover vs = CourseTestResult.objects.filter(plannedsession=ps, workoutid=w.id) @@ -2257,7 +2259,7 @@ def plannedsession_view(request,id=0,userid=0): if ps.sessiontype == 'coursetest': ranking = sorted(ranking, key=lambda k: k['time']) - if ps.sessiontype == 'fastest_distance': + if ps.sessiontype == 'fastest_distance': # pragma: no cover vs = CourseTestResult.objects.filter(plannedsession=ps) if vs: @@ -2293,7 +2295,7 @@ def plannedsession_view(request,id=0,userid=0): pass ranking = sorted(ranking, key=lambda k: k['time']) - if ps.sessiontype == 'fastest_time': + if ps.sessiontype == 'fastest_time': # pragma: no cover vs = CourseTestResult.objects.filter(plannedsession=ps) if vs: @@ -2363,7 +2365,7 @@ def plannedsession_view(request,id=0,userid=0): comments = PlannedSessionComment.objects.filter(plannedsession=ps).order_by("created") steps = '' - if ps.steps: + if ps.steps: # pragma: no cover d = ps.steps steps = ps_dict_get_description_html(d,short=False) @@ -2407,7 +2409,7 @@ class PlannedSessionDelete(DeleteView): def get_context_data(self, **kwargs): context = super(PlannedSessionDelete,self).get_context_data(**kwargs) - if 'userid' in kwargs: + if 'userid' in kwargs: # pragma: no cover userid = kwargs['userid'] else: userid = 0 @@ -2455,7 +2457,7 @@ class PlannedSessionDelete(DeleteView): def get_success_url(self): ws = Workout.objects.filter(plannedsession=self.object) - for w in ws: + for w in ws: # pragma: no cover w.plannedsession = None w.save() @@ -2468,7 +2470,7 @@ class PlannedSessionDelete(DeleteView): def get_object(self, *args, **kwargs): obj = super(PlannedSessionDelete, self).get_object(*args, **kwargs) - if not can_delete_session(self.request.user,obj): + if not can_delete_session(self.request.user,obj): # pragma: no cover raise PermissionDenied('You are not allowed to delete this planned session') return obj