Private
Public Access
1
0
Files
rowsandall/rowers/tests.py
2018-10-25 15:16:26 +02:00

2522 lines
78 KiB
Python

#from __future__ import print_function
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 .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 dataprep import delete_strokedata
from redis import StrictRedis
redis_connection = StrictRedis()
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)
def mocked_requests(*args, **kwargs):
with open('rowers/testdata/c2jsonworkoutdata.txt','r') as infile:
c2workoutdata = json.load(infile)
with open('rowers/testdata/c2jsonstrokedata.txt','r') as infile:
c2strokedata = json.load(infile)
c2workoutlist = json.load(open('rowers/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/testdata/stravaworkoutlist.txt'))
sporttracksworkoutlist = json.load(open('rowers/testdata/sporttracksworkouts.txt'))
rkworkoutlistjson = json.load(open('rowers/testdata/rkworkoutslist.txt','r'))
uaworkoutlistjson = json.load(open('rowers/testdata/uaworkoutlist.txt','r'))
stravasummaryjson = json.load(open('rowers/testdata/stravaworkoutsummary.txt','r'))
stravatimejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
stravavelojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r'))
stravadistancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r'))
stravalatlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
stravahrjson = json.load(open('rowers/testdata/stravahrtestdata.txt','r'))
stravaspmjson = json.load(open('rowers/testdata/stravaspmtestdata.txt','r'))
uapostworkoutjson = json.load(open('rowers/testdata/uapostworkoutresponse.txt','r'))
tpuploadresponse = json.load(open('rowers/testdata/tpuploadresponse.txt','r'))
stravastreamjson = {
'time':stravatimejson,
'velocity_smooth':stravavelojson,
'distance':stravadistancejson,
'latlng':stravalatlongjson,
'heartrate':stravahrjson,
'cadence':stravaspmjson,
}
ststrokesjson = json.load(open('rowers/testdata/sporttracksstrokedata.txt','r'))
rkstrokesjson = json.load(open('rowers/testdata/rkstrokes.txt','r'))
uastrokesjson = json.load(open('rowers/testdata/uastrokes.txt','r'))
uauserjson = json.load(open('rowers/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()
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 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)
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)
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/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='On-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_post):
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)
def test_c2_list(self, mock_get):
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/testdata/c2stroketestdata.txt','r') as infile:
res = json.load(infile)
strokedata = pd.DataFrame.from_dict(res['data'])
with open('rowers/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/testdata/c2strokedatanohr.txt','r') as infile:
res = json.load(infile)
strokedata = pd.DataFrame.from_dict(res['data'])
with open('rowers/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 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)
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/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='On-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/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/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)
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/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='On-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)
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/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='On-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)
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/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='On-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)
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))
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',
'sex':'male',
'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/register/thankyou/',
status_code=302,target_status_code=200)
from django_mailbox.models import Mailbox,MessageAttachment,Message
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/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):
os.remove(path)
@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())
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('rowers/testdata/emails'):
m = Message(mailbox=workoutsbox,
from_header = u.email,
subject = filename,
body="""
---
chart: time
workouttype: water
boattype: 4x
...
""")
m.save()
a2 = 'media/mailbox_attachments/'+filename
copyfile('rowers/testdata/emails/'+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):
os.remove(path)
def test_emailprocessing(self):
out = StringIO()
call_command('processemail', stdout=out,testing=True)
self.assertIn('Successfully processed email attachments',out.getvalue())
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='On-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)
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='On-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)
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',
'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/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='On-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')
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/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',
'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
os.remove(f_to_be_deleted+'.gz')
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/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_sled_noname(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_logcard(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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/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/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_TCX_SpeedCoach2a(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_TCX_SpeedCoach2b(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_TCX_SpeedCoach2c(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_SpeedCoach2v127(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_SpeedCoach2v127intervals(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_TCX_NoHR(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_TCX_CN(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_RP(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_Mystery(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_RP_interval(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_sled_desktop(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_sled_ergdata(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_sled_boatcoach(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
def test_upload_view_sled_ergstick(self):
self.c.login(username='john',password='koeinsloot')
filename = 'rowers/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
os.remove(f_to_be_deleted+'.gz')
# def test_upload_view_FIT_SpeedCoach2a(self):
# self.c.login(username='john',password='koeinsloot')
# filename = 'rowers/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')
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/testdata/testdata.csv'
self.wotw = Workout.objects.create(name='testworkout',
workouttype='On-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')
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/testdata/testdata.csv'
self.w = Workout.objects.create(name='testworkout',
workouttype='On-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)
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/testdata/testdata.csv'
self.wotw = Workout.objects.create(name='testworkout',
workouttype='On-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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)
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)
os.remove(fullpathimagename)