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