adding tests related to planviews
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -761,16 +761,20 @@ urlpatterns = [
|
||||
name='plannedsession_edit_view'),
|
||||
re_path(r'^sessions/(?P<id>\d+)/templateedit/',views.plannedsession_templateedit_view,
|
||||
name='plannedsession_templateedit_view'),
|
||||
re_path(r'^sessions/(?P<id>\d+)/maketemplate/$',views.plannedsession_totemplate_view),
|
||||
re_path(r'^sessions/(?P<id>\d+)/maketemplate/$',views.plannedsession_totemplate_view,
|
||||
name='plannedsession_totemplate_view'),
|
||||
re_path(r'^sessions/(?P<id>\d+)/compare/$',
|
||||
views.plannedsession_compare_view,
|
||||
name='plannedsession_compare_view'),
|
||||
re_path(r'^sessions/(?P<id>\d+)/compare/user/(?P<userid>\d+)/$',
|
||||
views.plannedsession_compare_view,
|
||||
name='plannedsession_compare_view'),
|
||||
re_path(r'^sessions/(?P<id>\d+)/edit/user/(?P<userid>\d+)/$',views.plannedsession_edit_view),
|
||||
re_path(r'^sessions/(?P<id>\d+)/clone/user/(?P<userid>\d+)/$',views.plannedsession_clone_view),
|
||||
re_path(r'^sessions/(?P<id>\d+)/clone/team/$',views.plannedsession_teamclone_view),
|
||||
re_path(r'^sessions/(?P<id>\d+)/edit/user/(?P<userid>\d+)/$',views.plannedsession_edit_view,
|
||||
name='plannedsession_edit_view'),
|
||||
re_path(r'^sessions/(?P<id>\d+)/clone/user/(?P<userid>\d+)/$',views.plannedsession_clone_view,
|
||||
name='plannedsession_clone_view'),
|
||||
re_path(r'^sessions/(?P<id>\d+)/clone/team/$',views.plannedsession_teamclone_view,
|
||||
name='plannedsession_teamclone_view'),
|
||||
re_path(r'^sessions/(?P<id>\d+)/clone/$',views.plannedsession_clone_view),
|
||||
re_path(r'^sessions/(?P<psid>\d+)/detach/(?P<id>\b[0-9A-Fa-f]+\b)/user/(?P<userid>\d+)/$',views.plannedsession_detach_view),
|
||||
re_path(r'^sessions/(?P<psid>\d+)/detach/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.plannedsession_detach_view),
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user