Private
Public Access
1
0

passing tests, removing some obsolete views

This commit is contained in:
Sander Roosendaal
2019-01-16 13:37:36 +01:00
parent 195d623cfc
commit ba4d4ced8d
12 changed files with 74 additions and 256 deletions

View File

@@ -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>

View File

@@ -0,0 +1 @@
E408191@CZ27LT9RCGN72.11684:1547623002

View File

@@ -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):

View 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)

View File

@@ -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)

View File

@@ -0,0 +1,3 @@
#from __future__ import print_function
from statements import *
nu = datetime.datetime.now()

View File

@@ -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)

View File

@@ -0,0 +1,3 @@
#from __future__ import print_function
from statements import *
nu = datetime.datetime.now()

Binary file not shown.

View File

@@ -2502,7 +2502,7 @@
</Trackpoint>
</Track>
</Lap>
<Notes>&lt;Element 'Notes' at 0x13397b70&gt;</Notes>
<Notes>&lt;Element 'Notes' at 0x146d99e8&gt;</Notes>
</Activity>
</Activities>
<Creator>

View File

@@ -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),
]

View File

@@ -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()