NK LiNK to NK Logbook
This commit is contained in:
@@ -1002,7 +1002,7 @@ class Rower(models.Model):
|
|||||||
nkrefreshtoken = models.TextField(default='',max_length=1000,
|
nkrefreshtoken = models.TextField(default='',max_length=1000,
|
||||||
blank=True,null=True)
|
blank=True,null=True)
|
||||||
nk_owner_id = models.BigIntegerField(default=0)
|
nk_owner_id = models.BigIntegerField(default=0)
|
||||||
nk_auto_import = models.BooleanField(default=False,verbose_name='NK LiNK auto import')
|
nk_auto_import = models.BooleanField(default=False,verbose_name='NK Logbook auto import')
|
||||||
|
|
||||||
trainingpeaks_auto_export = models.BooleanField(default=False)
|
trainingpeaks_auto_export = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ def checkscores(r,macrocycles):
|
|||||||
|
|
||||||
|
|
||||||
if mm.type == 'userdefined':
|
if mm.type == 'userdefined':
|
||||||
for ps in sps:
|
for ps in sps: # pragma: no cover
|
||||||
ratio, status, cdate = is_session_complete(r,ps)
|
ratio, status, cdate = is_session_complete(r,ps)
|
||||||
if ps.sessionmode == 'time':
|
if ps.sessionmode == 'time':
|
||||||
mm.plantime += ps.sessionvalue
|
mm.plantime += ps.sessionvalue
|
||||||
@@ -256,12 +256,12 @@ def get_execution_report(rower,startdate,enddate,plan=None):
|
|||||||
for w in unmatchedworkouts:
|
for w in unmatchedworkouts:
|
||||||
if w.rscore != 0:
|
if w.rscore != 0:
|
||||||
actualscore += w.rscore
|
actualscore += w.rscore
|
||||||
elif w.hrtss != 0:
|
elif w.hrtss != 0: # pragma: no cover
|
||||||
actualscore += w.hrtss
|
actualscore += w.hrtss
|
||||||
else:
|
else: # pragma: no cover
|
||||||
minutes = w.duration.hour*60+w.duration.minute
|
minutes = w.duration.hour*60+w.duration.minute
|
||||||
actualscore += minutes
|
actualscore += minutes
|
||||||
for ps in sps:
|
for ps in sps: # pragma: no cover
|
||||||
ratio, status, cdate = is_session_complete(rower,ps)
|
ratio, status, cdate = is_session_complete(rower,ps)
|
||||||
if ps.sessionmode == 'rScore':
|
if ps.sessionmode == 'rScore':
|
||||||
plannedscore += ps.sessionvalue
|
plannedscore += ps.sessionvalue
|
||||||
@@ -386,11 +386,11 @@ def add_workouts_plannedsession(ws,ps,r):
|
|||||||
|
|
||||||
# check if all sessions have same date
|
# check if all sessions have same date
|
||||||
dates = [w.date for w in ws]
|
dates = [w.date for w in ws]
|
||||||
if (not all(d == dates[0] for d in dates)) and ps.sessiontype not in ['challenge','cycletarget']:
|
if (not all(d == dates[0] for d in dates)) and ps.sessiontype not in ['challenge','cycletarget']: # pragma: no cover
|
||||||
errors.append('For tests and training sessions, selected workouts must all be done on the same date')
|
errors.append('For tests and training sessions, selected workouts must all be done on the same date')
|
||||||
return result,comments,errors
|
return result,comments,errors
|
||||||
|
|
||||||
if len(ws)>1 and ps.sessiontype == 'test':
|
if len(ws)>1 and ps.sessiontype == 'test': # pragma: no cover
|
||||||
errors.append('For tests, you can only attach one workout')
|
errors.append('For tests, you can only attach one workout')
|
||||||
return result,comments,errors
|
return result,comments,errors
|
||||||
|
|
||||||
@@ -400,7 +400,7 @@ def add_workouts_plannedsession(ws,ps,r):
|
|||||||
ids = [w.id for w in wold] + [w.id for w in ws]
|
ids = [w.id for w in wold] + [w.id for w in ws]
|
||||||
ids = list(set(ids))
|
ids = list(set(ids))
|
||||||
|
|
||||||
if len(ids)>1 and ps.sessiontype in ['test','coursetest','race','fastest_time','fastest_distance']:
|
if len(ids)>1 and ps.sessiontype in ['test','coursetest','race','fastest_time','fastest_distance']: # pragma: no cover
|
||||||
errors.append('For tests, you can only attach one workout')
|
errors.append('For tests, you can only attach one workout')
|
||||||
return result,comments,errors
|
return result,comments,errors
|
||||||
|
|
||||||
@@ -411,7 +411,7 @@ def add_workouts_plannedsession(ws,ps,r):
|
|||||||
w.save()
|
w.save()
|
||||||
result += 1
|
result += 1
|
||||||
comments.append('Attached workout %s to session' % encoder.encode_hex(w.id))
|
comments.append('Attached workout %s to session' % encoder.encode_hex(w.id))
|
||||||
if ps.sessiontype == 'coursetest':
|
if ps.sessiontype == 'coursetest': # pragma: no cover
|
||||||
record = CourseTestResult(
|
record = CourseTestResult(
|
||||||
userid=w.user.id,
|
userid=w.user.id,
|
||||||
plannedsession=ps,
|
plannedsession=ps,
|
||||||
@@ -423,7 +423,7 @@ def add_workouts_plannedsession(ws,ps,r):
|
|||||||
w.id,ps.course.id,record.id,
|
w.id,ps.course.id,record.id,
|
||||||
w.user.user.email,w.user.user.first_name,
|
w.user.user.email,w.user.user.first_name,
|
||||||
mode='coursetest')
|
mode='coursetest')
|
||||||
if ps.sessiontype == 'fastest_distance':
|
if ps.sessiontype == 'fastest_distance': # pragma: no cover
|
||||||
records = CourseTestResult.objects.filter(userid=w.user.id,plannedsession=ps)
|
records = CourseTestResult.objects.filter(userid=w.user.id,plannedsession=ps)
|
||||||
for record in records:
|
for record in records:
|
||||||
#w1 = Workout.objects.get(id=record.workoutid)
|
#w1 = Workout.objects.get(id=record.workoutid)
|
||||||
@@ -454,7 +454,7 @@ def add_workouts_plannedsession(ws,ps,r):
|
|||||||
record.save()
|
record.save()
|
||||||
else:
|
else:
|
||||||
errors.append('Could not find a matching interval')
|
errors.append('Could not find a matching interval')
|
||||||
if ps.sessiontype == 'fastest_time':
|
if ps.sessiontype == 'fastest_time': # pragma: no cover
|
||||||
records = CourseTestResult.objects.filter(userid=w.user.id,plannedsession=ps)
|
records = CourseTestResult.objects.filter(userid=w.user.id,plannedsession=ps)
|
||||||
for record in records:
|
for record in records:
|
||||||
#w1 = Workout.objects.get(id=record.workoutid)
|
#w1 = Workout.objects.get(id=record.workoutid)
|
||||||
@@ -483,7 +483,7 @@ def add_workouts_plannedsession(ws,ps,r):
|
|||||||
record.save()
|
record.save()
|
||||||
else:
|
else:
|
||||||
errors.append('Could not find a matching interval')
|
errors.append('Could not find a matching interval')
|
||||||
else:
|
else: # pragma: no cover
|
||||||
errors.append('Workout %i did not match session dates' % w.id)
|
errors.append('Workout %i did not match session dates' % w.id)
|
||||||
|
|
||||||
return result,comments,errors
|
return result,comments,errors
|
||||||
@@ -497,7 +497,7 @@ def remove_workout_plannedsession(w,ps):
|
|||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def clone_planned_session(ps):
|
def clone_planned_session(ps): # pragma: no cover
|
||||||
ps.save()
|
ps.save()
|
||||||
ps.pk = None # creates new instance
|
ps.pk = None # creates new instance
|
||||||
ps.save()
|
ps.save()
|
||||||
@@ -511,7 +511,7 @@ def timefield_to_seconds_duration(t):
|
|||||||
return duration
|
return duration
|
||||||
|
|
||||||
|
|
||||||
def get_virtualrace_times(virtualrace):
|
def get_virtualrace_times(virtualrace): # pragma: no cover
|
||||||
geocourse = GeoCourse.objects.get(id = virtualrace.course.id)
|
geocourse = GeoCourse.objects.get(id = virtualrace.course.id)
|
||||||
timezone_str = get_course_timezone(geocourse)
|
timezone_str = get_course_timezone(geocourse)
|
||||||
|
|
||||||
@@ -564,13 +564,13 @@ def get_session_metrics(ps):
|
|||||||
tss = dataprep.workout_rscore(w)[0]
|
tss = dataprep.workout_rscore(w)[0]
|
||||||
if not np.isnan(tss) and tss != 0:
|
if not np.isnan(tss) and tss != 0:
|
||||||
rscorev += tss
|
rscorev += tss
|
||||||
elif tss == 0:
|
elif tss == 0: # pragma: no cover
|
||||||
rscorev += hrtss
|
rscorev += hrtss
|
||||||
|
|
||||||
ratio,statusv,completiondate = is_session_complete_ws(ws,ps)
|
ratio,statusv,completiondate = is_session_complete_ws(ws,ps)
|
||||||
try:
|
try:
|
||||||
completedatev = completiondate.strftime('%Y-%m-%d')
|
completedatev = completiondate.strftime('%Y-%m-%d')
|
||||||
except AttributeError:
|
except AttributeError: # pragma: no cover
|
||||||
completedatev = ''
|
completedatev = ''
|
||||||
durationv /= 60.
|
durationv /= 60.
|
||||||
|
|
||||||
@@ -622,7 +622,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
value = ps.sessionvalue
|
value = ps.sessionvalue
|
||||||
if ps.sessionunit == 'min':
|
if ps.sessionunit == 'min':
|
||||||
value *= 60.
|
value *= 60.
|
||||||
elif ps.sessionunit == 'km':
|
elif ps.sessionunit == 'km': # pragma: no cover
|
||||||
value *= 1000.
|
value *= 1000.
|
||||||
|
|
||||||
cratiomin = 1
|
cratiomin = 1
|
||||||
@@ -663,7 +663,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
rscore = dataprep.workout_rscore(w)[0]
|
rscore = dataprep.workout_rscore(w)[0]
|
||||||
if not np.isnan(rscore) and rscore != 0:
|
if not np.isnan(rscore) and rscore != 0:
|
||||||
score += rscore
|
score += rscore
|
||||||
elif rscore == 0:
|
elif rscore == 0: # pragma: no cover
|
||||||
trimp,hrtss = dataprep.workout_trimp(w)
|
trimp,hrtss = dataprep.workout_trimp(w)
|
||||||
score += hrtss
|
score += hrtss
|
||||||
|
|
||||||
@@ -672,7 +672,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
ratio = score/float(int(value))
|
ratio = score/float(int(value))
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError: # pragma: no cover
|
||||||
ratio = 0
|
ratio = 0
|
||||||
|
|
||||||
verdict = 'better than nothing'
|
verdict = 'better than nothing'
|
||||||
@@ -682,10 +682,10 @@ def is_session_complete_ws(ws,ps):
|
|||||||
if ratio == 1.0:
|
if ratio == 1.0:
|
||||||
return ratio,'on target',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
if not completiondate:
|
if not completiondate: # pragma: no cover
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
elif ps.criterium == 'minimum':
|
elif ps.criterium == 'minimum': # pragma: no cover
|
||||||
if ratio >= 1.0:
|
if ratio >= 1.0:
|
||||||
return ratio,'on target',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
@@ -713,7 +713,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
return ratio,'on target',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
elif ps.criterium == 'minimum':
|
elif ps.criterium == 'minimum': # pragma: no cover
|
||||||
if ratio > 1.0:
|
if ratio > 1.0:
|
||||||
return ratio,'on target',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
@@ -721,10 +721,10 @@ def is_session_complete_ws(ws,ps):
|
|||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
else:
|
else:
|
||||||
if not completiondate:
|
if not completiondate: # pragma: no cover
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
elif ps.sessiontype == 'race':
|
elif ps.sessiontype == 'race': # pragma: no cover
|
||||||
vs = VirtualRaceResult.objects.filter(race=ps)
|
vs = VirtualRaceResult.objects.filter(race=ps)
|
||||||
wids = [w.id for w in ws]
|
wids = [w.id for w in ws]
|
||||||
for record in vs:
|
for record in vs:
|
||||||
@@ -736,7 +736,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
ratio = record.distance/ps.sessionvalue
|
ratio = record.distance/ps.sessionvalue
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
return (0,'partial',None)
|
return (0,'partial',None)
|
||||||
elif ps.sessiontype in ['fastest_time','fastest_distance']:
|
elif ps.sessiontype in ['fastest_time','fastest_distance']: # pragma: no cover
|
||||||
vs = CourseTestResult.objects.filter(plannedsession=ps,userid=ws[0].user.user.id)
|
vs = CourseTestResult.objects.filter(plannedsession=ps,userid=ws[0].user.user.id)
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
wids = [w.id for w in ws]
|
wids = [w.id for w in ws]
|
||||||
@@ -757,7 +757,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
)
|
)
|
||||||
record.save()
|
record.save()
|
||||||
return (0,'not done',None)
|
return (0,'not done',None)
|
||||||
elif ps.sessiontype == 'coursetest':
|
elif ps.sessiontype == 'coursetest': # pragma: no cover
|
||||||
vs = CourseTestResult.objects.filter(plannedsession=ps)
|
vs = CourseTestResult.objects.filter(plannedsession=ps)
|
||||||
wids = [w.id for w in ws]
|
wids = [w.id for w in ws]
|
||||||
for record in vs:
|
for record in vs:
|
||||||
@@ -787,7 +787,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
return (0,'not done',None)
|
return (0,'not done',None)
|
||||||
|
|
||||||
|
|
||||||
else:
|
else: # pragma: no cover
|
||||||
if not completiondate:
|
if not completiondate:
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
return ratio,verdict,completiondate
|
return ratio,verdict,completiondate
|
||||||
@@ -797,7 +797,7 @@ def is_session_complete(r,ps):
|
|||||||
verdict = 'not done'
|
verdict = 'not done'
|
||||||
|
|
||||||
|
|
||||||
if r not in ps.rower.all():
|
if r not in ps.rower.all(): # pragma: no cover
|
||||||
return 0,'not assigned',None
|
return 0,'not assigned',None
|
||||||
|
|
||||||
ws = Workout.objects.filter(user=r,plannedsession=ps)
|
ws = Workout.objects.filter(user=r,plannedsession=ps)
|
||||||
@@ -805,7 +805,7 @@ def is_session_complete(r,ps):
|
|||||||
return is_session_complete_ws(ws,ps)
|
return is_session_complete_ws(ws,ps)
|
||||||
|
|
||||||
|
|
||||||
def rank_results(ps):
|
def rank_results(ps): # pragma: no cover
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def add_team_session(t,ps):
|
def add_team_session(t,ps):
|
||||||
@@ -828,7 +828,7 @@ def add_rower_session(r,ps):
|
|||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def remove_team_session(t,ps):
|
def remove_team_session(t,ps): # pragma: no cover
|
||||||
ps.team.remove(t)
|
ps.team.remove(t)
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
@@ -865,7 +865,7 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
|||||||
try:
|
try:
|
||||||
startdate = parser.parse(startdatestring,fuzzy=True).date()
|
startdate = parser.parse(startdatestring,fuzzy=True).date()
|
||||||
enddate = parser.parse(enddatestring, fuzzy=True).date()
|
enddate = parser.parse(enddatestring, fuzzy=True).date()
|
||||||
except ValueError:
|
except ValueError: # pragma: no cover
|
||||||
startdate = timezone.now()-timezone.timedelta(days=5)
|
startdate = timezone.now()-timezone.timedelta(days=5)
|
||||||
startdate = startdate.date()
|
startdate = startdate.date()
|
||||||
enddate = timezone.now().date()
|
enddate = timezone.now().date()
|
||||||
@@ -879,31 +879,31 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
|||||||
|
|
||||||
daterangetester = re.compile('^(\d+-\d+-\d+)\/(\d+-\d+-\d+)')
|
daterangetester = re.compile('^(\d+-\d+-\d+)\/(\d+-\d+-\d+)')
|
||||||
|
|
||||||
if timeperiod=='today':
|
if timeperiod=='today': # pragma: no cover
|
||||||
startdate=date.today()
|
startdate=date.today()
|
||||||
enddate=date.today()
|
enddate=date.today()
|
||||||
elif timeperiod=='tomorrow':
|
elif timeperiod=='tomorrow': # pragma: no cover
|
||||||
startdate=date.today()+timezone.timedelta(days=1)
|
startdate=date.today()+timezone.timedelta(days=1)
|
||||||
enddate=date.today()+timezone.timedelta(days=1)
|
enddate=date.today()+timezone.timedelta(days=1)
|
||||||
elif timeperiod=='thisweek':
|
elif timeperiod=='thisweek': # pragma: no cover
|
||||||
today = date.today()
|
today = date.today()
|
||||||
startdate = date.today()-timezone.timedelta(days=today.weekday())
|
startdate = date.today()-timezone.timedelta(days=today.weekday())
|
||||||
enddate = startdate+timezone.timedelta(days=6)
|
enddate = startdate+timezone.timedelta(days=6)
|
||||||
elif timeperiod=='thismonth':
|
elif timeperiod=='thismonth': # pragma: no cover
|
||||||
today = date.today()
|
today = date.today()
|
||||||
startdate = today.replace(day=1)
|
startdate = today.replace(day=1)
|
||||||
enddate = startdate+timezone.timedelta(days=32)
|
enddate = startdate+timezone.timedelta(days=32)
|
||||||
enddate = enddate.replace(day=1)
|
enddate = enddate.replace(day=1)
|
||||||
enddate = enddate-timezone.timedelta(days=1)
|
enddate = enddate-timezone.timedelta(days=1)
|
||||||
elif timeperiod=='lastweek':
|
elif timeperiod=='lastweek': # pragma: no cover
|
||||||
today = date.today()
|
today = date.today()
|
||||||
enddate = today-timezone.timedelta(days=today.weekday())-timezone.timedelta(days=1)
|
enddate = today-timezone.timedelta(days=today.weekday())-timezone.timedelta(days=1)
|
||||||
startdate = enddate-timezone.timedelta(days=6)
|
startdate = enddate-timezone.timedelta(days=6)
|
||||||
elif timeperiod=='nextweek':
|
elif timeperiod=='nextweek': # pragma: no cover
|
||||||
today = date.today()
|
today = date.today()
|
||||||
startdate = today-timezone.timedelta(days=today.weekday())+timezone.timedelta(days=7)
|
startdate = today-timezone.timedelta(days=today.weekday())+timezone.timedelta(days=7)
|
||||||
enddate = startdate+timezone.timedelta(days=6)
|
enddate = startdate+timezone.timedelta(days=6)
|
||||||
elif timeperiod=='lastmonth':
|
elif timeperiod=='lastmonth': # pragma: no cover
|
||||||
today = date.today()
|
today = date.today()
|
||||||
startdate = today.replace(day=1)
|
startdate = today.replace(day=1)
|
||||||
startdate = startdate-timezone.timedelta(days=3)
|
startdate = startdate-timezone.timedelta(days=3)
|
||||||
@@ -911,7 +911,7 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
|||||||
enddate = startdate+timezone.timedelta(days=32)
|
enddate = startdate+timezone.timedelta(days=32)
|
||||||
enddate = enddate.replace(day=1)
|
enddate = enddate.replace(day=1)
|
||||||
enddate = enddate-timezone.timedelta(days=1)
|
enddate = enddate-timezone.timedelta(days=1)
|
||||||
elif timeperiod=='nextmonth':
|
elif timeperiod=='nextmonth': # pragma: no cover
|
||||||
today = date.today()
|
today = date.today()
|
||||||
startdate = today.replace(day=1)
|
startdate = today.replace(day=1)
|
||||||
startdate = startdate+timezone.timedelta(days=32)
|
startdate = startdate+timezone.timedelta(days=32)
|
||||||
@@ -919,7 +919,7 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
|||||||
enddate = startdate+timezone.timedelta(days=32)
|
enddate = startdate+timezone.timedelta(days=32)
|
||||||
enddate = enddate.replace(day=1)
|
enddate = enddate.replace(day=1)
|
||||||
enddate = enddate-timezone.timedelta(days=1)
|
enddate = enddate-timezone.timedelta(days=1)
|
||||||
elif timeperiod=='lastyear':
|
elif timeperiod=='lastyear': # pragma: no cover
|
||||||
today = date.today()
|
today = date.today()
|
||||||
startdate = today-timezone.timedelta(days=365)
|
startdate = today-timezone.timedelta(days=365)
|
||||||
enddate = today+timezone.timedelta(days=1)
|
enddate = today+timezone.timedelta(days=1)
|
||||||
@@ -929,11 +929,11 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
|||||||
try:
|
try:
|
||||||
startdate = dt.datetime.strptime(tstartdatestring,'%Y-%m-%d').date()
|
startdate = dt.datetime.strptime(tstartdatestring,'%Y-%m-%d').date()
|
||||||
enddate = dt.datetime.strptime(tenddatestring,'%Y-%m-%d').date()
|
enddate = dt.datetime.strptime(tenddatestring,'%Y-%m-%d').date()
|
||||||
if startdate > enddate:
|
if startdate > enddate: # pragma: no cover
|
||||||
startdate2 = enddate
|
startdate2 = enddate
|
||||||
enddate = startdate
|
enddate = startdate
|
||||||
startdate = startdate2
|
startdate = startdate2
|
||||||
except ValueError:
|
except ValueError: # pragma: no cover
|
||||||
startdate = date.today()
|
startdate = date.today()
|
||||||
enddate = date.today()
|
enddate = date.today()
|
||||||
else:
|
else:
|
||||||
@@ -957,7 +957,7 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
|||||||
|
|
||||||
def get_sessions_manager(m,teamid=0,startdate=date.today(),
|
def get_sessions_manager(m,teamid=0,startdate=date.today(),
|
||||||
enddate=date.today()+timezone.timedelta(+1000)):
|
enddate=date.today()+timezone.timedelta(+1000)):
|
||||||
if teamid:
|
if teamid: # pragma: no cover
|
||||||
t = Team.objects.get(id=teamid)
|
t = Team.objects.get(id=teamid)
|
||||||
rs = Rower.objects.filter(team__in=[t]).distinct()
|
rs = Rower.objects.filter(team__in=[t]).distinct()
|
||||||
sps = PlannedSession.objects.filter(
|
sps = PlannedSession.objects.filter(
|
||||||
@@ -1039,7 +1039,7 @@ def update_plannedsession(ps,cd):
|
|||||||
if attr != 'fitfile':
|
if attr != 'fitfile':
|
||||||
setattr(ps, attr, value)
|
setattr(ps, attr, value)
|
||||||
|
|
||||||
if cd['fitfile']:
|
if cd['fitfile']: # pragma: no cover
|
||||||
f = cd['fitfile']
|
f = cd['fitfile']
|
||||||
try:
|
try:
|
||||||
filename, path_and_filename = handle_uploaded_file(f)
|
filename, path_and_filename = handle_uploaded_file(f)
|
||||||
@@ -1079,7 +1079,7 @@ def update_indoorvirtualrace(ps,cd):
|
|||||||
|
|
||||||
registration_form = cd['registration_form']
|
registration_form = cd['registration_form']
|
||||||
registration_closure = cd['registration_closure']
|
registration_closure = cd['registration_closure']
|
||||||
if registration_form == 'manual':
|
if registration_form == 'manual': # pragma: no cover
|
||||||
try:
|
try:
|
||||||
registration_closure = pytz.timezone(
|
registration_closure = pytz.timezone(
|
||||||
timezone_str
|
timezone_str
|
||||||
@@ -1088,9 +1088,9 @@ def update_indoorvirtualrace(ps,cd):
|
|||||||
)
|
)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
registration_closure = startdatetime
|
registration_closure = startdatetime
|
||||||
elif registration_form == 'windowstart':
|
elif registration_form == 'windowstart': # pragma: no cover
|
||||||
registration_closure = startdatetime
|
registration_closure = startdatetime
|
||||||
elif registration_form == 'windowend':
|
elif registration_form == 'windowend': # pragma: no cover
|
||||||
registration_closure = enddatetime
|
registration_closure = enddatetime
|
||||||
else:
|
else:
|
||||||
registration_closure = ps.evaluation_closure
|
registration_closure = ps.evaluation_closure
|
||||||
@@ -1132,7 +1132,7 @@ def update_virtualrace(ps,cd):
|
|||||||
|
|
||||||
registration_form = cd['registration_form']
|
registration_form = cd['registration_form']
|
||||||
registration_closure = cd['registration_closure']
|
registration_closure = cd['registration_closure']
|
||||||
if registration_form == 'manual':
|
if registration_form == 'manual': # pragma: no cover
|
||||||
try:
|
try:
|
||||||
registration_closure = pytz.timezone(
|
registration_closure = pytz.timezone(
|
||||||
timezone_str
|
timezone_str
|
||||||
@@ -1141,9 +1141,9 @@ def update_virtualrace(ps,cd):
|
|||||||
)
|
)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
registration_closure = startdatetime
|
registration_closure = startdatetime
|
||||||
elif registration_form == 'windowstart':
|
elif registration_form == 'windowstart': # pragma: no cover
|
||||||
registration_closure = startdatetime
|
registration_closure = startdatetime
|
||||||
elif registration_form == 'windowend':
|
elif registration_form == 'windowend': # pragma: no cover
|
||||||
registration_closure = enddatetime
|
registration_closure = enddatetime
|
||||||
else:
|
else:
|
||||||
registration_closure = ps.evaluation_closure
|
registration_closure = ps.evaluation_closure
|
||||||
@@ -1191,11 +1191,11 @@ def race_can_edit(r,race):
|
|||||||
)
|
)
|
||||||
if timezone.now()<enddatetime:
|
if timezone.now()<enddatetime:
|
||||||
return True
|
return True
|
||||||
else:
|
else: # pragma: no cover
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
return False
|
return False # pragma: no cover
|
||||||
|
|
||||||
def race_can_submit(r,race):
|
def race_can_submit(r,race):
|
||||||
#if r not in race.rower.all():
|
#if r not in race.rower.all():
|
||||||
@@ -1219,7 +1219,7 @@ def race_can_submit(r,race):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False # pragma: no cover
|
||||||
|
|
||||||
def race_can_editentry(r,race):
|
def race_can_editentry(r,race):
|
||||||
start_time = race.start_time
|
start_time = race.start_time
|
||||||
@@ -1234,12 +1234,12 @@ def race_can_editentry(r,race):
|
|||||||
is_complete,has_registered = race_rower_status(r,race)
|
is_complete,has_registered = race_rower_status(r,race)
|
||||||
if is_complete == False:
|
if is_complete == False:
|
||||||
return True
|
return True
|
||||||
else:
|
else: # pragma: no cover
|
||||||
return False
|
return False
|
||||||
else:
|
else: # pragma: no cover
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False # pragma: no cover
|
||||||
|
|
||||||
def race_can_resubmit(r,race):
|
def race_can_resubmit(r,race):
|
||||||
records = VirtualRaceResult.objects.filter(
|
records = VirtualRaceResult.objects.filter(
|
||||||
@@ -1263,10 +1263,10 @@ def race_can_resubmit(r,race):
|
|||||||
if timezone.now() > startdatetime and timezone.now() < evaluation_closure:
|
if timezone.now() > startdatetime and timezone.now() < evaluation_closure:
|
||||||
is_complete,has_registered = race_rower_status(r,race)
|
is_complete,has_registered = race_rower_status(r,race)
|
||||||
return is_complete
|
return is_complete
|
||||||
else:
|
else: # pragma: no cover
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False # pragma: no cover
|
||||||
|
|
||||||
def race_can_adddiscipline(r,race):
|
def race_can_adddiscipline(r,race):
|
||||||
|
|
||||||
@@ -1276,7 +1276,7 @@ def race_can_adddiscipline(r,race):
|
|||||||
|
|
||||||
if race.sessiontype in ['race']:
|
if race.sessiontype in ['race']:
|
||||||
resultobj = VirtualRaceResult
|
resultobj = VirtualRaceResult
|
||||||
else:
|
else: # pragma: no cover
|
||||||
resultobj = IndoorVirtualRaceResult
|
resultobj = IndoorVirtualRaceResult
|
||||||
|
|
||||||
records = resultobj.objects.filter(
|
records = resultobj.objects.filter(
|
||||||
@@ -1302,12 +1302,12 @@ def race_can_adddiscipline(r,race):
|
|||||||
is_complete,has_registered = race_rower_status(r,race)
|
is_complete,has_registered = race_rower_status(r,race)
|
||||||
if has_registered:
|
if has_registered:
|
||||||
return True
|
return True
|
||||||
else:
|
else: # pragma: no cover
|
||||||
return False
|
return False
|
||||||
else:
|
else: # pragma: no cover
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False # pragma: no cover
|
||||||
|
|
||||||
|
|
||||||
def race_can_withdraw(r,race):
|
def race_can_withdraw(r,race):
|
||||||
@@ -1334,10 +1334,10 @@ def race_can_withdraw(r,race):
|
|||||||
)
|
)
|
||||||
|
|
||||||
registration_closure = race.registration_closure
|
registration_closure = race.registration_closure
|
||||||
if registration_closure is None or registration_closure == '':
|
if registration_closure is None or registration_closure == '': # pragma: no cover
|
||||||
registration_closure = startdatetime
|
registration_closure = startdatetime
|
||||||
|
|
||||||
if timezone.now() > registration_closure:
|
if timezone.now() > registration_closure: # pragma: no cover
|
||||||
return False
|
return False
|
||||||
elif timezone.now() > startdatetime:
|
elif timezone.now() > startdatetime:
|
||||||
return False
|
return False
|
||||||
@@ -1348,7 +1348,7 @@ def race_can_withdraw(r,race):
|
|||||||
def email_submit_race(r,race,workoutid):
|
def email_submit_race(r,race,workoutid):
|
||||||
try:
|
try:
|
||||||
w = Workout.objects.get(id=workoutid)
|
w = Workout.objects.get(id=workoutid)
|
||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist: # pragma: no cover
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if race.sessionmode == 'time':
|
if race.sessionmode == 'time':
|
||||||
@@ -1360,7 +1360,7 @@ def email_submit_race(r,race,workoutid):
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
|
|
||||||
elif race.sessionmode == 'distance':
|
elif race.sessionmode == 'distance': # pragma: no cover
|
||||||
delta = w.distance - race.sessionvalue
|
delta = w.distance - race.sessionvalue
|
||||||
|
|
||||||
if delta > -5 and delta < 5:
|
if delta > -5 and delta < 5:
|
||||||
@@ -1375,7 +1375,7 @@ def email_submit_race(r,race,workoutid):
|
|||||||
if sex == 'not specified':
|
if sex == 'not specified':
|
||||||
sex = 'male'
|
sex = 'male'
|
||||||
|
|
||||||
if not r.birthdate:
|
if not r.birthdate: # pragma: no cover
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
age = calculate_age(r.birthdate)
|
age = calculate_age(r.birthdate)
|
||||||
@@ -1429,7 +1429,7 @@ def email_submit_race(r,race,workoutid):
|
|||||||
race=race
|
race=race
|
||||||
)
|
)
|
||||||
|
|
||||||
if not records:
|
if not records: # pragma: no cover
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
record = records[0]
|
record = records[0]
|
||||||
@@ -1461,12 +1461,12 @@ def email_submit_race(r,race,workoutid):
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
else:
|
else:
|
||||||
return 0
|
return 0 # pragma: no cover
|
||||||
else:
|
else: # pragma: no cover
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
return 0
|
return 0 # pragma: no cover
|
||||||
|
|
||||||
|
|
||||||
def race_can_register(r,race):
|
def race_can_register(r,race):
|
||||||
@@ -1490,10 +1490,10 @@ def race_can_register(r,race):
|
|||||||
)
|
)
|
||||||
|
|
||||||
registration_closure = race.registration_closure
|
registration_closure = race.registration_closure
|
||||||
if registration_closure is None or registration_closure == '':
|
if registration_closure is None or registration_closure == '': # pragma: no cover
|
||||||
registration_closure = startdatetime
|
registration_closure = startdatetime
|
||||||
|
|
||||||
if timezone.now() > registration_closure:
|
if timezone.now() > registration_closure: # pragma: no cover
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
@@ -1507,12 +1507,12 @@ def add_rower_race(r,race):
|
|||||||
def remove_rower_race(r,race,recordid=None):
|
def remove_rower_race(r,race,recordid=None):
|
||||||
race.rower.remove(r)
|
race.rower.remove(r)
|
||||||
|
|
||||||
if race.sessiontype in ['race']:
|
if race.sessiontype in ['race']: # pragma: no cover
|
||||||
recordobj = VirtualRaceResult
|
recordobj = VirtualRaceResult
|
||||||
else:
|
else:
|
||||||
recordobj = IndoorVirtualRaceResult
|
recordobj = IndoorVirtualRaceResult
|
||||||
|
|
||||||
if recordid:
|
if recordid: # pragma: no cover
|
||||||
records = recordobj.objects.filter(userid=r.id,
|
records = recordobj.objects.filter(userid=r.id,
|
||||||
workoutid__isnull=True,
|
workoutid__isnull=True,
|
||||||
race=race,
|
race=race,
|
||||||
@@ -1529,14 +1529,14 @@ def remove_rower_race(r,race,recordid=None):
|
|||||||
def default_class(r,w,race):
|
def default_class(r,w,race):
|
||||||
if r.birthdate:
|
if r.birthdate:
|
||||||
age = calculate_age(r.birthdate)
|
age = calculate_age(r.birthdate)
|
||||||
else:
|
else: # pragma: no cover
|
||||||
age = 25
|
age = 25
|
||||||
|
|
||||||
sex = r.sex
|
sex = r.sex
|
||||||
if sex=='not specified':
|
if sex=='not specified':
|
||||||
sex='male'
|
sex='male'
|
||||||
|
|
||||||
if w is not None:
|
if w is not None: # pragma: no cover
|
||||||
boatclass = w.workouttype
|
boatclass = w.workouttype
|
||||||
boattype = w.boattype
|
boattype = w.boattype
|
||||||
|
|
||||||
@@ -1545,7 +1545,7 @@ def default_class(r,w,race):
|
|||||||
else:
|
else:
|
||||||
if race.sessiontype in ['race','fastest_time','fastest_distance']:
|
if race.sessiontype in ['race','fastest_time','fastest_distance']:
|
||||||
boatclass = 'water'
|
boatclass = 'water'
|
||||||
else:
|
else: # pragma: no cover
|
||||||
boatclass = 'rower'
|
boatclass = 'rower'
|
||||||
|
|
||||||
boattype = '1x'
|
boattype = '1x'
|
||||||
@@ -1565,7 +1565,7 @@ def default_class(r,w,race):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if standards.count()==0:
|
if standards.count()==0: # pragma: no cover
|
||||||
# omit weight
|
# omit weight
|
||||||
standards = CourseStandard.objects.filter(
|
standards = CourseStandard.objects.filter(
|
||||||
agemin__lt=age,agemax__gt=age,
|
agemin__lt=age,agemax__gt=age,
|
||||||
@@ -1642,14 +1642,14 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
|
|||||||
ids = [w.id for w in ws]
|
ids = [w.id for w in ws]
|
||||||
ids = list(set(ids))
|
ids = list(set(ids))
|
||||||
|
|
||||||
if len(ids)>1 and race.sessiontype in ['test','coursetest','race','indoorrace','fastest_time','fastest_distance']:
|
if len(ids)>1 and race.sessiontype in ['test','coursetest','race','indoorrace','fastest_time','fastest_distance']: # pragma: no cover
|
||||||
errors.append('For tests, you can only attach one workout')
|
errors.append('For tests, you can only attach one workout')
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
username = r.user.first_name+' '+r.user.last_name
|
username = r.user.first_name+' '+r.user.last_name
|
||||||
if r.birthdate:
|
if r.birthdate:
|
||||||
age = calculate_age(r.birthdate)
|
age = calculate_age(r.birthdate)
|
||||||
else:
|
else: # pragma: no cover
|
||||||
age = None
|
age = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -1658,7 +1658,7 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
|
|||||||
race=race,
|
race=race,
|
||||||
id=recordid
|
id=recordid
|
||||||
)
|
)
|
||||||
except IndoorVirtualRaceResult.DoesNotExist:
|
except IndoorVirtualRaceResult.DoesNotExist: # pragma: no cover
|
||||||
if doregister:
|
if doregister:
|
||||||
hasinitial,boattype,boatclass,adaptiveclass,weightclass,sex,referencespeed,initialcategory = default_class(r,ws[0],race)
|
hasinitial,boattype,boatclass,adaptiveclass,weightclass,sex,referencespeed,initialcategory = default_class(r,ws[0],race)
|
||||||
if hasinitial:
|
if hasinitial:
|
||||||
@@ -1678,7 +1678,7 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
|
|||||||
else:
|
else:
|
||||||
errors.append("Unable to find a suitable start category")
|
errors.append("Unable to find a suitable start category")
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
else:
|
else: # pragma: no cover
|
||||||
errors.append("Couldn't find this entry")
|
errors.append("Couldn't find this entry")
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
@@ -1688,19 +1688,19 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
|
|||||||
workoutid = ws[0].id
|
workoutid = ws[0].id
|
||||||
)
|
)
|
||||||
|
|
||||||
if ws[0].workouttype != record.boatclass:
|
if ws[0].workouttype != record.boatclass: # pragma: no cover
|
||||||
errors.append('Your workout boat class is different than on your race registration')
|
errors.append('Your workout boat class is different than on your race registration')
|
||||||
return 0,comments,errors,0
|
return 0,comments,errors,0
|
||||||
|
|
||||||
if ws[0].workouttype not in mytypes.otwtypes:
|
if ws[0].workouttype not in mytypes.otwtypes: # pragma: no cover
|
||||||
errors.append('You must submit a on-the-water rowing workout')
|
errors.append('You must submit a on-the-water rowing workout')
|
||||||
return 0,comments, errors, 0
|
return 0,comments, errors, 0
|
||||||
|
|
||||||
if record.weightcategory == 'lwt' and ws[0].weightcategory != record.weightcategory:
|
if record.weightcategory == 'lwt' and ws[0].weightcategory != record.weightcategory: # pragma: no cover
|
||||||
errors.append('Your workout weight category did not match the weight category you registered')
|
errors.append('Your workout weight category did not match the weight category you registered')
|
||||||
return 0,comments, errors,0
|
return 0,comments, errors,0
|
||||||
|
|
||||||
if ws[0].adaptiveclass != record.adaptiveclass:
|
if ws[0].adaptiveclass != record.adaptiveclass: # pragma: no cover
|
||||||
errors.append('Your adaptive classification did not match the registration')
|
errors.append('Your adaptive classification did not match the registration')
|
||||||
return 0,comments, errors, 0
|
return 0,comments, errors, 0
|
||||||
|
|
||||||
@@ -1710,12 +1710,12 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
|
|||||||
ws[0].save()
|
ws[0].save()
|
||||||
result += 1
|
result += 1
|
||||||
|
|
||||||
else:
|
else: # pragma: no cover
|
||||||
errors.append('Workout %i did not match the race window' % ws[0].id)
|
errors.append('Workout %i did not match the race window' % ws[0].id)
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
if result>0:
|
if result>0:
|
||||||
for otherrecord in records:
|
for otherrecord in records: # pragma: no cover
|
||||||
otherrecord.workoutid = None
|
otherrecord.workoutid = None
|
||||||
otherrecord.coursecompleted = False
|
otherrecord.coursecompleted = False
|
||||||
otherrecord.save()
|
otherrecord.save()
|
||||||
@@ -1739,7 +1739,7 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
|
|||||||
record.startsecond = startsecond
|
record.startsecond = startsecond
|
||||||
record.endsecond = endsecond
|
record.endsecond = endsecond
|
||||||
record.save()
|
record.save()
|
||||||
if race.sessiontype == 'fastest_time':
|
if race.sessiontype == 'fastest_time': # pragma: no cover
|
||||||
df = dataprep.getsmallrowdata_db(['time','cumdist'],ids=[ws[0].id])
|
df = dataprep.getsmallrowdata_db(['time','cumdist'],ids=[ws[0].id])
|
||||||
fastest_meters, startsecond, endsecond = datautils.getfastest(df,race.sessionvalue,mode='time')
|
fastest_meters, startsecond, endsecond = datautils.getfastest(df,race.sessionvalue,mode='time')
|
||||||
velo = fastest_meters/(60.*race.sessionvalue)
|
velo = fastest_meters/(60.*race.sessionvalue)
|
||||||
@@ -1757,13 +1757,13 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ws[0].privacy == 'private':
|
if ws[0].privacy == 'private': # pragma: no cover
|
||||||
ws[0].privacy = 'visible'
|
ws[0].privacy = 'visible'
|
||||||
ws[0].save()
|
ws[0].save()
|
||||||
comments.append('Workouts submitted to virtual events have to be public. We have changed the workout to a public workout.')
|
comments.append('Workouts submitted to virtual events have to be public. We have changed the workout to a public workout.')
|
||||||
|
|
||||||
record.save()
|
record.save()
|
||||||
else:
|
else: # pragma: no cover
|
||||||
errors.append('Could not find a valid interval in this workout')
|
errors.append('Could not find a valid interval in this workout')
|
||||||
|
|
||||||
return result, comments, errors, 0
|
return result, comments, errors, 0
|
||||||
@@ -1791,12 +1791,12 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
|
|
||||||
# check if all sessions have same date
|
# check if all sessions have same date
|
||||||
dates = [w.date for w in ws]
|
dates = [w.date for w in ws]
|
||||||
if (not all(d == dates[0] for d in dates)) and race.sessiontype not in ['challenge','cycletarget']:
|
if (not all(d == dates[0] for d in dates)) and race.sessiontype not in ['challenge','cycletarget']: # pragma: no cover
|
||||||
errors.append('For tests and training sessions, selected workouts must all be done on the same date')
|
errors.append('For tests and training sessions, selected workouts must all be done on the same date')
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
|
|
||||||
if len(ws)>1 and race.sessiontype == 'test':
|
if len(ws)>1 and race.sessiontype == 'test': # pragma: no cover
|
||||||
errors.append('For tests, you can only attach one workout')
|
errors.append('For tests, you can only attach one workout')
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
@@ -1805,7 +1805,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
ids = [w.id for w in ws]
|
ids = [w.id for w in ws]
|
||||||
ids = list(set(ids))
|
ids = list(set(ids))
|
||||||
|
|
||||||
if len(ids)>1 and race.sessiontype in ['test','coursetest','race','indoorrace','fastest_time','fastest_distance']:
|
if len(ids)>1 and race.sessiontype in ['test','coursetest','race','indoorrace','fastest_time','fastest_distance']: # pragma: no cover
|
||||||
errors.append('For tests, you can only attach one workout')
|
errors.append('For tests, you can only attach one workout')
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
@@ -1814,7 +1814,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
username = r.user.first_name+' '+r.user.last_name
|
username = r.user.first_name+' '+r.user.last_name
|
||||||
if r.birthdate:
|
if r.birthdate:
|
||||||
age = calculate_age(r.birthdate)
|
age = calculate_age(r.birthdate)
|
||||||
else:
|
else: # pragma: no cover
|
||||||
age = None
|
age = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -1823,7 +1823,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
race=race,
|
race=race,
|
||||||
id=recordid
|
id=recordid
|
||||||
)
|
)
|
||||||
except IndoorVirtualRaceResult.DoesNotExist:
|
except IndoorVirtualRaceResult.DoesNotExist: # pragma: no cover
|
||||||
if doregister:
|
if doregister:
|
||||||
hasinitial,boattype,boatclass,adaptiveclass,weightclass,sex,referencespeed,initialcategory = default_class(r,ws[0],race)
|
hasinitial,boattype,boatclass,adaptiveclass,weightclass,sex,referencespeed,initialcategory = default_class(r,ws[0],race)
|
||||||
if hasinitial:
|
if hasinitial:
|
||||||
@@ -1843,7 +1843,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
else:
|
else:
|
||||||
errors.append("Unable to find a suitable start category")
|
errors.append("Unable to find a suitable start category")
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
else:
|
else: # pragma: no cover
|
||||||
errors.append("Couldn't find this entry")
|
errors.append("Couldn't find this entry")
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
@@ -1864,7 +1864,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
else:
|
else:
|
||||||
t = ws[0].duration
|
t = ws[0].duration
|
||||||
seconds = t.second+t.minute*60.+t.hour*3600.+t.microsecond/1.e6
|
seconds = t.second+t.minute*60.+t.hour*3600.+t.microsecond/1.e6
|
||||||
if seconds != race.sessionvalue*60.:
|
if seconds != race.sessionvalue*60.: # pragma: no cover
|
||||||
errors.append('Your workout did not have the correct duration')
|
errors.append('Your workout did not have the correct duration')
|
||||||
return 0, comments, errors, 0
|
return 0, comments, errors, 0
|
||||||
else:
|
else:
|
||||||
@@ -1875,15 +1875,15 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
errors.append('Your workout boat class is different than on your race registration')
|
errors.append('Your workout boat class is different than on your race registration')
|
||||||
return 0,comments,errors,0
|
return 0,comments,errors,0
|
||||||
|
|
||||||
if ws[0].workouttype not in mytypes.otetypes:
|
if ws[0].workouttype not in mytypes.otetypes: # pragma: no cover
|
||||||
errors.append('You must submit a indoor rowing workout')
|
errors.append('You must submit a indoor rowing workout')
|
||||||
return 0,comments, errors, 0
|
return 0,comments, errors, 0
|
||||||
|
|
||||||
if record.weightcategory == 'lwt' and ws[0].weightcategory != record.weightcategory:
|
if record.weightcategory == 'lwt' and ws[0].weightcategory != record.weightcategory: # pragma: no cover
|
||||||
errors.append('Your workout weight category did not match the weight category you registered')
|
errors.append('Your workout weight category did not match the weight category you registered')
|
||||||
return 0,comments, errors,0
|
return 0,comments, errors,0
|
||||||
|
|
||||||
if ws[0].adaptiveclass != record.adaptiveclass:
|
if ws[0].adaptiveclass != record.adaptiveclass: # pragma: no cover
|
||||||
errors.append('Your adaptive classification did not match the registration')
|
errors.append('Your adaptive classification did not match the registration')
|
||||||
return 0,comments, errors, 0
|
return 0,comments, errors, 0
|
||||||
|
|
||||||
@@ -1893,12 +1893,12 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
ws[0].save()
|
ws[0].save()
|
||||||
result += 1
|
result += 1
|
||||||
|
|
||||||
else:
|
else: # pragma: no cover
|
||||||
errors.append('Workout %i did not match the race window' % ws[0].id)
|
errors.append('Workout %i did not match the race window' % ws[0].id)
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
if result>0:
|
if result>0:
|
||||||
for otherrecord in records:
|
for otherrecord in records: # pragma: no cover
|
||||||
otherrecord.workoutid = None
|
otherrecord.workoutid = None
|
||||||
otherrecord.coursecompleted = False
|
otherrecord.coursecompleted = False
|
||||||
otherrecord.save()
|
otherrecord.save()
|
||||||
@@ -1906,7 +1906,7 @@ def add_workout_indoorrace(ws,race,r,recordid=0,doregister=False):
|
|||||||
record.coursecompleted = True
|
record.coursecompleted = True
|
||||||
record.workoutid = ws[0].id
|
record.workoutid = ws[0].id
|
||||||
|
|
||||||
if ws[0].privacy == 'private':
|
if ws[0].privacy == 'private': # pragma: no cover
|
||||||
ws[0].privacy = 'visible'
|
ws[0].privacy = 'visible'
|
||||||
ws[0].save()
|
ws[0].save()
|
||||||
comments.append('Workouts submitted to virtual events have to be public. We have changed the workout to a public workout.')
|
comments.append('Workouts submitted to virtual events have to be public. We have changed the workout to a public workout.')
|
||||||
@@ -1940,11 +1940,11 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
|
|
||||||
# check if all sessions have same date
|
# check if all sessions have same date
|
||||||
dates = [w.date for w in ws]
|
dates = [w.date for w in ws]
|
||||||
if (not all(d == dates[0] for d in dates)) and race.sessiontype not in ['challenge','cycletarget']:
|
if (not all(d == dates[0] for d in dates)) and race.sessiontype not in ['challenge','cycletarget']: # pragma: no cover
|
||||||
errors.append('For tests and training sessions, selected workouts must all be done on the same date')
|
errors.append('For tests and training sessions, selected workouts must all be done on the same date')
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
if len(ws)>1 and race.sessiontype == 'test':
|
if len(ws)>1 and race.sessiontype == 'test': # pragma: no cover
|
||||||
errors.append('For tests, you can only attach one workout')
|
errors.append('For tests, you can only attach one workout')
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
@@ -1953,7 +1953,7 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
ids = [w.id for w in ws]
|
ids = [w.id for w in ws]
|
||||||
ids = list(set(ids))
|
ids = list(set(ids))
|
||||||
|
|
||||||
if len(ids)>1 and race.sessiontype in ['test','coursetest','race','fastest_time','fastest_distance']:
|
if len(ids)>1 and race.sessiontype in ['test','coursetest','race','fastest_time','fastest_distance']: # pragma: no cover
|
||||||
errors.append('For tests, you can only attach one workout')
|
errors.append('For tests, you can only attach one workout')
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
@@ -1962,7 +1962,7 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
username = r.user.first_name+' '+r.user.last_name
|
username = r.user.first_name+' '+r.user.last_name
|
||||||
if r.birthdate:
|
if r.birthdate:
|
||||||
age = calculate_age(r.birthdate)
|
age = calculate_age(r.birthdate)
|
||||||
else:
|
else: # pragma: no cover
|
||||||
age = None
|
age = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -1971,7 +1971,7 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
race=race,
|
race=race,
|
||||||
id=recordid
|
id=recordid
|
||||||
)
|
)
|
||||||
except VirtualRaceResult.DoesNotExist:
|
except VirtualRaceResult.DoesNotExist: # pragma: no cover
|
||||||
if doregister:
|
if doregister:
|
||||||
hasinitial,boattype,boatclass,adaptiveclass,weightclass,sex,referencespeed,initialcategory = default_class(r,ws[0],race)
|
hasinitial,boattype,boatclass,adaptiveclass,weightclass,sex,referencespeed,initialcategory = default_class(r,ws[0],race)
|
||||||
if hasinitial:
|
if hasinitial:
|
||||||
@@ -1993,7 +1993,7 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
else:
|
else:
|
||||||
errors.append("Unable to find a suitable start category")
|
errors.append("Unable to find a suitable start category")
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
else:
|
else: # pragma: no cover
|
||||||
errors.append("Couldn't find this entry")
|
errors.append("Couldn't find this entry")
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
@@ -2003,7 +2003,7 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
workoutid = ws[0].id
|
workoutid = ws[0].id
|
||||||
)
|
)
|
||||||
|
|
||||||
if not record and not doregister:
|
if not record and not doregister: # pragma: no cover
|
||||||
errors.append("Couldn't find this entry")
|
errors.append("Couldn't find this entry")
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
@@ -2011,21 +2011,21 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
# errors.append('You have to submit a rowing on water workout')
|
# errors.append('You have to submit a rowing on water workout')
|
||||||
# return 0,comments,errors,0
|
# return 0,comments,errors,0
|
||||||
|
|
||||||
if ws[0].workouttype != record.boatclass:
|
if ws[0].workouttype != record.boatclass: # pragma: no cover
|
||||||
ws[0].workouttype = record.boatclass
|
ws[0].workouttype = record.boatclass
|
||||||
ws[0].save()
|
ws[0].save()
|
||||||
#errors.append('Your workout boat class is different than on your race registration')
|
#errors.append('Your workout boat class is different than on your race registration')
|
||||||
#return 0,comments,errors,0
|
#return 0,comments,errors,0
|
||||||
|
|
||||||
if ws[0].boattype != record.boattype:
|
if ws[0].boattype != record.boattype: # pragma: no cover
|
||||||
errors.append('Your workout boat type did not match the boat type you registered')
|
errors.append('Your workout boat type did not match the boat type you registered')
|
||||||
return 0,comments,errors,0
|
return 0,comments,errors,0
|
||||||
|
|
||||||
if record.weightcategory == 'lwt' and ws[0].weightcategory != record.weightcategory:
|
if record.weightcategory == 'lwt' and ws[0].weightcategory != record.weightcategory: # pragma: no cover
|
||||||
errors.append('Your workout weight category did not match the weight category you registered')
|
errors.append('Your workout weight category did not match the weight category you registered')
|
||||||
return 0,comments, errors,0
|
return 0,comments, errors,0
|
||||||
|
|
||||||
if ws[0].adaptiveclass != record.adaptiveclass:
|
if ws[0].adaptiveclass != record.adaptiveclass: # pragma: no cover
|
||||||
errors.append('Your workout adaptive classification did not match the registration')
|
errors.append('Your workout adaptive classification did not match the registration')
|
||||||
return 0,comments, errors,0
|
return 0,comments, errors,0
|
||||||
|
|
||||||
@@ -2043,17 +2043,17 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
ws[0].save()
|
ws[0].save()
|
||||||
result += 1
|
result += 1
|
||||||
|
|
||||||
else:
|
else: # pragma: no cover
|
||||||
errors.append('Workout %i did not match the race window' % ws[0].id)
|
errors.append('Workout %i did not match the race window' % ws[0].id)
|
||||||
return result,comments,errors,0
|
return result,comments,errors,0
|
||||||
|
|
||||||
if result>0:
|
if result>0:
|
||||||
for otherrecord in records:
|
for otherrecord in records: # pragma: no cover
|
||||||
otherrecord.workoutid = None
|
otherrecord.workoutid = None
|
||||||
otherrecord.coursecompleted = False
|
otherrecord.coursecompleted = False
|
||||||
otherrecord.save()
|
otherrecord.save()
|
||||||
|
|
||||||
if ws[0].privacy == 'private':
|
if ws[0].privacy == 'private': # pragma: no cover
|
||||||
ws[0].privacy = 'visible'
|
ws[0].privacy = 'visible'
|
||||||
ws[0].save()
|
ws[0].save()
|
||||||
comments.append('Workouts submitted to virtual events have to be public. We have changed the workout to a public workout.')
|
comments.append('Workouts submitted to virtual events have to be public. We have changed the workout to a public workout.')
|
||||||
@@ -2074,7 +2074,7 @@ def add_workout_race(ws,race,r,splitsecond=0,recordid=0,doregister=False):
|
|||||||
|
|
||||||
return result,comments,errors,job.id
|
return result,comments,errors,job.id
|
||||||
|
|
||||||
def delete_race_result(workout,race):
|
def delete_race_result(workout,race): # pragma: no cover
|
||||||
results = VirtualRaceResult.objects.filter(workoutid=workout.id,race=race)
|
results = VirtualRaceResult.objects.filter(workoutid=workout.id,race=race)
|
||||||
for r in results:
|
for r in results:
|
||||||
r.workoutid = None
|
r.workoutid = None
|
||||||
|
|||||||
@@ -158,7 +158,7 @@
|
|||||||
<li id="export-nk">
|
<li id="export-nk">
|
||||||
{% if workout.uploadedtonk %}
|
{% if workout.uploadedtonk %}
|
||||||
<a href="{{ workout|nkviewerlink }}">
|
<a href="{{ workout|nkviewerlink }}">
|
||||||
NK LiNK <i class="fas fa-check"></i>
|
NK Logbook <i class="fas fa-check"></i>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li id="concept2"><a href="/rowers/workout/c2list/">Concept2</a></li>
|
<li id="concept2"><a href="/rowers/workout/c2list/">Concept2</a></li>
|
||||||
<li id="nklink"><a href="/rowers/workout/nkimport/">NK LiNK</a></li>
|
<li id="nklink"><a href="/rowers/workout/nkimport/">NK Logbook</a></li>
|
||||||
<li id="strava"><a href="/rowers/workout/stravaimport/">Strava</a></li>
|
<li id="strava"><a href="/rowers/workout/stravaimport/">Strava</a></li>
|
||||||
<li id="runkeeper"><a href="/rowers/workout/runkeeperimport/">RunKeeper</a></li>
|
<li id="runkeeper"><a href="/rowers/workout/runkeeperimport/">RunKeeper</a></li>
|
||||||
<li id="sporttracks"><a href="/rowers/workout/sporttracksimport/">SportTracks</a></li>
|
<li id="sporttracks"><a href="/rowers/workout/sporttracksimport/">SportTracks</a></li>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{% block title %}Workouts{% endblock %}
|
{% block title %}Workouts{% endblock %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<h1>Available on NK LiNK Logbook</h1>
|
<h1>Available on NK Logbook</h1>
|
||||||
{% if workouts %}
|
{% if workouts %}
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
Concept2 Logbook,
|
Concept2 Logbook,
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if rower.nktoken is not None and rower.nktoken != '' %}
|
{% if rower.nktoken is not None and rower.nktoken != '' %}
|
||||||
NK LiNK,
|
NK Logbook,
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if rower.sporttrackstoken is not None and rower.sporttrackstoken != '' %}
|
{% if rower.sporttrackstoken is not None and rower.sporttrackstoken != '' %}
|
||||||
SportTracks,
|
SportTracks,
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
choice or to renew the authorization.</p>
|
choice or to renew the authorization.</p>
|
||||||
<p><a href="/rowers/me/stravaauthorize/"><img src="/static/img/ConnectWithStrava.png" alt="connect with strava" width="120"></a></p>
|
<p><a href="/rowers/me/stravaauthorize/"><img src="/static/img/ConnectWithStrava.png" alt="connect with strava" width="120"></a></p>
|
||||||
<p><a href="/rowers/me/c2authorize/"><img src="/static/img/blueC2logo.png" alt="connect with Concept2" width="120"></a></p>
|
<p><a href="/rowers/me/c2authorize/"><img src="/static/img/blueC2logo.png" alt="connect with Concept2" width="120"></a></p>
|
||||||
<p><a href="/rowers/me/nkauthorize/"><img src="/static/img/NKLiNK.jpg" alt="connect with NK LiNK" width="120"></a></p>
|
<p><a href="/rowers/me/nkauthorize/"><img src="/static/img/NKLiNK.jpg" alt="connect with NK Logbook" width="120"></a></p>
|
||||||
<p><a href="/rowers/me/sporttracksauthorize/"><img src="/static/img/sporttracks-button.png" alt="connect with SportTracks" width="120"></a></p>
|
<p><a href="/rowers/me/sporttracksauthorize/"><img src="/static/img/sporttracks-button.png" alt="connect with SportTracks" width="120"></a></p>
|
||||||
<p><a href="/rowers/me/runkeeperauthorize/"><img src="/static/img/rk-logo.png" alt="connect with RunKeeper" width="120"></a></p>
|
<p><a href="/rowers/me/runkeeperauthorize/"><img src="/static/img/rk-logo.png" alt="connect with RunKeeper" width="120"></a></p>
|
||||||
<p><a href="/rowers/me/underarmourauthorize/"><img src="/static/img/UAbtn.png" alt="connect with Under Armour" width="120"></a></p>
|
<p><a href="/rowers/me/underarmourauthorize/"><img src="/static/img/UAbtn.png" alt="connect with Under Armour" width="120"></a></p>
|
||||||
|
|||||||
@@ -111,6 +111,17 @@ class ChallengesTest(TestCase):
|
|||||||
workouttype = 'water',
|
workouttype = 'water',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
result = get_random_file(filename='rowers/tests/testdata/thyro.csv')
|
||||||
|
self.wthyro3 = WorkoutFactory(user=self.r2,
|
||||||
|
csvfilename=result['filename'],
|
||||||
|
starttime=result['starttime'],
|
||||||
|
startdatetime=result['startdatetime'],
|
||||||
|
duration=result['duration'],
|
||||||
|
distance=result['totaldist'],
|
||||||
|
workouttype = 'water',
|
||||||
|
)
|
||||||
|
|
||||||
self.wthyro2.startdatetime = arrow.get(nu).datetime
|
self.wthyro2.startdatetime = arrow.get(nu).datetime
|
||||||
self.wthyro2.date = nu.date()
|
self.wthyro2.date = nu.date()
|
||||||
self.wthyro2.save()
|
self.wthyro2.save()
|
||||||
@@ -164,6 +175,40 @@ class ChallengesTest(TestCase):
|
|||||||
)
|
)
|
||||||
self.result.save()
|
self.result.save()
|
||||||
|
|
||||||
|
self.FastestRace = VirtualRace(
|
||||||
|
name='Thyro 5K',
|
||||||
|
startdate=startdate,
|
||||||
|
preferreddate = startdate,
|
||||||
|
start_time = start_time,
|
||||||
|
enddate=enddate,
|
||||||
|
end_time=end_time,
|
||||||
|
sessionvalue=200,
|
||||||
|
comment='',
|
||||||
|
sessiontype = 'fastest_distance',
|
||||||
|
timezone=timezone_str,
|
||||||
|
evaluation_closure=evaluation_closure,
|
||||||
|
registration_closure=registration_closure,
|
||||||
|
contact_phone=contact_phone,
|
||||||
|
contact_email=contact_email,
|
||||||
|
manager=self.u,
|
||||||
|
)
|
||||||
|
self.FastestRace.save()
|
||||||
|
|
||||||
|
self.result = VirtualRaceResult(
|
||||||
|
userid = self.u2.id,
|
||||||
|
username = self.u2.username,
|
||||||
|
race = self.FastestRace,
|
||||||
|
distance = 300,
|
||||||
|
duration = datetime.time(0,1,20),
|
||||||
|
points = 75,
|
||||||
|
coursecompleted = True,
|
||||||
|
age = 28,
|
||||||
|
startsecond = 0,
|
||||||
|
endsecond = 120,
|
||||||
|
workoutid = self.wthyro3.id
|
||||||
|
)
|
||||||
|
self.result.save()
|
||||||
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
@@ -182,12 +227,12 @@ class ChallengesTest(TestCase):
|
|||||||
lat_lon = (52.214229145558484, 6.890036546847821)
|
lat_lon = (52.214229145558484, 6.890036546847821)
|
||||||
races = VirtualRace.objects.all()
|
races = VirtualRace.objects.all()
|
||||||
traces = getnearestraces(lat_lon,races)
|
traces = getnearestraces(lat_lon,races)
|
||||||
self.assertEqual(len(traces),1)
|
self.assertEqual(len(traces),2)
|
||||||
|
|
||||||
lat_lon = (0, 0)
|
lat_lon = (0, 0)
|
||||||
races = VirtualRace.objects.all()
|
races = VirtualRace.objects.all()
|
||||||
traces = getnearestraces(lat_lon,races)
|
traces = getnearestraces(lat_lon,races)
|
||||||
self.assertEqual(len(traces),1)
|
self.assertEqual(len(traces),2)
|
||||||
|
|
||||||
def test_getnearestcourses(self):
|
def test_getnearestcourses(self):
|
||||||
lat_lon = (52.214229145558484, 6.890036546847821)
|
lat_lon = (52.214229145558484, 6.890036546847821)
|
||||||
@@ -388,6 +433,72 @@ class ChallengesTest(TestCase):
|
|||||||
|
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
def test_fastestrace_view(self):
|
||||||
|
login = self.c.login(username=self.u.username, password=self.password)
|
||||||
|
self.assertTrue(login)
|
||||||
|
|
||||||
|
race = self.FastestRace
|
||||||
|
|
||||||
|
if self.r.birthdate:
|
||||||
|
age = calculate_age(self.r.birthdate)
|
||||||
|
else:
|
||||||
|
age = 25
|
||||||
|
|
||||||
|
# look at event
|
||||||
|
url = reverse('virtualevent_view',kwargs={'id':race.id})
|
||||||
|
response = self.c.get(url)
|
||||||
|
self.assertEqual(response.status_code,200)
|
||||||
|
|
||||||
|
# register
|
||||||
|
url = reverse('virtualevent_register_view',kwargs={'id':race.id})
|
||||||
|
response = self.c.get(url)
|
||||||
|
self.assertEqual(response.status_code,200)
|
||||||
|
|
||||||
|
|
||||||
|
form_data = {
|
||||||
|
'teamname': 'ApeTeam',
|
||||||
|
'boatclass': 'water',
|
||||||
|
'boattype': '1x',
|
||||||
|
'weightcategory': 'hwt',
|
||||||
|
'adaptiveclass': 'None',
|
||||||
|
'age': age,
|
||||||
|
'mix': False,
|
||||||
|
'acceptsocialmedia': True,
|
||||||
|
}
|
||||||
|
form = VirtualRaceResultForm(form_data)
|
||||||
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
|
|
||||||
|
response = self.c.post(url,form_data,follow=True)
|
||||||
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
||||||
|
self.assertRedirects(response, expected_url=expected_url,
|
||||||
|
status_code=302,target_status_code=200)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
# submit workout
|
||||||
|
url = reverse('virtualevent_submit_result_view',kwargs={'id':race.id,'workoutid':self.wthyro.id})
|
||||||
|
response = self.c.get(url)
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
records = IndoorVirtualRaceResult.objects.filter(userid=self.u.id)
|
||||||
|
self.assertEqual(len(records),1)
|
||||||
|
|
||||||
|
record = records[0]
|
||||||
|
|
||||||
|
|
||||||
|
form_data = {
|
||||||
|
'workouts':[self.wthyro.id],
|
||||||
|
'record':record.id,
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.c.post(url,form_data,follow=True)
|
||||||
|
self.assertRedirects(response, expected_url=expected_url,
|
||||||
|
status_code=302,target_status_code=200)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
|
||||||
def test_virtualevents_view(self):
|
def test_virtualevents_view(self):
|
||||||
login = self.c.login(username=self.u.username, password=self.password)
|
login = self.c.login(username=self.u.username, password=self.password)
|
||||||
self.assertTrue(login)
|
self.assertTrue(login)
|
||||||
@@ -995,6 +1106,8 @@ class IndoorChallengesTest(TestCase):
|
|||||||
self.assertEqual(response.url,expected)
|
self.assertEqual(response.url,expected)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@patch('rowers.views.racesviews.myqueue')
|
@patch('rowers.views.racesviews.myqueue')
|
||||||
def test_virtualevent_view(self,mocked_myqueue):
|
def test_virtualevent_view(self,mocked_myqueue):
|
||||||
login = self.c.login(username=self.u.username, password=self.password)
|
login = self.c.login(username=self.u.username, password=self.password)
|
||||||
|
|||||||
@@ -296,6 +296,11 @@ class PlannedSessionTests(TestCase):
|
|||||||
micro2 = plannedsessions.get_todays_micro(self.plan,thedate=datetime.date.today())
|
micro2 = plannedsessions.get_todays_micro(self.plan,thedate=datetime.date.today())
|
||||||
self.assertEqual(micro1.id,micro2.id)
|
self.assertEqual(micro1.id,micro2.id)
|
||||||
|
|
||||||
|
def test_get_session_ids(self):
|
||||||
|
ids = plannedsessions.get_my_session_ids(self.r)
|
||||||
|
pss = PlannedSession.objects.filter(rower__in=[self.r])
|
||||||
|
self.assertEqual(len(ids),len(pss))
|
||||||
|
|
||||||
class DataPrepTests(TestCase):
|
class DataPrepTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.u = UserFactory()
|
self.u = UserFactory()
|
||||||
|
|||||||
@@ -393,7 +393,7 @@ def workout_sporttracks_upload_view(request,id=0):
|
|||||||
return HttpResponseRedirect(url) # pragma: no cover
|
return HttpResponseRedirect(url) # pragma: no cover
|
||||||
|
|
||||||
|
|
||||||
# NK LiNK authorization
|
# NK Logbook authorization
|
||||||
@login_required()
|
@login_required()
|
||||||
def rower_nk_authorize(request): # pragma: no cover
|
def rower_nk_authorize(request): # pragma: no cover
|
||||||
state = str(uuid4())
|
state = str(uuid4())
|
||||||
|
|||||||
@@ -3281,7 +3281,6 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
|||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
w_form = WorkoutRaceSelectForm(workoutdata,entries,request.POST)
|
w_form = WorkoutRaceSelectForm(workoutdata,entries,request.POST)
|
||||||
|
|
||||||
if w_form.is_valid():
|
if w_form.is_valid():
|
||||||
selectedworkout = w_form.cleaned_data['workouts']
|
selectedworkout = w_form.cleaned_data['workouts']
|
||||||
splitsecond = 0
|
splitsecond = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user