Private
Public Access
1
0

nk api update

This commit is contained in:
Sander Roosendaal
2021-04-15 14:39:10 +02:00
parent ce5ec9a632
commit 508d5a76b7
10 changed files with 183 additions and 1216 deletions

View File

@@ -972,7 +972,7 @@ def mocked_requests(*args, **kwargs):
return MockResponse(nkstrokedata,200)
if nkworkoutlisttester.match(args[0]):
params = kwargs.pop('params',{})
if 'startTime' in params and params['startTime'] == 1267136372998:
if 'after' in params and params['after'] == 1267136372998:
return MockResponse(nkimpellerworkoutlist,200)
return MockResponse(nkworkoutlist,200)

View File

@@ -35,7 +35,8 @@ from rowers.views import c2_open, multi_compare_view
from rowers.forms import (
DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail,
ChartParamChoiceForm,WorkoutMultipleCompareForm,
BoxPlotChoiceForm)
BoxPlotChoiceForm,PerformanceManagerForm,
)
import rowers.plots as plots
import rowers.interactiveplots as iplots
import datetime

View File

@@ -1512,3 +1512,133 @@ class WorkoutStatsTestNew(TestCase):
response = self.c.post('/rowers/user-analysis-select/',form_data)
self.assertEqual(response.status_code,200)
class MarkerPerformanceTest(TestCase):
def setUp(self):
self.u = UserFactory()
self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'],
gdproptin=True,surveydone=True,
gdproptindate=timezone.now(),
rowerplan='coach')
self.c = Client()
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
self.factory = RequestFactory()
self.password = faker.word()
self.u.set_password(self.password)
self.u.save()
# need a 2k, 5k, 1h row
self.werg2k = WorkoutFactory(
user=self.r,
duration=datetime.time(hour=0,minute=7,second=0),
distance=2000,
workouttype='rower',
rankingpiece=True,
)
# need a 2k, 5k, 1h row
self.werg5k = WorkoutFactory(
user=self.r,
duration=datetime.time(hour=0,minute=18,second=0),
distance=5000,
workouttype='rower',
rankingpiece=True,
)
# need a 2k, 5k, 1h row
self.werg1h = WorkoutFactory(
user=self.r,
duration=datetime.time(hour=1,minute=0,second=0),
distance=15000,
workouttype='rower',
rankingpiece=True,
)
def tearDown(self):
for workout in self.user_workouts:
try:
os.remove(workout.csvfilename)
except (IOError, FileNotFoundError, OSError):
pass
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db')
def test_create_marker_workouts(self, mocked_sqlalchemy,
mocked_getsmallrowdata_db):
login = self.c.login(username=self.u.username,password=self.password)
self.assertTrue(login)
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=3)).date()
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=3)).date()
url = reverse('create_marker_workouts_view')
response = self.c.get(url, follow=True)
expected_url = reverse('goldmedalscores_view',kwargs={'userid':self.u.id})
self.assertRedirects(response, expected_url=expected_url, status_code=302,target_status_code=200)
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db')
def test_performancemanager_view(self, mocked_sqlalchemy,
mocked_getsmallrowdata_db):
login = self.c.login(username=self.u.username,password=self.password)
self.assertTrue(login)
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=3)).date()
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=3)).date()
url = reverse('performancemanager_view')
response = self.c.get(url)
self.assertEqual(response.status_code,200)
form_data = {
'startdate':startdate.strftime("%Y-%m-%d"),
'enddate': enddate.strftime("%Y-%m-%d"),
'doform': True,
'dofatigue': True,
'metricchoice':'rscore',
'modelchoice': 'coggan',
'daterange': '',
}
form = PerformanceManagerForm(form_data)
if not form.is_valid():
print(form.errors)
self.assertTrue(form.is_valid())
response = self.c.post(url,form_data)
self.assertEqual(response.status_code,200)
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db')
def test_ranking_view2(self, mocked_sqlalchemy,
mocked_getsmallrowdata_db):
login = self.c.login(username=self.u.username,password=self.password)
self.assertTrue(login)
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=3)).date()
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=3)).date()
url = reverse('rankings_view2')
response = self.c.get(url)
self.assertEqual(response.status_code,200)
form_data = {
'startdate':startdate.strftime("%Y-%m-%d"),
'enddate': enddate.strftime("%Y-%m-%d"),
'doform': True,
'dofatigue': True,
'metricchoice':'rscore',
'modelchoice': 'coggan',
'daterange': '',
}
form = DateRangeForm(form_data)
if not form.is_valid():
print(form.errors)
self.assertTrue(form.is_valid())
response = self.c.post(url,form_data)
self.assertEqual(response.status_code,200)

View File

@@ -13,99 +13,6 @@ from rowers.utils import calculate_age
import rowers.dataprep as dataprep
@override_settings(TESTING=True)
class OTWCPChartTest(TestCase):
def setUp(self):
self.u = UserFactory()
self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'],
gdproptin=True,surveydone=True,sex='male',
weightcategory='hwt',
gdproptindate=timezone.now(),
rowerplan='coach')
r = self.u.rower
age = calculate_age(r.birthdate)
self.c = Client()
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
self.factory = RequestFactory()
self.password = faker.word()
self.u.set_password(self.password)
self.u.save()
self.lastdate = datetime.date(year=1970,month=1,day=1)
for filename in os.listdir(u'rowers/tests/testdata/otwcp'):
a2 = 'rowers/tests/testdata/otwcp/temp/'+filename
try:
copy(u'rowers/tests/testdata/otwcp/'+filename,a2)
row = rdata(a2)
totaldist = row.df['cum_dist'].max()
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
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)
duration = datetime.time(hour=hours,minute=minutes,second=seconds)
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
w = Workout.objects.create(name=faker.word(),
workouttype='water',
user = self.r,
starttime = workoutstarttime,
date = workoutdate,
duration = duration,
distance = totaldist,
csvfilename = a2,
rankingpiece = True)
w.save()
if row.rowdatetime.date() > self.lastdate:
self.lastdate = row.rowdatetime.date()
except:
pass
def tearDown(self):
try:
for filename in os.listdir('rowers/tests/testdata/otwcp/temp'):
path = os.path.join('rowers/tests/testdata/otwcp/temp/',filename)
if not os.path.isdir(path):
try:
os.remove(path)
except (IOError,FileNotFoundError,OSError):
pass
except (IOError,FileNotFoundError,OSError):
pass
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_cpraw)
@patch('rowers.dataprep.getcpdata_sql',side_effect=mocked_getcpdata_sql)
def test_otwrankingpieces(self, mocked_cpraw,mocked_getcpdata_sql):
workouts = Workout.objects.filter(workouttype='water',
rankingpiece=True,user=self.r)
delta, cpvalue, avgpower = dataprep.fetchcp(self.r,workouts)
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_cpraw)
@patch('rowers.dataprep.getcpdata_sql',side_effect=mocked_getcpdata_sql)
def test_otwrankingpieces(self, mocked_cpraw,mocked_getcpdata_sql):
login = self.c.login(username=self.u.username,password=self.password)
self.assertTrue(login)
url = '/rowers/otw-bests/'
response = self.c.get(url)
self.assertEqual(response.status_code, 200)
@override_settings(TESTING=True)
class CPChartTest(TestCase):
def setUp(self):

View File

@@ -136,18 +136,18 @@ class URLTests(TestCase):
'/rowers/me/workflowconfig2/user/1/',
'/rowers/me/workflowdefault/',
# '/rowers/multi-compare/',
'/rowers/ote-bests/',
# '/rowers/ote-bests/',
# '/rowers/ote-bests/2016-01-01/2016-12-31/',
'/rowers/ote-bests/user/1/',
# '/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/',
# '/rowers/ote-ranking/2016-01-01/2016-12-31/',
'/rowers/ote-ranking/user/1/',
# '/rowers/ote-ranking/user/1/',
# '/rowers/ote-ranking/user/1/2016-01-01/2016-12-31/',
'/rowers/otw-bests/',
# '/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/',

View File

@@ -34,12 +34,9 @@
33,35,kill_async_job,kill job,TRUE,302,basic,200,302,basic,200,302,coach,200,302,FALSE,FALSE,FALSE,FALSE,FALSE,
34,36,post_progress,post progress,TRUE,200,basic,200,302,basic,200,302,coach,200,302,FALSE,FALSE,FALSE,FALSE,FALSE,
35,37,graphs_view,view charts,TRUE,302,basic,200,302,basic,200,302,coach,200,302,FALSE,TRUE,FALSE,TRUE,TRUE,
37,39,rankings_view,view ranking,TRUE,302,pro,200,302,pro,403,302,coach,200,302,FALSE,TRUE,FALSE,TRUE,TRUE,
38,40,rankings_view2,view ranking,TRUE,302,pro,200,302,pro,403,302,coach,200,302,FALSE,TRUE,FALSE,TRUE,TRUE,
39,41,otwrankings_view,view ranking,TRUE,302,pro,200,302,pro,403,302,coach,200,302,FALSE,TRUE,FALSE,TRUE,TRUE,
40,42,oterankings_view,view ranking,TRUE,302,pro,200,302,pro,403,302,coach,200,302,FALSE,TRUE,FALSE,TRUE,TRUE,
41,43,cum_flex,flex all chart,TRUE,200,basic,200,302,basic,200,302,coach,200,302,FALSE,FALSE,FALSE,FALSE,FALSE,
42,44,analysis_view_data,redirects to analysis direct,TRUE,302,pro,302,302,pro,302,302,coach,302,302,FALSE,FALSE,FALSE,TRUE,TRUE,
42,44,analysis_view_data,redirects to analysis direct,TRUE,302,pro,200,302,pro,200,302,coach,200,302,FALSE,FALSE,FALSE,TRUE,TRUE,
43,47,cum_flex_data,flex all chart data (json),TRUE,200,basic,200,302,basic,200,302,coach,200,302,FALSE,FALSE,FALSE,FALSE,FALSE,
44,48,histo,histogram view,TRUE,302,pro,200,302,pro,403,302,coach,200,302,FALSE,TRUE,FALSE,TRUE,TRUE,
45,49,histo_data,histogram data,TRUE,302,pro,200,302,pro,200,302,coach,200,302,FALSE,FALSE,FALSE,TRUE,TRUE,
1 id view function anonymous anonymous_response own own_response own_nonperm member member_response member_nonperm coachee coachee_response coachee_nonperm is_staff userid workoutid dotest realtest kwargs
34 33 35 kill_async_job kill job TRUE 302 basic 200 302 basic 200 302 coach 200 302 FALSE FALSE FALSE FALSE FALSE
35 34 36 post_progress post progress TRUE 200 basic 200 302 basic 200 302 coach 200 302 FALSE FALSE FALSE FALSE FALSE
36 35 37 graphs_view view charts TRUE 302 basic 200 302 basic 200 302 coach 200 302 FALSE TRUE FALSE TRUE TRUE
37 39 rankings_view view ranking TRUE 302 pro 200 302 pro 403 302 coach 200 302 FALSE TRUE FALSE TRUE TRUE
37 38 40 rankings_view2 view ranking TRUE 302 pro 200 302 pro 403 302 coach 200 302 FALSE TRUE FALSE TRUE TRUE
39 41 otwrankings_view view ranking TRUE 302 pro 200 302 pro 403 302 coach 200 302 FALSE TRUE FALSE TRUE TRUE
40 42 oterankings_view view ranking TRUE 302 pro 200 302 pro 403 302 coach 200 302 FALSE TRUE FALSE TRUE TRUE
38 41 43 cum_flex flex all chart TRUE 200 basic 200 302 basic 200 302 coach 200 302 FALSE FALSE FALSE FALSE FALSE
39 42 44 analysis_view_data redirects to analysis direct TRUE 302 pro 302 200 302 pro 302 200 302 coach 302 200 302 FALSE FALSE FALSE TRUE TRUE
40 43 47 cum_flex_data flex all chart data (json) TRUE 200 basic 200 302 basic 200 302 coach 200 302 FALSE FALSE FALSE FALSE FALSE
41 44 48 histo histogram view TRUE 302 pro 200 302 pro 403 302 coach 200 302 FALSE TRUE FALSE TRUE TRUE
42 45 49 histo_data histogram data TRUE 302 pro 200 302 pro 200 302 coach 200 302 FALSE FALSE FALSE TRUE TRUE