passing tests, removing some obsolete views
This commit is contained in:
@@ -147,7 +147,7 @@
|
||||
separately.</p>
|
||||
|
||||
<ul class="contentli">
|
||||
<li><a href="/rowers/api-docs">API documentation</a>
|
||||
<li><a href="/rowers/api-docs/">API documentation</a>
|
||||
(But refer to the below for stroke data.)</li>
|
||||
<li><a href="/rowers/api-docs#/workouts">Try out the workout summary API</a></li>
|
||||
<li><a href="/rowers/api-docs#!/workouts/strokedata_list">GET stroke data</a></li>
|
||||
|
||||
1
rowers/tests/.#test_simplefunctions.py
Normal file
1
rowers/tests/.#test_simplefunctions.py
Normal file
@@ -0,0 +1 @@
|
||||
E408191@CZ27LT9RCGN72.11684:1547623002
|
||||
@@ -134,18 +134,13 @@ class WorkoutFactory(factory.DjangoModelFactory):
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
notes = faker.text()
|
||||
startdatetime = factory.LazyAttribute(
|
||||
lambda _:get_random_file(name=faker.word())['startdatetime'])
|
||||
starttime = factory.LazyAttribute(
|
||||
lambda _:get_random_file(name=faker.word())['starttime'])
|
||||
startdatetime = get_random_file(name=faker.word())['startdatetime']
|
||||
starttime = get_random_file(name=faker.word())['starttime']
|
||||
workouttype='water'
|
||||
date=timezone.now().date()
|
||||
duration=factory.LazyAttribute(
|
||||
lambda _:get_random_file(name=faker.word())['duration'])
|
||||
distance=factory.LazyAttribute(
|
||||
lambda _:get_random_file(name=faker.word())['totaldist'])
|
||||
csvfilename=factory.LazyAttribute(
|
||||
lambda _:get_random_file(name=faker.word())['filename'])
|
||||
duration=get_random_file(name=faker.word())['duration']
|
||||
distance=get_random_file(name=faker.word())['totaldist']
|
||||
csvfilename=get_random_file(name=faker.word())['filename']
|
||||
|
||||
|
||||
class SessionFactory(factory.DjangoModelFactory):
|
||||
|
||||
57
rowers/tests/test_basicrower.py
Normal file
57
rowers/tests/test_basicrower.py
Normal file
@@ -0,0 +1,57 @@
|
||||
from statements import *
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
from django.http import Http404
|
||||
|
||||
from rowers.views import get_workout
|
||||
|
||||
# tests simple functions from views.py
|
||||
class SimpleViewTest(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='basic')
|
||||
|
||||
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()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
def start_protrial(self):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/starttrial/'
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
def start_plantrial(self):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/startplantrial/'
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
@@ -306,7 +306,7 @@ class StravaObjects(DjangoTestCase):
|
||||
|
||||
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
def test_strava_callback(self, mock_post):
|
||||
response = self.c.get('/stravacall_back?code=absdef23',follow=True)
|
||||
response = self.c.get('/stravacall_back?code=absdef23&scope=read',follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
|
||||
3
rowers/tests/test_plans.py
Normal file
3
rowers/tests/test_plans.py
Normal file
@@ -0,0 +1,3 @@
|
||||
#from __future__ import print_function
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
@@ -67,7 +67,7 @@ class SimpleViewTest(TestCase):
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowerss/email/',
|
||||
expected_url='/rowers/email/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
|
||||
|
||||
3
rowers/tests/test_virtualevents.py
Normal file
3
rowers/tests/test_virtualevents.py
Normal file
@@ -0,0 +1,3 @@
|
||||
#from __future__ import print_function
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
2
rowers/tests/testdata/testdata.tcx
vendored
2
rowers/tests/testdata/testdata.tcx
vendored
@@ -2502,7 +2502,7 @@
|
||||
</Trackpoint>
|
||||
</Track>
|
||||
</Lap>
|
||||
<Notes><Element 'Notes' at 0x13397b70></Notes>
|
||||
<Notes><Element 'Notes' at 0x146d99e8></Notes>
|
||||
</Activity>
|
||||
</Activities>
|
||||
<Creator>
|
||||
|
||||
@@ -260,7 +260,7 @@ urlpatterns = [
|
||||
url(r'^otwcpdatatoadmin/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.otwcp_toadmin_view),
|
||||
# url(r'^workout/compare/(?P<id>\d+)/$',views.workout_comparison_list),
|
||||
# url(r'^workout/compare2/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/$',views.workout_comparison_view),
|
||||
url(r'^workout/compare/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workout_comparison_list),
|
||||
# url(r'^workout/compare/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workout_comparison_list),
|
||||
url(r'^workout/(?P<id>\d+)/edit/$',views.workout_edit_view,
|
||||
name='workout_edit_view'),
|
||||
url(r'^workout/(?P<id>\d+)/map/$',views.workout_map_view),
|
||||
@@ -585,7 +585,6 @@ urlpatterns = [
|
||||
|
||||
if settings.DEBUG:
|
||||
urlpatterns += [
|
||||
url(r'^testreverse/$',views.test_reverse_view),
|
||||
url(r'^c2listug/(?P<page>\d+)/$',views.c2listdebug_view),
|
||||
url(r'^c2listug/$',views.c2listdebug_view),
|
||||
]
|
||||
|
||||
240
rowers/views.py
240
rowers/views.py
@@ -2840,42 +2840,6 @@ def rower_process_callback(request):
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
# The imports page
|
||||
@login_required()
|
||||
def imports_view(request):
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = RowerImportExportForm(request.POST)
|
||||
if form.is_valid():
|
||||
cd = form.cleaned_data
|
||||
|
||||
for attr, value in cd.items():
|
||||
setattr(r,attr,value)
|
||||
|
||||
r.save()
|
||||
messages.info(request,'Settings Saved')
|
||||
|
||||
else:
|
||||
form = RowerImportExportForm(instance=r)
|
||||
|
||||
|
||||
return render(request,"imports.html",
|
||||
{
|
||||
'teams':get_my_teams(request.user),
|
||||
'form':form,
|
||||
})
|
||||
|
||||
# Just for testing purposes
|
||||
@login_required()
|
||||
def test_reverse_view(request):
|
||||
successmessage = "Tokens stored. Good to go"
|
||||
messages.info(request,successmessage)
|
||||
|
||||
url = reverse(workouts_view)
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# dummy
|
||||
@login_required()
|
||||
@@ -5613,65 +5577,6 @@ def workout_recalcsummary_view(request,id=0):
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@login_required()
|
||||
def workout_makepublic_view(request,id,
|
||||
message='',
|
||||
successmessage=''):
|
||||
|
||||
row = get_workout(id)
|
||||
|
||||
if (checkworkoutuser(request.user,row)==False):
|
||||
message = "You are not allowed to edit this workout"
|
||||
messages.error(request,message)
|
||||
url = reverse(workouts_view)
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
row.privacy = 'visible'
|
||||
row.save()
|
||||
rr = getrower(request.user)
|
||||
|
||||
teams = rr.team.all()
|
||||
for team in teams:
|
||||
row.team.add(team)
|
||||
|
||||
|
||||
message = "Workout set to public. Your followers and team members will see it"
|
||||
messages.info(request,message)
|
||||
|
||||
url = reverse(workout_edit_view,
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@login_required()
|
||||
def workout_setprivate_view(request,id,
|
||||
message='',
|
||||
successmessage=''):
|
||||
row = get_workout(id)
|
||||
|
||||
if (checkworkoutuser(request.user,row)==False):
|
||||
message = "You are not allowed to edit this workout"
|
||||
messages.error(request,message)
|
||||
url = reverse(workouts_view)
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
row.privacy = 'private'
|
||||
row.save()
|
||||
|
||||
for team in row.team.all():
|
||||
row.team.remove(team)
|
||||
|
||||
message = "Workout set to private. Only you will see it"
|
||||
messages.info(request,message)
|
||||
|
||||
url = reverse(workout_edit_view,
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Joining workout
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
@@ -7735,90 +7640,6 @@ def workouts_view(request,message='',successmessage='',
|
||||
})
|
||||
|
||||
|
||||
# List of workouts to compare a selected workout to
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_comparison_list(request,id=0,message='',successmessage='',
|
||||
startdatestring="",enddatestring="",
|
||||
startdate=timezone.now()-datetime.timedelta(days=365),
|
||||
enddate=timezone.now()):
|
||||
|
||||
try:
|
||||
r = getrower(request.user)
|
||||
except Rower.DoesNotExist:
|
||||
raise Http404("User has no rower instance")
|
||||
u = User.objects.get(id=r.user.id)
|
||||
|
||||
if request.method == 'POST':
|
||||
dateform = DateRangeForm(request.POST)
|
||||
if dateform.is_valid():
|
||||
startdate = dateform.cleaned_data['startdate']
|
||||
enddate = dateform.cleaned_data['enddate']
|
||||
else:
|
||||
dateform = DateRangeForm(initial={
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
})
|
||||
|
||||
if startdatestring:
|
||||
startdate = iso8601.parse_date(startdatestring)
|
||||
if enddatestring:
|
||||
enddate = iso8601.parse_date(enddatestring)
|
||||
|
||||
startdate = datetime.datetime.combine(startdate,datetime.time())
|
||||
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
|
||||
#enddate = enddate+datetime.timedelta(days=1)
|
||||
|
||||
if enddate < startdate:
|
||||
s = enddate
|
||||
enddate = startdate
|
||||
startdate = s
|
||||
|
||||
workouts = Workout.objects.filter(user=r,
|
||||
startdatetime__gte=startdate,
|
||||
startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=id)
|
||||
|
||||
query = request.GET.get('q')
|
||||
if query:
|
||||
query_list = query.split()
|
||||
workouts = workouts.filter(
|
||||
reduce(operator.and_,
|
||||
(Q(name__icontains=q) for q in query_list)) |
|
||||
reduce(operator.and_,
|
||||
(Q(notes__icontains=q) for q in query_list))
|
||||
)
|
||||
searchform = SearchForm(initial={'q':query})
|
||||
else:
|
||||
searchform = SearchForm()
|
||||
|
||||
paginator = Paginator(workouts,15) # show 25 workouts per page
|
||||
page = request.GET.get('page')
|
||||
|
||||
try:
|
||||
workouts = paginator.page(page)
|
||||
except PageNotAnInteger:
|
||||
workouts = paginator.page(1)
|
||||
except EmptyPage:
|
||||
workouts = paginator.page(paginator.num_pages)
|
||||
|
||||
row = get_workout(id)
|
||||
|
||||
messages.error(request,message)
|
||||
messages.info(request,successmessage)
|
||||
|
||||
return render(request, 'comparison_list.html',
|
||||
{'id':int(id),
|
||||
'workout':row,
|
||||
'workouts': workouts,
|
||||
'last_name':u.last_name,
|
||||
'first_name':u.first_name,
|
||||
'searchform':searchform,
|
||||
'dateform':dateform,
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
|
||||
# List of workouts to compare a selected workout to
|
||||
@@ -8740,67 +8561,6 @@ def instroke_view(request,id=0):
|
||||
'instrokemetrics':instrokemetrics,
|
||||
})
|
||||
|
||||
# A special Edit page with all the Geeky functionality for the workout
|
||||
@login_required()
|
||||
def workout_geeky_view(request,id=0,message="",successmessage=""):
|
||||
row = get_workout(id)
|
||||
|
||||
# form = WorkoutForm(instance=row)
|
||||
g = GraphImage.objects.filter(workout=row).order_by("-creationdatetime")
|
||||
rowdata = rrdata(csvfile=row.csvfilename)
|
||||
instrokemetrics = rowdata.get_instroke_columns()
|
||||
|
||||
|
||||
for i in g:
|
||||
try:
|
||||
width,height = Image.open(i.filename).size
|
||||
i.width = width
|
||||
i.height = height
|
||||
i.save()
|
||||
except:
|
||||
pass
|
||||
|
||||
# check if user is owner of this workout
|
||||
|
||||
if (checkworkoutuser(request.user,row)==False):
|
||||
message = "You are not allowed to edit this workout"
|
||||
messages.error(request,message)
|
||||
url = reverse(workouts_view)
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
# create interactive plot
|
||||
f1 = row.csvfilename
|
||||
u = row.user.user
|
||||
r = getrower(u)
|
||||
|
||||
# create interactive plot
|
||||
try:
|
||||
res = interactive_chart(id,promember=1)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
messages.error(request,message)
|
||||
messages.info(request,successmessage)
|
||||
|
||||
if row.workouttype in mytypes.otwtypes:
|
||||
return render(request,
|
||||
'otwgeeky.html',
|
||||
{'workout':row,
|
||||
'teams':get_my_teams(request.user),
|
||||
'interactiveplot':script,
|
||||
'instrokemetrics':instrokemetrics,
|
||||
'the_div':div})
|
||||
else:
|
||||
return render(request,
|
||||
'advancededit.html',
|
||||
{'workout':row,
|
||||
'teams':get_my_teams(request.user),
|
||||
'interactiveplot':script,
|
||||
'the_div':div})
|
||||
|
||||
# generate instroke chart
|
||||
@login_required()
|
||||
|
||||
Reference in New Issue
Block a user