Merge branch 'feature/analysistests' into develop
This commit is contained in:
@@ -173,6 +173,11 @@ def mocked_getsmallrowdata_db(*args, **kwargs):
|
||||
|
||||
return df
|
||||
|
||||
def mocked_read_cols_df_sql(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/colsfromdb.csv')
|
||||
|
||||
return df,[]
|
||||
|
||||
def mocked_getsmallrowdata_db_water(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/colsfromdb.csv')
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ from .statements import *
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
from rowers.views import *
|
||||
|
||||
|
||||
class WorkoutCompareTest(TestCase):
|
||||
@@ -696,8 +697,9 @@ class WorkoutCompareTestNew(TestCase):
|
||||
'xparam':'hr',
|
||||
'plotfield':'spm',
|
||||
'yparam':'pace',
|
||||
'yaxis2':'hr',
|
||||
'groupby':'spm',
|
||||
'palette':'monochrome_blue'
|
||||
'palette':'monochrome_blue',
|
||||
'xaxis':'time',
|
||||
'yaxis1':'power',
|
||||
'startdate':startdate,
|
||||
@@ -730,3 +732,405 @@ class WorkoutCompareTestNew(TestCase):
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
class WorkoutBoxPlotTestNew(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='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()
|
||||
|
||||
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_workouts_boxplot(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/user-analysis-select/boxplot/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getsmallrowdata_db)
|
||||
def test_workouts_boxplot_submit(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()
|
||||
|
||||
form_data = {
|
||||
'function':'boxplot',
|
||||
'xparam':'hr',
|
||||
'plotfield':'spm',
|
||||
'yparam':'pace',
|
||||
'groupby':'spm',
|
||||
'palette':'monochrome_blue',
|
||||
'xaxis':'time',
|
||||
'yaxis1':'power',
|
||||
'yaxis2':'hr',
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
'plottype':'scatter',
|
||||
'spmmin':15,
|
||||
'spmmax':55,
|
||||
'workmin':0,
|
||||
'workmax':1500,
|
||||
'includereststrokes':False,
|
||||
'modality':'all',
|
||||
'waterboattype':['1x','2x','4x'],
|
||||
'rankingonly':False,
|
||||
'workouts':[1,2,3]
|
||||
}
|
||||
|
||||
form = AnalysisChoiceForm(form_data)
|
||||
optionsform = AnalysisOptionsForm(form_data)
|
||||
dateform = DateRangeForm(form_data)
|
||||
|
||||
result = form.is_valid()
|
||||
if not result:
|
||||
print(form.errors)
|
||||
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertTrue(optionsform.is_valid())
|
||||
self.assertTrue(dateform.is_valid())
|
||||
|
||||
response = self.c.post('/rowers/user-analysis-select/',form_data)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
class WorkoutHistoTestNew(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='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()
|
||||
|
||||
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_workouts_histo(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/user-analysis-select/histo/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getsmallrowdata_db)
|
||||
def test_workouts_histo_submit(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()
|
||||
|
||||
form_data = {
|
||||
'function':'histo',
|
||||
'xparam':'hr',
|
||||
'plotfield':'spm',
|
||||
'yparam':'pace',
|
||||
'groupby':'spm',
|
||||
'palette':'monochrome_blue',
|
||||
'xaxis':'time',
|
||||
'yaxis1':'power',
|
||||
'yaxis2':'hr',
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
'plottype':'scatter',
|
||||
'spmmin':15,
|
||||
'spmmax':55,
|
||||
'workmin':0,
|
||||
'workmax':1500,
|
||||
'includereststrokes':False,
|
||||
'modality':'all',
|
||||
'waterboattype':['1x','2x','4x'],
|
||||
'rankingonly':False,
|
||||
'workouts':[1,2,3]
|
||||
}
|
||||
|
||||
form = AnalysisChoiceForm(form_data)
|
||||
optionsform = AnalysisOptionsForm(form_data)
|
||||
dateform = DateRangeForm(form_data)
|
||||
|
||||
result = form.is_valid()
|
||||
if not result:
|
||||
print(form.errors)
|
||||
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertTrue(optionsform.is_valid())
|
||||
self.assertTrue(dateform.is_valid())
|
||||
|
||||
response = self.c.post('/rowers/user-analysis-select/',form_data)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
class WorkoutFlexallTestNew(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='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()
|
||||
|
||||
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_workouts_flexall(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/user-analysis-select/flexall/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getsmallrowdata_db)
|
||||
def test_workouts_flexall_submit(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()
|
||||
|
||||
form_data = {
|
||||
'function':'flexall',
|
||||
'xparam':'hr',
|
||||
'plotfield':'spm',
|
||||
'yparam':'pace',
|
||||
'groupby':'spm',
|
||||
'palette':'monochrome_blue',
|
||||
'xaxis':'time',
|
||||
'yaxis1':'power',
|
||||
'yaxis2':'hr',
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
'plottype':'scatter',
|
||||
'spmmin':15,
|
||||
'spmmax':55,
|
||||
'workmin':0,
|
||||
'workmax':1500,
|
||||
'includereststrokes':False,
|
||||
'modality':'all',
|
||||
'waterboattype':['1x','2x','4x'],
|
||||
'rankingonly':False,
|
||||
'workouts':[1,2,3]
|
||||
}
|
||||
|
||||
form = AnalysisChoiceForm(form_data)
|
||||
optionsform = AnalysisOptionsForm(form_data)
|
||||
dateform = DateRangeForm(form_data)
|
||||
|
||||
result = form.is_valid()
|
||||
if not result:
|
||||
print(form.errors)
|
||||
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertTrue(optionsform.is_valid())
|
||||
self.assertTrue(dateform.is_valid())
|
||||
|
||||
response = self.c.post('/rowers/user-analysis-select/',form_data)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
class WorkoutStatsTestNew(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='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()
|
||||
|
||||
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_workouts_stats(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/user-analysis-select/stats/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getsmallrowdata_db)
|
||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect=mocked_read_cols_df_sql)
|
||||
def test_analysis_data(self,
|
||||
mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db,
|
||||
mocked_read_cols_df_sql,
|
||||
):
|
||||
|
||||
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=3)).date()
|
||||
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=3)).date()
|
||||
|
||||
options = {
|
||||
'function':'flexall',
|
||||
'xparam':'hr',
|
||||
'plotfield':'spm',
|
||||
'yparam':'pace',
|
||||
'groupby':'spm',
|
||||
'binsize':1,
|
||||
'ploterrorbars':True,
|
||||
'palette':'monochrome_blue',
|
||||
'xaxis':'time',
|
||||
'yaxis1':'power',
|
||||
'yaxis2':'hr',
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
'plottype':'scatter',
|
||||
'spmmin':15,
|
||||
'spmmax':55,
|
||||
'workmin':0,
|
||||
'workmax':1500,
|
||||
'includereststrokes':False,
|
||||
'modality':'all',
|
||||
'waterboattype':['1x','2x','4x'],
|
||||
'rankingonly':False,
|
||||
'ids':[1,2,3],
|
||||
'userid':self.u.id,
|
||||
}
|
||||
|
||||
workouts = self.user_workouts
|
||||
|
||||
script, div = boxplotdata(workouts,options)
|
||||
script, div = trendflexdata(workouts,options)
|
||||
# script, div = histodata(workouts,options)
|
||||
# script, div = flexalldata(workouts,options)
|
||||
# script, div = statsdata(workouts,options)
|
||||
script, div = comparisondata(workouts,options)
|
||||
|
||||
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getsmallrowdata_db)
|
||||
def test_workouts_stats_submit(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()
|
||||
|
||||
form_data = {
|
||||
'function':'stats',
|
||||
'xparam':'hr',
|
||||
'plotfield':'spm',
|
||||
'yparam':'pace',
|
||||
'groupby':'spm',
|
||||
'palette':'monochrome_blue',
|
||||
'xaxis':'time',
|
||||
'yaxis1':'power',
|
||||
'yaxis2':'hr',
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
'plottype':'scatter',
|
||||
'spmmin':15,
|
||||
'spmmax':55,
|
||||
'workmin':0,
|
||||
'workmax':1500,
|
||||
'includereststrokes':False,
|
||||
'modality':'all',
|
||||
'waterboattype':['1x','2x','4x'],
|
||||
'rankingonly':False,
|
||||
'workouts':[1,2,3]
|
||||
}
|
||||
|
||||
form = AnalysisChoiceForm(form_data)
|
||||
optionsform = AnalysisOptionsForm(form_data)
|
||||
dateform = DateRangeForm(form_data)
|
||||
|
||||
result = form.is_valid()
|
||||
if not result:
|
||||
print(form.errors)
|
||||
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertTrue(optionsform.is_valid())
|
||||
self.assertTrue(dateform.is_valid())
|
||||
|
||||
response = self.c.post('/rowers/user-analysis-select/',form_data)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
@@ -60,7 +60,6 @@ def get_metar_data(airportcode,unixtime):
|
||||
if s.ok:
|
||||
doc = etree.fromstring(s.content)
|
||||
lengte = len(doc.xpath('data/METAR/station_id'))
|
||||
print('Lengte ',lengte,int(lengte/2))
|
||||
idnr = int(lengte/2)
|
||||
try:
|
||||
id = doc.xpath('data/METAR/station_id')[idnr].text
|
||||
|
||||
Reference in New Issue
Block a user