From 76d2325797ad3a179ec3d727b4fc823047b71dd2 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 2 Jan 2019 21:54:25 +0100 Subject: [PATCH] adding tests to increase coverage --- .gitignore | 1 + rowers/celery.py | 6 +- rowers/plots.py | 8 +- rowers/tests/test_admin.py | 47 + rowers/tests/test_admin.py,cover | 47 + rowers/tests/test_models.py | 14 + rowers/tests/test_user.py | 89 + rowers/tests/test_user.py,cover | 94 + rowers/tests/tests.py | 103 +- rowers/tests/tests.py,cover | 2831 ++++++++++++++++++++++++++++++ 10 files changed, 3224 insertions(+), 16 deletions(-) create mode 100644 rowers/tests/test_admin.py create mode 100644 rowers/tests/test_admin.py,cover create mode 100644 rowers/tests/test_models.py create mode 100644 rowers/tests/test_user.py create mode 100644 rowers/tests/test_user.py,cover create mode 100644 rowers/tests/tests.py,cover diff --git a/.gitignore b/.gitignore index 6e393dc4..665c5589 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ # pytest stuff /.pytest_cache/ pytest.ini +conftest.py # CSV files /media/ diff --git a/rowers/celery.py b/rowers/celery.py index 8ecc91a9..77d84ba3 100644 --- a/rowers/celery.py +++ b/rowers/celery.py @@ -30,7 +30,7 @@ app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) database_url = 'sqlite:///db.sqlite3' -@app.task(bind=True) -def debug_task(self): - print('Request: {0!r}'.format(self.request)) +#@app.task(bind=True) +#def debug_task(self): +# print('Request: {0!r}'.format(self.request)) diff --git a/rowers/plots.py b/rowers/plots.py index b57d263e..948ddd94 100644 --- a/rowers/plots.py +++ b/rowers/plots.py @@ -6,10 +6,10 @@ from rows import format_pace_tick, format_pace, format_time, format_time_tick # Formatting the distance tick marks -def format_dist_tick(x,pos=None): - km = x/1000. - template='%6.3f' - return template % (km) +#def format_dist_tick(x,pos=None): +# km = x/1000. +# template='%6.3f' +# return template % (km) # Utility to select reasonable y axis range diff --git a/rowers/tests/test_admin.py b/rowers/tests/test_admin.py new file mode 100644 index 00000000..230c6221 --- /dev/null +++ b/rowers/tests/test_admin.py @@ -0,0 +1,47 @@ +#from __future__ import print_function +import pytest + +pytestmark = pytest.mark.django_db + +from bs4 import BeautifulSoup +import re +from nose_parameterized import parameterized +from django.test import TestCase, Client,override_settings +from django.core.management import call_command +from django.utils.six import StringIO +from django.test.client import RequestFactory +import datetime + +import json +import numpy as np + + +from redis import StrictRedis +redis_connection = StrictRedis() + +from rowers.models import User,Rower + +@pytest.mark.django_db +class AdminTests(TestCase): + def setUp(self): + u = User.objects.create_user('john', + 'sander@ds.ds', + 'koeinsloot') + r = Rower.objects.create(user=u) + my_admin = User.objects.create_superuser('myuser', + 'myemail@test.com', + 'apensstaart') + + self.c = Client() + self.c.login(username='myuser',password='apensstaart') + + def test_admin(self): + response = self.c.get('/admin',follow=True) + self.assertEqual(response.status_code,200) + + + response = self.c.get('/admin/auth/user/',follow=True) + self.assertEqual(response.status_code,200) + + response = self.c.get('/admin/auth/user/77/change/',follow=True) + self.assertEqual(response.status_code,200) diff --git a/rowers/tests/test_admin.py,cover b/rowers/tests/test_admin.py,cover new file mode 100644 index 00000000..083f75f0 --- /dev/null +++ b/rowers/tests/test_admin.py,cover @@ -0,0 +1,47 @@ + #from __future__ import print_function +> import pytest + +> pytestmark = pytest.mark.django_db + +> from bs4 import BeautifulSoup +> import re +> from nose_parameterized import parameterized +> from django.test import TestCase, Client,override_settings +> from django.core.management import call_command +> from django.utils.six import StringIO +> from django.test.client import RequestFactory +> import datetime + +> import json +> import numpy as np + + +> from redis import StrictRedis +> redis_connection = StrictRedis() + +> from rowers.models import User,Rower + +> @pytest.mark.django_db +> class AdminTests(TestCase): +> def setUp(self): +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +> r = Rower.objects.create(user=u) +> my_admin = User.objects.create_superuser('myuser', +> 'myemail@test.com', +> 'apensstaart') + +> self.c = Client() +> self.c.login(username='myuser',password='apensstaart') + +> def test_admin(self): +> response = self.c.get('/admin',follow=True) +> self.assertEqual(response.status_code,200) + + +> response = self.c.get('/admin/auth/user/',follow=True) +> self.assertEqual(response.status_code,200) + +> response = self.c.get('/admin/auth/user/77/change/',follow=True) +> self.assertEqual(response.status_code,200) diff --git a/rowers/tests/test_models.py b/rowers/tests/test_models.py new file mode 100644 index 00000000..42f9bf71 --- /dev/null +++ b/rowers/tests/test_models.py @@ -0,0 +1,14 @@ +from django.test import TestCase +from rowers.models import * + +class FormTests(TestCase): + def SetUp(self): + self.u = User.objects.create_user('john', + 'sander@ds.ds', + 'koeinsloot') + + r = Rower.objects.create(user=u) + + + def test_form(self): + form = TeamInviteForm() diff --git a/rowers/tests/test_user.py b/rowers/tests/test_user.py new file mode 100644 index 00000000..3a91de7d --- /dev/null +++ b/rowers/tests/test_user.py @@ -0,0 +1,89 @@ +#from __future__ import print_function +import pytest + +pytestmark = pytest.mark.django_db + +from bs4 import BeautifulSoup +import re +from nose_parameterized import parameterized +from django.test import TestCase, Client,override_settings +from django.core.management import call_command +from django.utils.six import StringIO +from django.test.client import RequestFactory +import datetime +from django.utils import timezone + +import json +import numpy as np +import rowers.dataprep as dataprep + +from redis import StrictRedis +redis_connection = StrictRedis() + +from rowers.models import User,Rower, Workout + +class UserMiddleWareTest(TestCase): + def setUp(self): + u = User.objects.create_user('john', + 'sander@ds.ds', + 'koeinsloot') + r = Rower.objects.create(user=u) + + self.c = Client() + self.c.login(username='john',password='koeinsloot') + nu = datetime.datetime.now() + + response = dataprep.new_workout_from_file(r,'/media/testdata.csv.gz', + title='sample') + + newworkoutid = response[0] + self.w = Workout.objects.get(id=newworkoutid) + + + def test_middleware(self): + response = self.c.get('/rowers/list-workouts',follow=True) + self.assertEqual(response.status_code,200) + +class UserExpireTest(TestCase): + def setUp(self): + redis_connection.publish('tasks','KILL') + self.u = User.objects.create_user('john', + 'sander@ds.ds', + 'koeinsloot') + + yesterday_dt = timezone.now()-datetime.timedelta(days=1) + yesterday = yesterday_dt.date() + + r = Rower.objects.create(user=self.u,planexpires = yesterday,rowerplan='pro', + paymenttype='single') + + self.c = Client() + self.c.login(username='john',password='koeinsloot') + nu = datetime.datetime.now() + + response = dataprep.new_workout_from_file(r,'/media/testdata.csv.gz', + title='sample') + + newworkoutid = response[0] + self.w = Workout.objects.get(id=newworkoutid) + + + def test_expire(self): + response = self.c.get('/rowers/list-workouts',follow=True) + self.assertEqual(response.status_code,200) + self.assertEqual(self.u.rower.rowerplan,'basic') + +class UserTestsNoRower(TestCase): + def setUp(self): + u = User.objects.create_user('john', + 'sander@ds.ds', + 'koeinsloot') + + self.c = Client() + self.c.login(username='john',password='koeinsloot') + + + def test_user(self): + response = self.c.get('/rowers/list-workouts',follow=True) + self.assertEqual(response.status_code,200) + diff --git a/rowers/tests/test_user.py,cover b/rowers/tests/test_user.py,cover new file mode 100644 index 00000000..5ece6fa8 --- /dev/null +++ b/rowers/tests/test_user.py,cover @@ -0,0 +1,94 @@ + #from __future__ import print_function +> import pytest + +> pytestmark = pytest.mark.django_db + +> from bs4 import BeautifulSoup +> import re +> from nose_parameterized import parameterized +> from django.test import TestCase, Client,override_settings +> from django.core.management import call_command +> from django.utils.six import StringIO +> from django.test.client import RequestFactory +> import datetime +! from django.utils import timezone + +> import json +! import numpy as np + + +> from redis import StrictRedis +! redis_connection = StrictRedis() + +! from rowers.models import User,Rower, Workout + +> class UserMiddleWareTest(TestCase): +> def setUp(self): +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +! r = Rower.objects.create(user=u) + +> self.c = Client() +! self.c.login(username='john',password='koeinsloot') +> nu = datetime.datetime.now() + +> response = dataprep.new_workout_from_file(r,'/media/testdata.csv.gz', +> title='sample') + +! newworkoutid = response[0] +! self.w = Workout.objects.get(id=newworkoutid) + + +! def test_middleware(self): +! response = self.c.get('/rowers/list-workouts',follow=True) +! self.assertEqual(response.status_code,200) + +! class UserExpireTest(TestCase): +! def setUp(self): +! redis_connection.publish('tasks','KILL') +! self.u = User.objects.create_user('john', +! 'sander@ds.ds', +! 'koeinsloot') + +! yesterday_dt = timezone.now()-datetime.timedelta(days=1) +! yesterday = yesterday_dt.date() + +! r = Rower.objects.create(user=self.u,planexpires = yesterday,rowerplan='pro', +! paymenttype='single') + +! self.c = Client() +! self.c.login(username='john',password='koeinsloot') +! nu = datetime.datetime.now() + +! response = dataprep.new_workout_from_file(r,'/media/testdata.csv.gz', +! title='sample') + +! newworkoutid = response[0] +! self.w = Workout.objects.get(id=newworkoutid) + + +! def test_expire(self): +! response = self.c.get('/rowers/list-workouts',follow=True) +! self.assertEqual(response.status_code,200) +! self.assertEqual(self.u.rower.rowerplan,'basic') + +! class UserTestsNoRower(TestCase): +! def setUp(self): +! u = User.objects.create_user('john', +! 'sander@ds.ds', +! 'koeinsloot') + +! self.c = Client() +! self.c.login(username='john',password='koeinsloot') +! nu = datetime.datetime.now() +! self.w = Workout.objects.create(name='testworkout', +! workouttype='water', +! user=self.r,date=nu.strftime('%Y-%m-%d'), +! starttime=nu.strftime('%H:%M:%S'), +! duration="0:55:00",distance=8000) + +! def test_user(self): +! response = self.c.get('/rowers/list-workouts',follow=True) +! self.assertEqual(response.status_code,200) + diff --git a/rowers/tests/tests.py b/rowers/tests/tests.py index 11147a79..ee207208 100644 --- a/rowers/tests/tests.py +++ b/rowers/tests/tests.py @@ -44,7 +44,7 @@ from rowers.dataprep import delete_strokedata from redis import StrictRedis redis_connection = StrictRedis() -@pytest.mark.django_db +#@pytest.mark.django_db class DjangoTestCase(TestCase, MockTestCase): def _pre_setup(self): MockTestCase.setUp(self) @@ -355,6 +355,7 @@ def mocked_requests(*args, **kwargs): elif c2workoutlisttester.match(args[0]): return MockResponse(c2workoutlist,200) elif 'access_token' in args[0]: + print 'aap' json_data = { 'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq', 'expires_in': 604800, @@ -380,7 +381,7 @@ def mocked_requests(*args, **kwargs): return MockResponse(None,404) -@pytest.mark.django_db +#@pytest.mark.django_db class C2Objects(DjangoTestCase): def setUp(self): self.c = Client() @@ -512,8 +513,82 @@ class C2Objects(DjangoTestCase): res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2') +class C2ObjectsTokenExpired(DjangoTestCase): + def setUp(self): + self.c = Client() + self.u = User.objects.create_user('john', + 'sander@ds.ds', + 'koeinsloot') + + self.u.first_name = 'John' + self.u.last_name = 'Sander' + self.u.save() + self.r = Rower.objects.create(user=self.u,gdproptin=True, + gdproptindate=timezone.now() + ) + + self.r.c2token = '12' + self.r.c2refreshtoken = 'ab' + self.r.tokenexpirydate = datetime.datetime.now()-datetime.timedelta(days=1) + self.r.save() + self.c.login(username='john',password='koeinsloot') + + self.nu = datetime.datetime.now() -@pytest.mark.django_db + filename = 'rowers/tests/testdata/testdata.csv' + + rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2, + hrut1=self.r.ut1,hrat=self.r.at, + hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp) + row = rdata(filename,rower=rr) + totaldist = row.df['cum_dist'].max() + totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min() + totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)'] + + + hours = int(totaltime/3600.) + minutes = int((totaltime - 3600.*hours)/60.) + seconds = int(totaltime - 3600.*hours - 60.*minutes) + tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds)) + + duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths) + + + workoutdate = row.rowdatetime.strftime('%Y-%m-%d') + workoutstarttime = row.rowdatetime.strftime('%H:%M:%S') + + self.w = Workout.objects.create( + name='testworkout',workouttype='water', + user=self.r,date=self.nu.strftime('%Y-%m-%d'), + starttime=workoutstarttime, + startdatetime=row.rowdatetime, + duration=duration,distance=totaldist, + csvfilename=filename + ) + + + + @patch('rowers.c2stuff.requests.post', side_effect=mocked_requests) + @patch('rowers.c2stuff.requests.get', side_effect=mocked_requests) + def test_c2_list(self, mock_get, mock_post): + response = self.c.get('/rowers/workout/c2list',follow=True) + + self.assertEqual(response.status_code,200) + + @patch('rowers.c2stuff.requests.get', side_effect=mocked_requests) + def test_c2_import(self, mock_get): + + response = self.c.get('/rowers/workout/c2import/12/',follow=True) + + self.assertRedirects(response, + expected_url='/rowers/workout/2/edit', + status_code=302,target_status_code=200) + + self.assertEqual(response.status_code, 200) + + + +#@pytest.mark.django_db class StravaObjects(DjangoTestCase): def setUp(self): self.c = Client() @@ -552,7 +627,7 @@ class StravaObjects(DjangoTestCase): -@pytest.mark.django_db +#@pytest.mark.django_db class STObjects(DjangoTestCase): def setUp(self): self.c = Client() @@ -670,7 +745,7 @@ class STObjects(DjangoTestCase): res = add_workout_from_data(self.u,1,data,data) -@pytest.mark.django_db +#@pytest.mark.django_db class RunKeeperObjects(DjangoTestCase): def setUp(self): self.c = Client() @@ -762,7 +837,7 @@ class RunKeeperObjects(DjangoTestCase): -@pytest.mark.django_db +#@pytest.mark.django_db class UAObjects(DjangoTestCase): def setUp(self): self.c = Client() @@ -863,7 +938,7 @@ class UAObjects(DjangoTestCase): self.assertEqual(response.status_code, 200) -@pytest.mark.django_db +#@pytest.mark.django_db class TPObjects(DjangoTestCase): def setUp(self): self.c = Client() @@ -949,7 +1024,7 @@ class TPObjects(DjangoTestCase): -@pytest.mark.django_db +#@pytest.mark.django_db class TestErrorPages(TestCase): def test_error_handlers(self): @@ -964,7 +1039,7 @@ class TestErrorPages(TestCase): self.assertEqual(response.status_code, 500) self.assertIn('500 Internal Server Error', unicode(response)) -@pytest.mark.django_db +#@pytest.mark.django_db class NewUserRegistrationTest(TestCase): def setUp(self): self.c = Client() @@ -997,6 +1072,7 @@ class NewUserRegistrationTest(TestCase): from django_mailbox.models import Mailbox,MessageAttachment,Message +#@pytest.mark.django_db class AutoExportTests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -1053,6 +1129,7 @@ boattype: 2x call_command('processemail', stdout=out, testing=True) self.assertIn('Successfully processed email attachments',out.getvalue()) +#@pytest.mark.django_db class UploadTests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -1096,6 +1173,7 @@ workout run w = Workout.objects.get(id=1) self.assertEqual(w.workouttype,'Run') +#@pytest.mark.django_db class EmailTests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -1157,6 +1235,7 @@ workout water self.assertIn('Successfully processed email attachments',out.getvalue()) +#@pytest.mark.django_db class WorkoutTests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -1176,6 +1255,7 @@ class WorkoutTests(TestCase): def test_checkworkoutuser(self): self.assertEqual(checkworkoutuser(self.u,self.w),True) +#@pytest.mark.django_db class C2Tests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -1196,6 +1276,7 @@ class C2Tests(TestCase): # should raise NoTokenError self.assertRaises(NoTokenError) +#@pytest.mark.django_db class DataTest(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -1383,6 +1464,7 @@ class DataTest(TestCase): +#@pytest.mark.django_db class ViewTest(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -2143,6 +2225,7 @@ class ViewTest(TestCase): # f_to_be_deleted = w.csvfilename # os.remove(f_to_be_deleted+'.gz') +#@pytest.mark.django_db class URLTests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -2389,6 +2472,7 @@ class URLTests(TestCase): msg=url+' response status code not 200') +#@pytest.mark.django_db class subroutinetests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') @@ -2414,6 +2498,7 @@ class subroutinetests(TestCase): +#@pytest.mark.django_db class PlotTests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') diff --git a/rowers/tests/tests.py,cover b/rowers/tests/tests.py,cover new file mode 100644 index 00000000..3c9785cd --- /dev/null +++ b/rowers/tests/tests.py,cover @@ -0,0 +1,2831 @@ + #from __future__ import print_function +> import pytest + +> pytestmark = pytest.mark.django_db + +> from bs4 import BeautifulSoup +> import re +> from nose_parameterized import parameterized +> from django.test import TestCase, Client,override_settings +> from django.core.management import call_command +> from django.utils.six import StringIO +> from django.test.client import RequestFactory +> from rowers.views import checkworkoutuser,c2_open +> from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage +> from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail +> import rowers.plots as plots +> import rowers.interactiveplots as iplots +> import datetime +> from rowingdata import rowingdata as rdata +> from rowingdata import rower as rrower +> from django.utils import timezone +> from rowers.rows import handle_uploaded_file +> from django.core.files.uploadedfile import SimpleUploadedFile +> from time import strftime,strptime,mktime,time,daylight +> import os +> from rowers.tasks import handle_makeplot +> from rowers.utils import serialize_list,deserialize_list +> from rowers.utils import NoTokenError +> from shutil import copyfile +> from nose.tools import assert_true +> from mock import Mock, patch +> from minimocktest import MockTestCase +> import pandas as pd +> import rowers.c2stuff as c2stuff + +> import json +> import numpy as np + +> from rowers import urls +> from rowers.views import error500_view,error404_view,error400_view,error403_view + +> from rowers.dataprep import delete_strokedata + +> from redis import StrictRedis +> redis_connection = StrictRedis() + + #@pytest.mark.django_db +> class DjangoTestCase(TestCase, MockTestCase): +> def _pre_setup(self): +> MockTestCase.setUp(self) +> TestCase._pre_setup(self) +> self.client = Client() + +> def _post_teardown(self): +> TestCase._post_teardown(self) +> MockTestCase.tearDown(self) +> delete_strokedata(1) + + # to be done add polar mocks (for email processing) +> def mocked_requests(*args, **kwargs): +> with open('rowers/tests/testdata/c2jsonworkoutdata.txt','r') as infile: +> c2workoutdata = json.load(infile) + +> with open('rowers/tests/testdata/c2jsonstrokedata.txt','r') as infile: +> c2strokedata = json.load(infile) + +> polar_json = { +> 'available-user-data': [] +> } + +> c2workoutlist = json.load(open('rowers/tests/testdata/c2workoutlist.txt')) + +> c2uploadjson = { +> "data": { +> "id": 339, +> "user_id": 1, +> "date": "2015-08-05 13:15:41", +> "timezone": "Europe/London", +> "date_utc": "2015-08-05 12:15:41", +> "distance": 5649, +> "type": "rower", +> "time": 8649, +> "time_formatted": "14:24.9", +> "workout_type": "JustRow", +> "source": "ErgData", +> "weight_class": "H", +> "verified": True, +> "ranked": False +> } +> } + +> stravaworkoutlist = json.load(open('rowers/tests/testdata/stravaworkoutlist.txt')) +> sporttracksworkoutlist = json.load(open('rowers/tests/testdata/sporttracksworkouts.txt')) + +> rkworkoutlistjson = json.load(open('rowers/tests/testdata/rkworkoutslist.txt','r')) +> uaworkoutlistjson = json.load(open('rowers/tests/testdata/uaworkoutlist.txt','r')) + +> stravasummaryjson = json.load(open('rowers/tests/testdata/stravaworkoutsummary.txt','r')) + +> stravatimejson = json.load(open('rowers/tests/testdata/stravatimetestdata.txt','r')) +> stravavelojson = json.load(open('rowers/tests/testdata/stravavelotestdata.txt','r')) + +> stravapowerjson = json.load(open('rowers/tests/testdata/stravapowertestdata.txt','r')) + +> stravadistancejson = json.load(open('rowers/tests/testdata/stravadistancetestdata.txt','r')) +> stravalatlongjson = json.load(open('rowers/tests/testdata/stravalatlongtestdata.txt','r')) +> stravahrjson = json.load(open('rowers/tests/testdata/stravahrtestdata.txt','r')) +> stravaspmjson = json.load(open('rowers/tests/testdata/stravaspmtestdata.txt','r')) + +> uapostworkoutjson = json.load(open('rowers/tests/testdata/uapostworkoutresponse.txt','r')) + +> tpuploadresponse = json.load(open('rowers/tests/testdata/tpuploadresponse.txt','r')) + +> stravastreamjson = { +> 'time':stravatimejson, +> 'velocity_smooth':stravavelojson, +> 'distance':stravadistancejson, +> 'latlng':stravalatlongjson, +> 'heartrate':stravahrjson, +> 'cadence':stravaspmjson, +> 'power':stravapowerjson, +> } + +> ststrokesjson = json.load(open('rowers/tests/testdata/sporttracksstrokedata.txt','r')) + +> rkstrokesjson = json.load(open('rowers/tests/testdata/rkstrokes.txt','r')) + +> uastrokesjson = json.load(open('rowers/tests/testdata/uastrokes.txt','r')) +> uauserjson = json.load(open('rowers/tests/testdata/uauser.txt','r')) + +> class MockResponse: +> def __init__(self, json_data, status_code): +> self.json_data = json_data +> self.status_code = status_code + +> def json(self): +> return self.json_data + + +> class MockHeaderResponse: +> def __init__(self, header_data, status_code): +> self.headers = header_data +> self.status_code = status_code + +> class MockSession: +> def send(self,prepped): + # prepped.url + # prepped.body (post data) + # prepped.headers + # prepped.method + +> json_data = { +> 'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq', +> 'expires_in': 604800, +> 'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR' +> } + +> return MockResponse(json_data,200) + +> if not args: +> return MockSession() + +> polartester = re.compile('.*?polaraccesslink\.com') +> c2tester = re.compile('.*?log\.concept2\.com') +> stravatester = re.compile('.*?strava\.com') +> sttester = re.compile('.*?sporttracks\.mobi') +> rktester = re.compile('.*?runkeeper\.com') +> uatester = re.compile('.*?mapmyfitness\.com') +> tptester = re.compile('.*?trainingpeaks\.com') + +> c2importregex = '.*?concept2.com\/api\/users\/me\/results\/\d+' +> c2importtester = re.compile(c2importregex) + +> c2uploadregex = '.*?concept2.com\/api\/users\/\d+\/results$' +> c2uploadtester = re.compile(c2uploadregex) + +> c2strokesregex = '.*?concept2.com\/api\/users\/me\/results\/\d+\/strokes' +> c2strokestester = re.compile(c2strokesregex) + +> c2workoutlistregex = '.*?concept2\.com\/api\/users\/me\/results\?page=\d' +> c2workoutlisttester = re.compile(c2workoutlistregex) + +> stravaworkoutlistregex = '.*?strava\.com\/api\/v3\/athlete\/activities' +> stravaworkoutlisttester = re.compile(stravaworkoutlistregex) + +> stravastreamregex = '.*?strava\.com\/api\/v3\/activities\/\d+\/streams\/(\w.*?)\?' +> stravastreamtester = re.compile(stravastreamregex) + +> stravasummaryregex = '.*?strava\.com\/api\/v3\/activities\/\d+$' +> stravasummarytester = re.compile(stravasummaryregex) + +> stuploadregex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities.json$' +> stuploadtester = re.compile(stuploadregex) + +> stworkoutlistregex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities$' +> stworkoutlisttester = re.compile(stworkoutlistregex) + +> ststrokesregex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities/\d+$' +> ststrokestester = re.compile(ststrokesregex) + +> rkuploadregex = '.*?api\.runkeeper\.com\/fitnessActivities$' +> rkuploadtester = re.compile(rkuploadregex) +> rkuserregex = '.*?api\.runkeeper\.com\/user$' +> rkusertester = re.compile(rkuserregex) +> rkstrokesregex = '.*?api\.runkeeper\.com\/fitnessActivities/\d+$' +> rkstrokestester = re.compile(rkstrokesregex) + +> uaapiregex = '.*?api\.ua\.com' +> uaapitester = re.compile(uaapiregex) + +> uauploadregex = '.*?api\.ua\.com\/v7.1\/workout\/$' +> uauploadtester = re.compile(uauploadregex) + +> uastrokesregex = '.*?api\.ua\.com\/v7.1\/workout\/\d+' +> uastrokestester = re.compile(uastrokesregex) + +> ualistregex = '.*?api\.ua\.com\/v7.1\/workout\/\?user' +> ualisttester = re.compile(ualistregex) + +> uauserregex = '.*?api\.ua\.com\/v7.1\/user\/self\/' +> uausertester = re.compile(uauserregex) + +> tpuploadregex = '.*?trainingpeaks\.com\/v1\/file' +> tpuploadtester = re.compile(tpuploadregex) + +> if polartester.match(args[0]): +> json_data = polar_json +> return MockResponse(json_data,200) + +> if tptester.match(args[0]): +> if 'token' in args[0]: +> json_data = { +> 'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq', +> 'expires_in': 604800, +> 'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR' +> } +> return MockResponse(json_data,200) +> elif tpuploadtester.match(args[0]): +> return MockResponse(tpuploadresponse,200) + +> if uaapitester.match(args[0]): +> if 'access_token' in args[0]: +> json_data = { +> 'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq', +> 'expires_in': 604800, +> 'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR' +> } +> return MockResponse(json_data,200) +> elif uauploadtester.match(args[0]): +> if 'data' in kwargs: +> return MockResponse(uapostworkoutjson,200) +> elif uastrokestester.match(args[0]): +> return MockResponse(uastrokesjson,200) +> elif ualisttester.match(args[0]): +> return MockResponse(uaworkoutlistjson,200) +> elif uausertester.match(args[0]): +> return MockResponse(uauserjson,200) + + +> if uatester.match(args[0]): +! if 'access_token' in args[0]: +! json_data = { +! 'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq', +! 'expires_in': 604800, +! 'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR' +! } +! return MockResponse(json_data,200) + + +> if rktester.match(args[0]): +> if 'token' in args[0]: +> json_data = { +> 'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq', +> 'expires_in': 604800, +> 'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR' +> } +> return MockResponse(json_data,200) +> elif rkuploadtester.match(args[0]): +> if 'data' in kwargs: + # post +> header_data = { +> 'Location': '/fitnessActivities/12' +> } +> return MockHeaderResponse(header_data,200) +> else: +> json_data = rkworkoutlistjson +> return MockResponse(json_data,200) +> elif rkusertester.match(args[0]): +> json_data = { +> "userID": 1234567890, +> "profile": "/profile", +> "settings": "/settings", +> "fitness_activities": "/fitnessActivities", +> "strength_training_activities": "/strengthTrainingActivities", +> "background_activities": "/backgroundActivities", +> "sleep": "/sleep", +> "nutrition": "/nutrition", +> "weight": "/weight", +> "general_measurements": "/generalMeasurements", +> "diabetes": "/diabetes", +> "records": "/records", +> "team": "/team" +> } +> return MockResponse(json_data, 200) +> elif rkstrokestester.match(args[0]): +> return MockResponse(rkstrokesjson,200) + +> if sttester.match(args[0]): +> if 'oauth2/token' in args[0]: +> json_data = { +> 'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq', +> 'expires_in': 604800, +> 'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR' +> } +> return MockResponse(json_data,200) +> if ststrokestester.match(args[0]): +> return MockResponse(ststrokesjson,200) +> if stuploadtester.match(args[0]): +> json_data = { +> "uris": [ +> "https://api.sporttracks.mobi/api/v2/fitnessActivities/123456.json" +> ] +> } +> return MockResponse(json_data, 200) +> if stworkoutlisttester.match(args[0]): +> return MockResponse(sporttracksworkoutlist,200) + + +> if stravatester.match(args[0]): +> if stravaworkoutlisttester.match(args[0]): +! return MockResponse(stravaworkoutlist,200) +> if stravastreamtester.match(args[0]): +> metric = stravastreamtester.match(args[0]).group(1) +> json_data = stravastreamjson[metric] +> return MockResponse(json_data,200) +> elif stravasummarytester.match(args[0]): +> return MockResponse(stravasummaryjson,200) +> elif 'token' in args[0]: +> json_data = { +> "token_type": "Bearer", +> "access_token": "987654321234567898765432123456789", +> "refresh_token": "1234567898765432112345678987654321", +> "expires_at": 1531385304 +> } +> return MockResponse(json_data,200) + + +> if c2tester.match(args[0]): +> if c2uploadtester.match(args[0]): +> return MockResponse(c2uploadjson,201) +> if c2strokestester.match(args[0]): +> return MockResponse(c2strokedata,200) +> elif c2importtester.match(args[0]): +> return MockResponse(c2workoutdata,200) +> elif c2workoutlisttester.match(args[0]): +> return MockResponse(c2workoutlist,200) +> elif 'access_token' in args[0]: +! json_data = { +! 'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq', +! 'expires_in': 604800, +! 'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR' +! } +! return MockResponse(json_data,200) +> elif 'users/me' in args[0]: +> json_data = { +> 'data': { +> 'username': 'john', +> 'id': 1234, +> } +> } +> return MockResponse(json_data,200) +! elif 'results' in args[0]: +! json_data = { +! 'data': { +! 'id': 1223, +! } +! } +! else: +! return MockResponse(c2workoutdata,200) + +! return MockResponse(None,404) + + #@pytest.mark.django_db +> class C2Objects(DjangoTestCase): +> def setUp(self): +> self.c = Client() +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') + +> self.u.first_name = 'John' +> self.u.last_name = 'Sander' +> self.u.save() +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + +> self.r.c2token = '12' +> self.r.c2refreshtoken = 'ab' +> self.r.tokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1) +> self.r.save() +> self.c.login(username='john',password='koeinsloot') + +> self.nu = datetime.datetime.now() + +> filename = 'rowers/tests/testdata/testdata.csv' + +> rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2, +> hrut1=self.r.ut1,hrat=self.r.at, +> hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp) +> row = rdata(filename,rower=rr) +> totaldist = row.df['cum_dist'].max() +> totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min() +> totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)'] + + +> hours = int(totaltime/3600.) +> minutes = int((totaltime - 3600.*hours)/60.) +> seconds = int(totaltime - 3600.*hours - 60.*minutes) +> tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds)) + +> duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths) + + +> workoutdate = row.rowdatetime.strftime('%Y-%m-%d') +> workoutstarttime = row.rowdatetime.strftime('%H:%M:%S') + +> self.w = Workout.objects.create( +> name='testworkout',workouttype='water', +> user=self.r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=workoutstarttime, +> startdatetime=row.rowdatetime, +> duration=duration,distance=totaldist, +> csvfilename=filename +> ) + + +> @patch('rowers.c2stuff.requests.Session', side_effect=mocked_requests) +> def test_c2_callback(self, mock_Session): +> response = self.c.get('/call_back?code=dsdoij232s',follow=True) + + +> self.assertEqual(response.status_code, 200) + + +> @patch('rowers.c2stuff.Session', side_effect=mocked_requests) +> def test_c2_token_refresh(self, mock_post): +> response = self.c.get('/rowers/me/c2refresh/',follow=True) + +> self.assertEqual(response.status_code, 200) + + +> @patch('rowers.c2stuff.requests.post', side_effect=mocked_requests) +> @patch('rowers.c2stuff.requests.get', side_effect=mocked_requests) +> def test_c2_upload(self, mock_get, mock_post): +> response = self.c.get('/rowers/workout/1/c2uploadw/') + +> self.assertRedirects(response, +> expected_url = '/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.url, '/rowers/workout/1/edit') +> self.assertEqual(response.status_code, 302) + +> @patch('rowers.c2stuff.requests.post', side_effect=mocked_requests) +> @patch('rowers.c2stuff.requests.get', side_effect=mocked_requests) +> def test_c2_list(self, mock_get, mock_post): +> response = self.c.get('/rowers/workout/c2list',follow=True) + +> self.assertEqual(response.status_code,200) + +> @patch('rowers.c2stuff.requests.get', side_effect=mocked_requests) +> def test_c2_import(self, mock_get): + +> response = self.c.get('/rowers/workout/c2import/12/',follow=True) + +> self.assertRedirects(response, +> expected_url='/rowers/workout/2/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + + +> def test_strokedata(self): +> with open('rowers/tests/testdata/c2stroketestdata.txt','r') as infile: +> res = json.load(infile) + +> strokedata = pd.DataFrame.from_dict(res['data']) + +> with open('rowers/tests/testdata/c2testdata.txt','r') as infile: +> res = json.load(infile) + +> data = res['data'] + +> from rowers.views import add_workout_from_strokedata + +> res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2') + +> def test_strokedatanohr(self): +> with open('rowers/tests/testdata/c2strokedatanohr.txt','r') as infile: +> res = json.load(infile) + +> strokedata = pd.DataFrame.from_dict(res['data']) + +> with open('rowers/tests/testdata/c2testdata.txt','r') as infile: +> res = json.load(infile) + +> data = res['data'] + +> from rowers.views import add_workout_from_strokedata + + +> res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2') + +! class C2ObjectsTokenExpired(DjangoTestCase): +! def setUp(self): +> self.c = Client() +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') + +> self.u.first_name = 'John' +! self.u.last_name = 'Sander' +> self.u.save() +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + +! self.r.c2token = '12' +! self.r.c2refreshtoken = 'ab' +> self.r.tokenexpirydate = datetime.datetime.now()-datetime.timedelta(days=1) +! self.r.save() +> self.c.login(username='john',password='koeinsloot') + +! self.nu = datetime.datetime.now() + +! filename = 'rowers/tests/testdata/testdata.csv' + +> rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2, +> hrut1=self.r.ut1,hrat=self.r.at, +> hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp) +> row = rdata(filename,rower=rr) +! totaldist = row.df['cum_dist'].max() +! totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min() +> totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)'] + + +> hours = int(totaltime/3600.) +> minutes = int((totaltime - 3600.*hours)/60.) +! seconds = int(totaltime - 3600.*hours - 60.*minutes) +> tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds)) + +! duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths) + + +> workoutdate = row.rowdatetime.strftime('%Y-%m-%d') +> workoutstarttime = row.rowdatetime.strftime('%H:%M:%S') + +> self.w = Workout.objects.create( +> name='testworkout',workouttype='water', +> user=self.r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=workoutstarttime, +> startdatetime=row.rowdatetime, +> duration=duration,distance=totaldist, +> csvfilename=filename +> ) + + + +! @patch('rowers.c2stuff.requests.post', side_effect=mocked_requests) +> @patch('rowers.c2stuff.requests.get', side_effect=mocked_requests) +> def test_c2_list(self, mock_get, mock_post): +> response = self.c.get('/rowers/workout/c2list',follow=True) + +! self.assertEqual(response.status_code,200) + +! @patch('rowers.c2stuff.requests.get', side_effect=mocked_requests) +! def test_c2_import(self, mock_get): + +> response = self.c.get('/rowers/workout/c2import/12/',follow=True) + +> self.assertRedirects(response, +> expected_url='/rowers/workout/2/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + + + + #@pytest.mark.django_db +> class StravaObjects(DjangoTestCase): +> def setUp(self): +> self.c = Client() +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') + +! self.u.first_name = 'John' +> self.u.last_name = 'Sander' +> self.u.save() +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + +> self.r.stravatoken = '12' + +> self.r.save() +> self.c.login(username='john',password='koeinsloot') + +! @patch('rowers.stravastuff.requests.post', side_effect=mocked_requests) +! def test_strava_list(self, mock_get): +! response = self.c.get('/rowers/workout/stravaimport/',follow=True) + +! self.assertEqual(response.status_code,200) + +> @patch('rowers.utils.requests.get', side_effect=mocked_requests) +> def test_strava_import(self, mock_get): + +> response = self.c.get('/rowers/workout/stravaimport/12',follow=True) + +> self.assertRedirects(response, +> expected_url='/rowers/workout/1/edit', +> status_code=301,target_status_code=200) + +! self.assertEqual(response.status_code, 200) + + + + #@pytest.mark.django_db +! class STObjects(DjangoTestCase): +> def setUp(self): +> self.c = Client() +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') + +! self.u.first_name = 'John' +> self.u.last_name = 'Sander' +! self.u.save() +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + + +! self.r.sporttrackstoken = '12' +! self.r.sporttracksrefreshtoken = '12' +> self.r.sporttrackstokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1) +! self.r.save() + +> self.c.login(username='john',password='koeinsloot') + +! self.nu = datetime.datetime.now() + +! filename = 'rowers/tests/testdata/testdata.csv' + +> rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2, +> hrut1=self.r.ut1,hrat=self.r.at, +> hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp) +> row = rdata(filename,rower=rr) +! totaldist = row.df['cum_dist'].max() +> totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min() +! totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)'] + + +> hours = int(totaltime/3600.) +! minutes = int((totaltime - 3600.*hours)/60.) +> seconds = int(totaltime - 3600.*hours - 60.*minutes) +! tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds)) + +! duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths) + + +! workoutdate = row.rowdatetime.strftime('%Y-%m-%d') +> workoutstarttime = row.rowdatetime.strftime('%H:%M:%S') + +> self.w = Workout.objects.create( +> name='testworkout',workouttype='water', +> user=self.r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=workoutstarttime, +> startdatetime=row.rowdatetime, +> duration=duration,distance=totaldist, +> csvfilename=filename +> ) + +> @patch('rowers.sporttracksstuff.requests.post', side_effect=mocked_requests) +> def test_sporttracks_callback(self, mock_post): +! response = self.c.get('/sporttracks_callback?code=dsdoij232s',follow=True) + + +! self.assertEqual(response.status_code, 200) + + +> @patch('rowers.sporttracksstuff.requests.post', side_effect=mocked_requests) +> def test_sporttracks_token_refresh(self, mock_post): +> response = self.c.get('/rowers/me/sporttracksrefresh/',follow=True) + +> self.assertEqual(response.status_code, 200) + + +> @patch('rowers.sporttracksstuff.requests.post', side_effect=mocked_requests) +> @patch('rowers.sporttracksstuff.requests.get', side_effect=mocked_requests) +> def test_sporttracks_upload(self, mock_get, mock_post): +> response = self.c.get('/rowers/workout/1/sporttracksuploadw/') + +> self.assertRedirects(response, +> expected_url = '/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.url, '/rowers/workout/1/edit') +> self.assertEqual(response.status_code, 302) + +! @patch('rowers.sporttracksstuff.requests.get', side_effect=mocked_requests) +! def test_sporttracks_list(self, mock_get): +! response = self.c.get('/rowers/workout/sporttracksimport',follow=True) + +> self.assertEqual(response.status_code,200) + +! @patch('rowers.imports.requests.get', side_effect=mocked_requests) +! def test_sporttracks_import(self, mock_get): + +> response = self.c.get('/rowers/workout/sporttracksimport/12/',follow=True) + +> self.assertRedirects(response, +> expected_url='/rowers/workout/2/edit', +> status_code=302,target_status_code=200) + +! self.assertEqual(response.status_code, 200) + +! def test_strokedata(self): +> with open('rowers/tests/testdata/sporttrackstestdata.txt','r') as infile: +! data = json.load(infile) + +! from rowers.sporttracksstuff import add_workout_from_data + +> res = add_workout_from_data(self.u,1,data,data) + +> def test_strokedatanohr(self): +! with open('rowers/tests/testdata/sporttrackstestnohr.txt','r') as infile: +> data = json.load(infile) + +> from rowers.sporttracksstuff import add_workout_from_data + + + +! res = add_workout_from_data(self.u,1,data,data) + + #@pytest.mark.django_db +> class RunKeeperObjects(DjangoTestCase): +! def setUp(self): +> self.c = Client() +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') + +> self.u.first_name = 'John' +! self.u.last_name = 'Sander' +> self.u.save() +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + + +! self.r.runkeepertoken = '12' + +! self.r.save() + +> self.c.login(username='john',password='koeinsloot') + +> self.nu = datetime.datetime.now() + +> filename = 'rowers/tests/testdata/testdata.csv' + +> rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2, +> hrut1=self.r.ut1,hrat=self.r.at, +> hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp) +> row = rdata(filename,rower=rr) +> totaldist = row.df['cum_dist'].max() +! totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min() +! totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)'] + + +> hours = int(totaltime/3600.) +> minutes = int((totaltime - 3600.*hours)/60.) +> seconds = int(totaltime - 3600.*hours - 60.*minutes) +! tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds)) + +! duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths) + + +> workoutdate = row.rowdatetime.strftime('%Y-%m-%d') +! workoutstarttime = row.rowdatetime.strftime('%H:%M:%S') + +> self.w = Workout.objects.create( +> name='testworkout',workouttype='water', +> user=self.r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=workoutstarttime, +> startdatetime=row.rowdatetime, +> duration=duration,distance=totaldist, +> csvfilename=filename +> ) + +> @patch('rowers.runkeeperstuff.requests.post', side_effect=mocked_requests) +> def test_runkeeper_callback(self, mock_post): +> response = self.c.get('/runkeeper_callback?code=dsdoij232s',follow=True) + +> self.assertEqual(response.status_code, 200) + +! @patch('rowers.runkeeperstuff.requests.post', side_effect=mocked_requests) +> @patch('rowers.runkeeperstuff.requests.get', side_effect=mocked_requests) +> def test_runkeeper_upload(self, mock_get, mock_post): +! response = self.c.get('/rowers/workout/1/runkeeperuploadw/') + +> self.assertRedirects(response, +> expected_url = '/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.url, '/rowers/workout/1/edit') +> self.assertEqual(response.status_code, 302) + +! @patch('rowers.runkeeperstuff.requests.get', side_effect=mocked_requests) +! def test_runkeeper_list(self, mock_get): +! response = self.c.get('/rowers/workout/runkeeperimport',follow=True) + +! self.assertEqual(response.status_code,200) + +> @patch('rowers.imports.requests.get', side_effect=mocked_requests) +> def test_runkeeper_import(self, mock_get): + +> response = self.c.get('/rowers/workout/runkeeperimport/12/',follow=True) + +> self.assertRedirects(response, +> expected_url='/rowers/workout/2/edit', +> status_code=302,target_status_code=200) + +! self.assertEqual(response.status_code, 200) + + + + #@pytest.mark.django_db +! class UAObjects(DjangoTestCase): +> def setUp(self): +> self.c = Client() +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') + +! self.u.first_name = 'John' +> self.u.last_name = 'Sander' +! self.u.save() +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + + +! self.r.underarmourtoken = '12' +! self.r.underarmourrefreshtoken = '12' +> self.r.underarmourtokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1) +! self.r.save() + +> self.c.login(username='john',password='koeinsloot') + +! self.nu = datetime.datetime.now() + +! filename = 'rowers/tests/testdata/testdata.csv' + +> rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2, +> hrut1=self.r.ut1,hrat=self.r.at, +> hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp) +> row = rdata(filename,rower=rr) +> totaldist = row.df['cum_dist'].max() +> totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min() +> totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)'] + + +> hours = int(totaltime/3600.) +> minutes = int((totaltime - 3600.*hours)/60.) +> seconds = int(totaltime - 3600.*hours - 60.*minutes) +> tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds)) + +! duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths) + + +> workoutdate = row.rowdatetime.strftime('%Y-%m-%d') +> workoutstarttime = row.rowdatetime.strftime('%H:%M:%S') + +> self.w = Workout.objects.create( +> name='testworkout',workouttype='water', +> user=self.r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=workoutstarttime, +> startdatetime=row.rowdatetime, +> duration=duration,distance=totaldist, +> csvfilename=filename +> ) + +> @patch('rowers.imports.requests.post', side_effect=mocked_requests) +> def test_underarmour_callback(self, mock_post): +> response = self.c.get('/underarmour_callback?code=dsdoij232s',follow=True) + + +! self.assertEqual(response.status_code, 200) + + +> @patch('rowers.underarmourstuff.requests.post', side_effect=mocked_requests) +> def test_underarmour_token_refresh(self, mock_post): +> response = self.c.get('/rowers/me/underarmourrefresh/',follow=True) + +> self.assertEqual(response.status_code, 200) + + +> @patch('rowers.underarmourstuff.requests.post', side_effect=mocked_requests) +> @patch('rowers.underarmourstuff.requests.get', side_effect=mocked_requests) +> def test_underarmour_upload(self, mock_get, mock_post): +> response = self.c.get('/rowers/workout/1/underarmouruploadw/') + +> self.assertRedirects(response, +> expected_url = '/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.url, '/rowers/workout/1/edit') +! self.assertEqual(response.status_code, 302) + +> @patch('rowers.underarmourstuff.requests.get', side_effect=mocked_requests) +> def test_underarmour_list(self, mock_get): +> response = self.c.get('/rowers/workout/underarmourimport',follow=True) + +! self.assertEqual(response.status_code,200) + +! @patch('rowers.imports.requests.get', side_effect=mocked_requests) +! def test_underarmour_import(self, mock_get): + +! response = self.c.get('/rowers/workout/underarmourimport/12/',follow=True) + +> self.assertRedirects(response, +> expected_url='/rowers/workout/2/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + + + #@pytest.mark.django_db +! class TPObjects(DjangoTestCase): +> def setUp(self): +> self.c = Client() +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') + +! self.u.first_name = 'John' +! self.u.last_name = 'Sander' +! self.u.save() +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + + +> self.r.tptoken = '12' +> self.r.tprefreshtoken = '12' +> self.r.tptokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1) +> self.r.save() + +> self.c.login(username='john',password='koeinsloot') + +> self.nu = datetime.datetime.now() + +> filename = 'rowers/tests/testdata/testdata.csv' + +> rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2, +> hrut1=self.r.ut1,hrat=self.r.at, +> hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp) +> row = rdata(filename,rower=rr) +> totaldist = row.df['cum_dist'].max() +! totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min() +> totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)'] + + +> hours = int(totaltime/3600.) +> minutes = int((totaltime - 3600.*hours)/60.) +> seconds = int(totaltime - 3600.*hours - 60.*minutes) +> tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds)) + +> duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths) + + +> workoutdate = row.rowdatetime.strftime('%Y-%m-%d') +> workoutstarttime = row.rowdatetime.strftime('%H:%M:%S') + +> self.w = Workout.objects.create( +> name='testworkout',workouttype='water', +> user=self.r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=workoutstarttime, +> startdatetime=row.rowdatetime, +> duration=duration,distance=totaldist, +> csvfilename=filename +> ) + +> @patch('rowers.imports.requests.post', side_effect=mocked_requests) +> def test_tp_callback(self, mock_post): +> response = self.c.get('/tp_callback?code=dsdoij232s',follow=True) + + +> self.assertEqual(response.status_code, 200) + + +> @patch('rowers.tpstuff.requests.post', side_effect=mocked_requests) +> def test_tp_token_refresh(self, mock_post): +> response = self.c.get('/rowers/me/tprefresh/',follow=True) + +> self.assertEqual(response.status_code, 200) + + +> @patch('rowers.tpstuff.requests.post', side_effect=mocked_requests) +> @patch('rowers.tpstuff.requests.get', side_effect=mocked_requests) +> def test_tp_upload(self, mock_get, mock_post): +> response = self.c.get('/rowers/workout/1/tpuploadw/') + +> self.assertRedirects(response, +> expected_url = '/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.url, '/rowers/workout/1/edit') +> self.assertEqual(response.status_code, 302) + + + + + #@pytest.mark.django_db +> class TestErrorPages(TestCase): +> def test_error_handlers(self): + +! self.assertTrue(urls.handler404.endswith('.error404_view')) +! self.assertTrue(urls.handler500.endswith('.error500_view')) +! factory = RequestFactory() +! request = factory.get('/') +> response = error404_view(request) +> self.assertEqual(response.status_code, 404) +> self.assertIn('404 Page not found', unicode(response)) +> response = error500_view(request) +> self.assertEqual(response.status_code, 500) +> self.assertIn('500 Internal Server Error', unicode(response)) + + #@pytest.mark.django_db +> class NewUserRegistrationTest(TestCase): +> def setUp(self): +> self.c = Client() +! redis_connection.publish('tasks','KILL') + +! def test_newuser(self): +> form_data = { +> 'first_name':'Jan', +> 'last_name':'Roeiert', +> 'email':'jan@loop.nl', +> 'username':'janderoeiert', +> 'password1':'aapindewei2', +> 'password2':'aapindewei2', +> 'tos':True, +> 'weightcategory':'hwt', +> 'adaptiveclass': 'None', +> 'sex':'male', +> 'next':'/rowers/list-workouts', +> 'birthdate':datetime.datetime(year=1970,month=4,day=2) +> } + +> form = RegistrationFormUniqueEmail(form_data) +> self.assertTrue(form.is_valid()) + +! response = self.c.post('/rowers/register', form_data, follow=True) + +> self.assertRedirects(response, +> expected_url='/rowers/me/gdpr-optin/?next=/rowers/list-workouts/', +> status_code=302,target_status_code=200) + +> from django_mailbox.models import Mailbox,MessageAttachment,Message + + #@pytest.mark.django_db +> class AutoExportTests(TestCase): +! def setUp(self): +! redis_connection.publish('tasks','KILL') +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +> r = Rower.objects.create(user=u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + +> r.c2_auto_export = True +> r.sporttracks_auto_export = True +> r.mapmyfitness_auto_export = True +> r.trainingpeaks_auto_export = True + +! r.save() + +! nu = datetime.datetime.now() +! workoutsbox = Mailbox.objects.create(name='workouts') +> workoutsbox.save() +! failbox = Mailbox.objects.create(name='Failed') +> failbox.save() + +> filename = 'testdata.csv' + +> m = Message(mailbox=workoutsbox, +> from_header = u.email, +> subject = filename, +> body=""" +> --- +> workouttype: water +> boattype: 2x +> ... +> """) +> m.save() +! a2 = 'media/mailbox_attachments/'+filename +! copyfile('rowers/tests/testdata/'+filename,a2) +> a = MessageAttachment(message=m,document=a2[6:]) +> a.save() + +> def tearDown(self): +> for filename in os.listdir('media/mailbox_attachments'): +! path = os.path.join('media/mailbox_attachments/',filename) +> if not os.path.isdir(path): +> try: +> os.remove(path) +> except WindowsError: +! pass + +! @patch('rowers.tpstuff.requests.post', side_effect=mocked_requests) +! @patch('rowers.tpstuff.requests.get', side_effect=mocked_requests) +! def test_emailprocessing(self, mock_post, mock_get): +> out = StringIO() +> call_command('processemail', stdout=out, testing=True) +> self.assertIn('Successfully processed email attachments',out.getvalue()) + + #@pytest.mark.django_db +> class UploadTests(TestCase): +! def setUp(self): +> redis_connection.publish('tasks','KILL') +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +> r = Rower.objects.create(user=u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + +> nu = datetime.datetime.now() +> workoutsbox = Mailbox.objects.create(name='workouts') +> workoutsbox.save() +! failbox = Mailbox.objects.create(name='Failed') +! failbox.save() +> m = Message(mailbox=workoutsbox, +> from_header = u.email, +> subject = "3x(5min/2min)/r2 \r2", +> body = """ +> workout run +> """) +! m.save() +! a2 = 'media/mailbox_attachments/colin2.csv' +! copyfile('rowers/tests/testdata/emails/colin.csv',a2) +> a = MessageAttachment(message=m,document=a2[6:]) +! a.save() + +> def tearDown(self): +> for filename in os.listdir('media/mailbox_attachments'): +! path = os.path.join('media/mailbox_attachments/',filename) +! if not os.path.isdir(path): +! try: +> os.remove(path) +> except (IOError,WindowsError): +> pass + +> @patch('requests.get', side_effect=mocked_requests) +> def test_email_workouttype(self, mock_get): +> out = StringIO() +> call_command('processemail', stdout=out, testing=True) +! w = Workout.objects.get(id=1) +> self.assertEqual(w.workouttype,'Run') + + #@pytest.mark.django_db +> class EmailTests(TestCase): +> def setUp(self): +> redis_connection.publish('tasks','KILL') +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +> r = Rower.objects.create(user=u,gdproptin=True, +> gdproptindate=timezone.now() +> ) + +! nu = datetime.datetime.now() +! workoutsbox = Mailbox.objects.create(name='workouts') +! workoutsbox.save() +! failbox = Mailbox.objects.create(name='Failed') +! failbox.save() + +! for filename in os.listdir(u'rowers/tests/testdata/emails'): +> m = Message(mailbox=workoutsbox, +> from_header = u.email, +> subject = filename, +> body=""" +> --- +> workouttype: water +> boattype: 4x +> ... +> """) +! m.save() +! a2 = 'media/mailbox_attachments/'+filename +! copyfile(u'rowers/tests/testdata/emails/'+filename,a2) +> a = MessageAttachment(message=m,document=a2[6:]) +> a.save() + +> m = Message(mailbox=workoutsbox, +> from_header = u.email, +> subject = "3x(5min/2min)/r2 \r2", +> body = """ +> workout water +> """) +> m.save() +! a2 = 'media/mailbox_attachments/colin2.csv' +! copyfile('rowers/tests/testdata/emails/colin.csv',a2) +> a = MessageAttachment(message=m,document=a2[6:]) +> a.save() + + +> def tearDown(self): +> for filename in os.listdir('media/mailbox_attachments'): +> path = os.path.join('media/mailbox_attachments/',filename) +> if not os.path.isdir(path): +> try: +> os.remove(path) +> except (IOError,WindowsError): +> pass + +> @patch('requests.get', side_effect=mocked_requests) +> def test_emailprocessing(self, mock_get): +> out = StringIO() +> call_command('processemail', stdout=out,testing=True) +! self.assertIn('Successfully processed email attachments',out.getvalue()) + + + #@pytest.mark.django_db +> class WorkoutTests(TestCase): +> def setUp(self): +> redis_connection.publish('tasks','KILL') +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) +> nu = datetime.datetime.now() +> self.w = Workout.objects.create(name='testworkout', +> workouttype='water', +> user=self.r,date=nu.strftime('%Y-%m-%d'), +> starttime=nu.strftime('%H:%M:%S'), +> duration="0:55:00",distance=8000) + +> def test_checkworkoutuser(self): +> self.assertEqual(checkworkoutuser(self.u,self.w),True) + + #@pytest.mark.django_db +> class C2Tests(TestCase): +> def setUp(self): +! redis_connection.publish('tasks','KILL') +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now() +> ) +> self.nu = datetime.datetime.now() +> self.w = Workout.objects.create(name='testworkout',workouttype='water', +> user=r,date=nu.strftime('%Y-%m-%d'), +> starttime=nu.strftime('%H:%M:%S'), +> duration="0:55:00",distance=8000) + +> def c2_notokentest(self): +! thetoken = c2_open(self.u) + # should raise NoTokenError +> self.assertRaises(NoTokenError) + + #@pytest.mark.django_db +> class DataTest(TestCase): +> def setUp(self): +> redis_connection.publish('tasks','KILL') +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +> r = Rower.objects.create(user=u,gdproptin=True, +> gdproptindate=timezone.now() +> ) +! self.nu = datetime.datetime.now() + + +! def test_workoutform(self): +> form_data = { +> 'name':'test', +> 'date':'2016-05-01', +> 'starttime':'07:53:00', +> 'timezone':'UTC', +> 'duration':'0:55:00.1', +> 'distance':8000, +> 'notes':'Aap noot \n mies', +> 'weightcategory':'lwt', +> 'adaptiveclass': 'PR1', +> 'workouttype':'water', +> 'boattype':'1x', +> 'private':False, +> } +> form = WorkoutForm(data=form_data) +> self.assertTrue(form.is_valid()) + +> def test_rower_form_withvalidnumbers(self): +> form_data = { +> 'max':192, +> 'rest':48, +> 'ut2':105, +> 'ut1':148, +> 'at':160, +> 'tr':167, +> 'an':180, +> 'weightcategory':'lwt', +> } +> form = RowerForm(data=form_data) +> self.assertTrue(form.is_valid()) + + +> def test_rower_form_twoequalvalues(self): +> form_data = { +> 'max':192, +> 'rest':48, +> 'ut2':105, +> 'ut1':105, +> 'at':160, +> 'an':180, +> 'tr':167, +> 'weightcategory':'lwt', +> } +! form = RowerForm(data=form_data) +> self.assertFalse(form.is_valid()) + +! def test_rower_form_abovemaxallowed(self): +> form_data = { +> 'max':300, +> 'rest':48, +> 'ut2':105, +> 'ut1':148, +> 'at':160, +> 'an':180, +> 'tr':167, +> 'weightcategory':'lwt', +> } +> form = RowerForm(data=form_data) +> self.assertFalse(form.is_valid()) + +! def test_rower_form_wrongorder(self): +> form_data = { +> 'max':192, +> 'rest':48, +> 'ut2':20, +> 'ut1':148, +> 'at':160, +> 'an':180, +> 'tr':167, +> 'weightcategory':'lwt', +> } +> form = RowerForm(data=form_data) +! self.assertFalse(form.is_valid()) + +> def test_rower_form_belowminalloed(self): +> form_data = { +> 'max':192, +> 'rest':2, +> 'ut2':105, +> 'ut1':148, +> 'at':160, +> 'an':180, +> 'tr':167, +> 'weightcategory':'lwt', +> } +> form = RowerForm(data=form_data) +> self.assertFalse(form.is_valid()) + +> def test_rower_form_wrongorder2(self): +> form_data = { +> 'max':192, +> 'rest':48, +> 'ut2':105, +> 'ut1':170, +> 'at':160, +> 'an':180, +> 'tr':167, +> 'weightcategory':'lwt', +> } +! form = RowerForm(data=form_data) +! self.assertFalse(form.is_valid()) + +> def test_painsled(self): +> filename = 'rowers/tests/testdata/testdata.csv' +> f = open(filename,'rb') +> file_data = {'file': SimpleUploadedFile(f.name, f.read())} +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> } + +! form = DocumentsForm(form_data,file_data) +> self.assertTrue(form.is_valid()) + +! f.close() + +! u = User.objects.get(username='john') +! r = Rower.objects.get(user=u) + +> rr = rrower(hrmax=r.max,hrut2=r.ut2, +> hrut1=r.ut1,hrat=r.at, +> hrtr=r.tr,hran=r.an,ftp=r.ftp) +> row = rdata(filename,rower=rr) +! totaldist = row.df['cum_dist'].max() +> totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min() +> totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)'] + + +> hours = int(totaltime/3600.) +> minutes = int((totaltime - 3600.*hours)/60.) +> seconds = int(totaltime - 3600.*hours - 60.*minutes) +> tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds)) + +> duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths) + + +! workoutdate = row.rowdatetime.strftime('%Y-%m-%d') +! workoutstarttime = row.rowdatetime.strftime('%H:%M:%S') + +> w = Workout.objects.create(name='testworkout',workouttype='water', +> user=r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=workoutstarttime, +> duration=duration,distance=totaldist, +> csvfilename=filename) + + +> fig1 = plots.mkplot(row,'test') +! res = iplots.interactive_chart(w.id) +> res = iplots.interactive_chart(w.id,promember=1) +> res = iplots.interactive_bar_chart(w.id) +! res = iplots.interactive_bar_chart(w.id,promember=1) +> res = iplots.interactive_flex_chart2(w.id,promember=0,xparam='time', +> yparam1='pace',yparam2='hr') +! res = iplots.interactive_flex_chart2(w.id,promember=0,xparam='distance', +! yparam1='pace',yparam2='hr') +> res = iplots.interactive_flex_chart2(w.id,promember=0,xparam='time', +> yparam1='pace',yparam2='spm') +> res = iplots.interactive_flex_chart2(w.id,promember=0,xparam='distance', +> yparam1='pace',yparam2='spm') + +> res = iplots.interactive_flex_chart2(w.id,promember=1,xparam='time', +> yparam1='pace',yparam2='hr') +> res = iplots.interactive_flex_chart2(w.id,promember=1,xparam='distance', +> yparam1='pace',yparam2='hr') +> res = iplots.interactive_flex_chart2(w.id,promember=1,xparam='time', +> yparam1='pace',yparam2='spm') +> res = iplots.interactive_flex_chart2(w.id,promember=1,xparam='distance', +> yparam1='pace',yparam2='spm') + + + + + #@pytest.mark.django_db +> class ViewTest(TestCase): +> def setUp(self): +> redis_connection.publish('tasks','KILL') +! self.c = Client() +> self.u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +> self.r = Rower.objects.create(user=self.u,gdproptin=True, +> gdproptindate=timezone.now(), +> rowerplan='coach', +> ) +! self.nu = datetime.datetime.now() + +! def test_upload_view_notloggedin(self): +! response = self.c.post('/rowers/workout/upload/',follow=True) + + +! self.assertRedirects(response, expected_url='/login/?next=/rowers/workout/upload/', +! status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +> def test_upload_view_sled(self): +! self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/testdata.csv' +! f = open(filename,'rb') +> file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) +> response = self.c.post('/rowers/workout/upload/', form_data, follow=True) + +> f.close() + +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +> response = self.c.get('/rowers/workout/1/', form_data, follow=True) +! self.assertEqual(response.status_code, 200) + +! response = self.c.get('/rowers/workout/1/edit', form_data, follow=True) +> self.assertEqual(response.status_code, 200) + + +> response = self.c.get('/rowers/workout/1/histo', form_data, follow=True) +! self.assertEqual(response.status_code, 200) + +> form_data = { +> 'name':'aap', +> 'date':'2016-11-05', +> 'starttime':'09:07:14', +> 'timezone':'Europe/Berlin', +> 'duration':'1:00:00.5', +> 'distance':'15000', +> 'weightcategory':'hwt', +> 'adaptiveclass':'PR1', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'private':True, +> 'notes':'noot mies', +> } +> form = WorkoutForm(data=form_data) +! self.assertTrue(form.is_valid()) +> response = self.c.post('/rowers/workout/1/edit', form_data, follow=True) +> self.assertEqual(response.status_code, 200) + + +> w = Workout.objects.get(id=1) +> f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + + + + +> def test_upload_view_notloggedin(self): +! response = self.c.post('/rowers/workout/upload/',follow=True) + + +> self.assertRedirects(response, expected_url='/login/?next=/rowers/workout/upload/', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +> def test_upload_view_sled_negativetime(self): +! self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/tim.csv' +> f = open(filename,'rb') +> file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_C2':False, +> 'upload_to_Strava':False, +> 'upload_to_SportTracks':False, +> 'upload_to_RunKeeper':False, +> 'upload_to_MapMyFitness':False, +> 'plottype':'timeplot', +> 'file': f, +> 'makeprivate':False, +> 'landingpage':'workout_edit_view', +> } + +> form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) + +! f.close() + +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +> response = self.c.get('/rowers/workout/1/', form_data, follow=True) +! self.assertEqual(response.status_code, 200) + + +! w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +! try: +> os.remove(f_to_be_deleted+'.gz') +! except WindowsError: +! pass + + + + +! def test_upload_view_sled_noname(self): +! self.c.login(username='john',password='koeinsloot') + +! filename = 'rowers/tests/testdata/testdata.csv' +! f = open(filename,'rb') +! file_data = {'file': f} +! form_data = { +! 'title':'', +! 'workouttype':'rower', +! 'boattype':'1x', +! 'notes':'aap noot mies', +! 'make_plot':False, +! 'upload_to_c2':False, +! 'plottype':'timeplot', +! 'file': f, +! } + +! form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) + +! f.close() + +! self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +! status_code=302,target_status_code=200) + +! self.assertEqual(response.status_code, 200) + +! w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +! try: +! os.remove(f_to_be_deleted+'.gz') +! except WindowsError: +! pass + +! def test_upload_view_logcard(self): +! self.c.login(username='john',password='koeinsloot') + +! filename = 'rowers/tests/testdata/logcard.csv' +! f = open(filename,'rb') +> file_data = {'file': f} +> form_data = { +> 'title':'', +> 'workouttype':'rower', +> 'boattype': '1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +> response = self.c.post('/rowers/workout/upload/', form_data, follow=True) + +! f.close() + +> self.assertRedirects(response, +> expected_url='/rowers/workout/upload/', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + + + + +> def test_upload_view_TCX_CN(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/crewnerddata.tcx' +! f = open(filename,'rb') +! file_data = {'file': f} + +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +> response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +> f.close() +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +> filename = 'rowers/tests/testdata/crewnerddata.CSV' +> f = open(filename,'rb') +> file_data = {'file': f} +> form_data = {} +! form = CNsummaryForm(form_data,file_data) + +> response = self.c.post('rowers/workout/1/crewnerdsummary', +> form_data, +> follow=True) + +> f.close() + +! self.assertEqual(response.status_code, 200) +! w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +! try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +! pass + +> def test_upload_view_TCX_SpeedCoach2a(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/Speedcoach2example.csv' +> f = open(filename,'rb') +> file_data = {'file': f} + +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +> f.close() +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +! w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +! try: +! os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + +> def test_upload_view_TCX_SpeedCoach2b(self): +> self.c.login(username='john',password='koeinsloot') + +! filename = 'rowers/tests/testdata/Speedcoach2example.csv' +> f = open(filename,'rb') +> file_data = {'file': f} + +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +> response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! f.close() +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +> w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +! try: +! os.remove(f_to_be_deleted+'.gz') +! except WindowsError: +! pass + + + +> def test_upload_view_TCX_SpeedCoach2c(self): +> self.c.login(username='john',password='koeinsloot') + +! filename = 'rowers/tests/testdata/speedcoach3test3.csv' +> f = open(filename,'rb') +> file_data = {'file': f} + +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +> response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! f.close() +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +> w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +! try: +! os.remove(f_to_be_deleted+'.gz') +! except WindowsError: +! pass + + +! def test_upload_view_SpeedCoach2v127(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/SpeedCoach2Linkv1.27.csv' +! f = open(filename,'rb') +> file_data = {'file': f} + +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +> response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +> f.close() +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +> w = Workout.objects.get(id=1) +> f_to_be_deleted = w.csvfilename +! try: +! os.remove(f_to_be_deleted+'.gz') +! except WindowsError: +! pass + + + +> def test_upload_view_SpeedCoach2v127intervals(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/SpeedCoach2Link_interval.csv' +> f = open(filename,'rb') +> file_data = {'file': f} + +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +> f.close() +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) + +! self.assertEqual(response.status_code, 200) + +! w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +! except WindowsError: +> pass + + + +> def test_upload_view_TCX_NoHR(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/NoHR.tcx' +> f = open(filename,'rb') +> file_data = {'file': f} + +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +> response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! f.close() +! self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +! status_code=302,target_status_code=200) + +> self.assertEqual(response.status_code, 200) + +! w = Workout.objects.get(id=1) +> f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + + +> def test_upload_view_TCX_CN(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/rowinginmotionexample.tcx' +> f = open(filename,'rb') +! file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'water', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +! status_code=302,target_status_code=200) +> self.assertEqual(response.status_code, 200) + +! w = Workout.objects.get(id=1) +> f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + + +> def test_upload_view_RP(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/RP_testdata.csv' +> f = open(filename,'rb') +! file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +! status_code=302,target_status_code=200) +! self.assertEqual(response.status_code, 200) + +> w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + + +> def test_upload_view_Mystery(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/mystery.csv' +> f = open(filename,'rb') +> file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +! status_code=302,target_status_code=200) +> self.assertEqual(response.status_code, 200) + +! w = Workout.objects.get(id=1) +> f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + + +> def test_upload_view_RP_interval(self): +> self.c.login(username='john',password='koeinsloot') + +> filename = 'rowers/tests/testdata/RP_interval.csv' +> f = open(filename,'rb') +! file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) +> self.assertEqual(response.status_code, 200) + +> w = Workout.objects.get(id=1) +> f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + + + +> def test_upload_view_sled_desktop(self): +> self.c.login(username='john',password='koeinsloot') + +! filename = 'rowers/tests/testdata/painsled_desktop_example.csv' +! f = open(filename,'rb') +> file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +! form = DocumentsForm(form_data,file_data) + +> response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +> self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +> status_code=302,target_status_code=200) +> self.assertEqual(response.status_code, 200) + +> w = Workout.objects.get(id=1) +> f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + +> def test_upload_view_sled_ergdata(self): +> self.c.login(username='john',password='koeinsloot') + +! filename = 'rowers/tests/testdata/ergdata_example.csv' +! f = open(filename,'rb') +> file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +! form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +! status_code=302,target_status_code=200) +! self.assertEqual(response.status_code, 200) + +! w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +! try: +! os.remove(f_to_be_deleted+'.gz') +! except WindowsError: +! pass + +! def test_upload_view_sled_boatcoach(self): +! self.c.login(username='john',password='koeinsloot') + +! filename = 'rowers/tests/testdata/boatcoach.csv' +! f = open(filename,'rb') +! file_data = {'file': f} +! form_data = { +! 'title':'test', +! 'workouttype':'rower', +! 'boattype':'1x', +! 'notes':'aap noot mies', +! 'make_plot':False, +! 'upload_to_c2':False, +! 'plottype':'timeplot', +! 'file': f, +! } + +! form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +! status_code=302,target_status_code=200) +! self.assertEqual(response.status_code, 200) + +> w = Workout.objects.get(id=1) +> f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + +> def test_upload_view_sled_ergstick(self): +> self.c.login(username='john',password='koeinsloot') + +! filename = 'rowers/tests/testdata/ergstick.csv' +> f = open(filename,'rb') +> file_data = {'file': f} +> form_data = { +> 'title':'test', +> 'workouttype':'rower', +> 'boattype':'1x', +> 'notes':'aap noot mies', +> 'make_plot':False, +> 'upload_to_c2':False, +> 'plottype':'timeplot', +> 'file': f, +> } + +> form = DocumentsForm(form_data,file_data) + +! response = self.c.post('/rowers/workout/upload/', form_data, follow=True) +! self.assertRedirects(response, expected_url='/rowers/workout/1/edit', +! status_code=302,target_status_code=200) +! self.assertEqual(response.status_code, 200) + +! w = Workout.objects.get(id=1) +! f_to_be_deleted = w.csvfilename +> try: +> os.remove(f_to_be_deleted+'.gz') +> except WindowsError: +> pass + + + # def test_upload_view_FIT_SpeedCoach2a(self): + # self.c.login(username='john',password='koeinsloot') + + # filename = 'rowers/tests/testdata/3x250m.fit' + # with open(filename,'rb') as f: + + # file_data = {'file': f} + + # form_data = { + # 'title':'test', + # 'workouttype':'water', + # 'boattype':'1x', + # 'notes':'aap noot mies', + # 'make_plot':False, + # 'upload_to_c2':False, + # 'plottype':'timeplot', + # 'file': f, + # } + + # form = DocumentsForm(form_data,file_data) + + # response = self.c.post('/rowers/workout/upload/', + # form_data, follow=True, + # format='multipart') + # f.close() + # self.assertRedirects(response, expected_url='/rowers/workout/1/edit', + # status_code=302,target_status_code=200) + + # self.assertEqual(response.status_code, 200) + + # w = Workout.objects.get(id=1) + # f_to_be_deleted = w.csvfilename + # os.remove(f_to_be_deleted+'.gz') + + #@pytest.mark.django_db +> class URLTests(TestCase): +> def setUp(self): +> redis_connection.publish('tasks','KILL') +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot', +> ) +> r = Rower.objects.create(user=u,rowerplan='coach') +> self.c = Client() +> self.c.login(username='john',password='koeinsloot') + +> self.nu = datetime.datetime.now() +> filename = 'rowers/tests/testdata/testdata.csv' +> self.wotw = Workout.objects.create(name='testworkout', +> workouttype='water', +> user=r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=self.nu.strftime('%H:%M:%S'), +> duration="0:55:00",distance=8000, +> csvfilename=filename) + +> self.wote = Workout.objects.create(name='testworkout', +> workouttype='Indoor Rower', +> user=r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=self.nu.strftime('%H:%M:%S'), +> duration="0:55:00",distance=8000, +> csvfilename=filename) + +> powerperc = 100*np.array([r.pw_ut2, +> r.pw_ut1, +> r.pw_at, +> r.pw_tr,r.pw_an])/r.ftp + + +> self.hrdata = { +> 'hrmax':r.max, +> 'hrut2':r.ut2, +> 'hrut1':r.ut1, +> 'hrat':r.at, +> 'hrtr':r.tr, +> 'hran':r.an, +> 'ftp':r.ftp, +> 'powerperc':serialize_list(powerperc), +> 'powerzones':serialize_list(r.powerzones), +> } + +> urlstotest = [ +> '/rowers/400/', +> '/rowers/403/', +> '/rowers/404/', +> '/rowers/500/', +> '/rowers/502/', +> '/rowers/1/list-workouts/', +> '/rowers/1/list-workouts/2016-01-01/2016-12-31', +> '/rowers/1/ote-bests/', +> '/rowers/1/ote-bests2/2016-01-01/2016-12-31', +> '/rowers/about', +> '/rowers/addmanual/', +> '/rowers/agegroupcp/30', +> '/rowers/agegroupcp/30/1', +> '/rowers/agegrouprecords/male/hwt', +> '/rowers/agegrouprecords/male/hwt/2000m', +> '/rowers/agegrouprecords/male/hwt/2000min', +> '/rowers/ajax_agegroup/45/hwt/male/1', +> '/rowers/analysis/', +> '/rowers/analysis/user/1', +> '/rowers/brochure', +> '/rowers/courses/upload', +> '/rowers/createplan/', +> '/rowers/createplan/user/1/', +> '/rowers/cumstats/', +> '/rowers/cumstats/2016-01-01/2016-12-31', +> '/rowers/cumstats/user/1', +> '/rowers/cumstats/user/1/2016-01-01/2016-12-31', +> '/rowers/developers', +> '/rowers/email/', +> '/rowers/email/thankyou/', +> '/rowers/fitness-progress/', +> '/rowers/fitness-progress/user/1', +> '/rowers/fitness-progress/user/1/rower', +> '/rowers/flexall/', +> '/rowers/flexall/spm/hr/None/', +> '/rowers/flexall/spm/hr/None/2016-01-01/2016-12-31/', +> '/rowers/flexall/spm/hr/None/2016-01-01/2016-12-31/user/1', +> '/rowers/flexall/user/1/', +> '/rowers/flexalldata/', +> '/rowers/help', +> '/rowers/histo/', +> '/rowers/histo/user/1', +> '/rowers/histo/user/1/2016-01-01/2016-12-31', +> '/rowers/histodata', +> '/rowers/job-kill/1', +> '/rowers/jobs-status/', +> '/rowers/laboratory/', +> '/rowers/laboratory/user/1', +> '/rowers/legal', +> '/rowers/list-courses/', +> '/rowers/list-graphs/', +> '/rowers/list-jobs/', +> '/rowers/list-workouts/', +> '/rowers/list-workouts/2016-01-01/2016-12-31', +> '/rowers/list-workouts/2016-01-01/2016-12-31/user/1/', +> '/rowers/list-workouts/ranking', +> '/rowers/list-workouts/user/1/', +> '/rowers/me/calcdps/', +> '/rowers/me/edit/', +> '/rowers/me/edit/user/1', +> '/rowers/me/exportsettings/', +> '/rowers/me/exportsettings/user/1', +> '/rowers/me/favoritecharts/', +> '/rowers/me/favoritecharts/user/1', +> '/rowers/me/invitation/', +> '/rowers/me/preferences/', +> '/rowers/me/preferences/user/1', +> '/rowers/me/request/', +> '/rowers/me/teams/', +> '/rowers/me/workflowconfig2/', +> '/rowers/me/workflowconfig2/user/1', +> '/rowers/me/workflowdefault', +> '/rowers/multi-compare', +> '/rowers/ote-bests/', +> '/rowers/ote-bests/2016-01-01/2016-12-31', +> '/rowers/ote-bests/user/1', +> '/rowers/ote-bests/user/1/2016-01-01/2016-12-31', +> '/rowers/ote-bests2/', +> '/rowers/ote-bests2/2016-01-01/2016-12-31', +> '/rowers/ote-bests2/user/1', +> '/rowers/ote-ranking/', +> '/rowers/ote-ranking/2016-01-01/2016-12-31', +> '/rowers/ote-ranking/user/1/', +> '/rowers/ote-ranking/user/1/2016-01-01/2016-12-31', +> '/rowers/otw-bests/', +> '/rowers/otw-bests/2016-01-01/2016-12-31', +> '/rowers/otw-bests/user/1/2016-01-01/2016-12-31', +> '/rowers/partners', +> '/rowers/physics', +> '/rowers/planrequired', +> '/rowers/promembership', +> '/rowers/register', +> '/rowers/register/thankyou/', +> '/rowers/sessions/', +> '/rowers/sessions/2016-01-01/2016-12-31', +> '/rowers/sessions/2016-01-01/2016-12-31/user/1', +> '/rowers/sessions/coach/', +> '/rowers/sessions/coach/user/1/', +> '/rowers/sessions/create/', +> '/rowers/sessions/create/user/1', +> '/rowers/sessions/manage/', +> '/rowers/sessions/manage/user/1/', +> '/rowers/sessions/multiclone/', +> '/rowers/sessions/multiclone/user/1/', +> '/rowers/sessions/multicreate/', +> '/rowers/sessions/multicreate/user/1/', +> '/rowers/sessions/print/', +> '/rowers/sessions/print/user/1', +> '/rowers/sessions/teamcreate/', +> '/rowers/sessions/user/1', +> '/rowers/team-compare-select/', +> '/rowers/team-compare-select/workout/1', +> '/rowers/team-compare-select/2016-01-01/2016-12-31', +> '/rowers/test-job/2', +> '/rowers/test-job2/2', +> '/rowers/test_callback', +> '/rowers/updatefitness', +> '/rowers/updatefitness/rower', +> '/rowers/updatefitness/rower/50', +> '/rowers/user-boxplot', +> '/rowers/user-boxplot-data', +> '/rowers/user-boxplot-select/', +> '/rowers/user-boxplot-select/user/1/', +> '/rowers/user-boxplot/user/1', +> '/rowers/user-multiflex-data', +> '/rowers/user-multiflex-select/', +> '/rowers/user-multiflex-select/2016-01-01/2016-12-31', +> '/rowers/user-multiflex-select/user/1/', +> '/rowers/user-multiflex-select/user/1/2016-01-01/2016-12-31', +> '/rowers/user-multiflex/', +> '/rowers/user-multiflex/user/1', +> '/rowers/workout/1/', +> '/rowers/workout/1/adddistanceplot', +> '/rowers/workout/1/adddistanceplot2', +> '/rowers/workout/1/addotwpowerplot', +> '/rowers/workout/1/addpiechart', +> '/rowers/workout/1/addpowerpiechart', +> '/rowers/workout/1/addstatic', +> '/rowers/workout/1/addstatic/3', +> '/rowers/workout/1/addtimeplot', +> '/rowers/workout/1/addtimeplot2', +> '/rowers/workout/1/comment', +> '/rowers/workout/1/darkskywind', +> '/rowers/workout/1/data', +> '/rowers/workout/1/edit', +> '/rowers/workout/1/editintervals', +> '/rowers/workout/1/flexchart', +> '/rowers/workout/1/flexchart/spm/hr/None', +> '/rowers/workout/1/flexchart/spm/hr/None/scatter', +> '/rowers/workout/1/flexchart/spm/hr/None/scatter/', +> '/rowers/workout/1/forcecurve', +> '/rowers/workout/1/get-testscript', +> '/rowers/workout/1/get-thumbnails', +> '/rowers/workout/1/histo', +> '/rowers/workout/1/image', +> '/rowers/workout/1/instroke', +> '/rowers/workout/1/interactiveotwplot', +> '/rowers/workout/1/map', +> '/rowers/workout/1/otwsetpower', +> '/rowers/workout/1/recalcsummary/', +> '/rowers/workout/1/restore', +> '/rowers/workout/1/smoothenpace', +> '/rowers/workout/1/split', +> '/rowers/workout/1/stats', +> '/rowers/workout/1/stream', +> '/rowers/workout/1/task', +> '/rowers/workout/1/test_strokedata', +> '/rowers/workout/1/toggle-ranking', +> '/rowers/workout/1/undosmoothenpace', +> '/rowers/workout/1/unsubscribe', +> '/rowers/workout/1/updatecp', +> '/rowers/workout/1/view', +> '/rowers/workout/1/wind', +> '/rowers/workout/1/workflow', +> '/rowers/workout/compare/1/2016-01-01/2016-12-31', +> '/rowers/workout/fusion/1/', +> '/rowers/workout/fusion/1/2016-01-01/2016-12-31', +> '/rowers/workout/upload/', +> '/rowers/workout/upload/team/', +> '/rowers/workouts-join', +> '/rowers/workouts-join-select/', +> '/rowers/workouts-join-select/2016-01-01/2016-12-31', +> ] + +! lijst = [] +> for url in urlstotest: +> lijst.append( +> (url,200) +> ) + +> @parameterized.expand(lijst) +> def test_url_generator(self,url,expected): +> response = self.c.get(url,follow=True) +> if response.status_code != expected: +> print response.status_code +! self.assertEqual(response.status_code, +! expected, +! msg=url+' response status code not 200') + + + #@pytest.mark.django_db +> class subroutinetests(TestCase): +> def setUp(self): +> redis_connection.publish('tasks','KILL') +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +! r = Rower.objects.create(user=u) +! nu = datetime.datetime.now() +> filename = 'rowers/tests/testdata/testdata.csv' +> self.w = Workout.objects.create(name='testworkout', +> workouttype='water', +> user=r,date=nu.strftime('%Y-%m-%d'), +> starttime=nu.strftime('%H:%M:%S'), +> duration="0:55:00",distance=8000, +> csvfilename=filename) + + +> def c2stuff(self): +> data = c2stuff.createc2workoutdata(self.w) +! jsond = json.dumps(data) +! data = c2stuff.createc2workoutdata_as_splits(w) +> jsond = json.dumps(data) + + + + #@pytest.mark.django_db +> class PlotTests(TestCase): +! def setUp(self): +! redis_connection.publish('tasks','KILL') +> u = User.objects.create_user('john', +> 'sander@ds.ds', +> 'koeinsloot') +! r = Rower.objects.create(user=u) +! self.nu = datetime.datetime.now() +> filename = 'rowers/tests/testdata/testdata.csv' +> self.wotw = Workout.objects.create(name='testworkout', +> workouttype='water', +> user=r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=self.nu.strftime('%H:%M:%S'), +> duration="0:55:00",distance=8000, +> csvfilename=filename) + +> self.wote = Workout.objects.create(name='testworkout', +> workouttype='Indoor Rower', +> user=r,date=self.nu.strftime('%Y-%m-%d'), +> starttime=self.nu.strftime('%H:%M:%S'), +> duration="0:55:00",distance=8000, +> csvfilename=filename) + + # timestr = strftime("%Y%m%d-%H%M%S") + # imagename = f1+timestr+'.png' + # fullpathimagename = 'static/plots/'+imagename +> powerperc = 100*np.array([r.pw_ut2, +> r.pw_ut1, +> r.pw_at, +> r.pw_tr,r.pw_an])/r.ftp + + +> self.hrdata = { +> 'hrmax':r.max, +> 'hrut2':r.ut2, +> 'hrut1':r.ut1, +> 'hrat':r.at, +> 'hrtr':r.tr, +> 'hran':r.an, +> 'ftp':r.ftp, +> 'powerperc':serialize_list(powerperc), +> 'powerzones':serialize_list(r.powerzones), +> } + + +! def test_ote_plots(self): +! w = self.wote +> f1 = 'testdata.csv'[:-4] +> timestr = strftime("%Y%m%d-%H%M%S") +> imagename = f1+timestr+'.png' +> fullpathimagename = 'static/plots/'+imagename + # make plot - asynchronous task +> plotnr = 1 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 1 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 2 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 3 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 4 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +! except WindowsError: +> pass + +> plotnr = 5 +! if (w.workouttype=='water'): +> plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +> pass + +> plotnr = 6 +! if (w.workouttype=='water'): +> plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +> pass + +> plotnr = 7 +! if (w.workouttype=='water'): +> plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +> pass + +> plotnr = 8 +! if (w.workouttype=='water'): +> plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +> pass + +> plotnr = 13 +! if (w.workouttype=='water'): +> plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +> pass + +> def test_otw_plots(self): +! w = self.wotw +> f1 = 'testdata.csv'[:-4] +> timestr = strftime("%Y%m%d-%H%M%S") +> imagename = f1+timestr+'.png' +> fullpathimagename = 'static/plots/'+imagename + # make plot - asynchronous task +> plotnr = 1 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 1 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 2 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 3 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 4 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +> res = handle_makeplot(f1,w.csvfilename, +> w.name,self.hrdata,plotnr,imagename) +> i = GraphImage(workout=w,creationdatetime=self.nu, +> filename=fullpathimagename) +> try: +> os.remove(fullpathimagename) +> except WindowsError: +> pass + +> plotnr = 5 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +! res = handle_makeplot(f1,w.csvfilename, +! w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +! pass + +! plotnr = 6 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +! res = handle_makeplot(f1,w.csvfilename, +! w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +! pass + +! plotnr = 7 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +! res = handle_makeplot(f1,w.csvfilename, +! w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +! pass + +! plotnr = 8 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +! res = handle_makeplot(f1,w.csvfilename, +! w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +! pass + +! plotnr = 9 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +! res = handle_makeplot(f1,w.csvfilename, +! w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +! pass + +! plotnr = 13 +! if (w.workouttype=='water'): +! plotnr = plotnr+3 + +! res = handle_makeplot(f1,w.csvfilename, +! w.name,self.hrdata,plotnr,imagename) +! i = GraphImage(workout=w,creationdatetime=self.nu, +! filename=fullpathimagename) +! try: +! os.remove(fullpathimagename) +! except WindowsError: +! pass