1487 lines
50 KiB
Python
1487 lines
50 KiB
Python
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
from .statements import *
|
|
from http.cookies import SimpleCookie
|
|
|
|
nu = datetime.datetime.now()
|
|
|
|
from rowers.views import *
|
|
from rowers.views.analysisviews import histodata
|
|
|
|
|
|
|
|
class ListWorkoutTest(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
|
|
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.read_data')
|
|
@patch('rowers.dataprep.myqueue')
|
|
def test_list_workouts(self, mocked_sqlalchemy,
|
|
mocked_read_data,
|
|
mocked_myqueue):
|
|
|
|
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()
|
|
|
|
startdate = arrow.get(startdate).datetime
|
|
enddate = arrow.get(startdate).datetime
|
|
|
|
form_data = {
|
|
'startdate':startdate,
|
|
'enddate':enddate,
|
|
}
|
|
|
|
workouts = Workout.objects.filter(startdatetime__gte=startdate,
|
|
startdatetime__lte=enddate)
|
|
|
|
url = '/rowers/list-workouts/'
|
|
|
|
response = self.c.post(url, form_data)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
class PlannedSessionTests(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
self.factory = RequestFactory()
|
|
self.password = faker.word()
|
|
self.u.set_password(self.password)
|
|
self.u.save()
|
|
self.user_sessions = SessionFactory.create_batch(
|
|
5,
|
|
manager=self.u)
|
|
|
|
for session in self.user_sessions:
|
|
session.rower.add(self.r)
|
|
session.save()
|
|
|
|
def tearDown(self):
|
|
for workout in self.user_workouts:
|
|
try:
|
|
os.remove(workout.csvfilename)
|
|
except (IOError, FileNotFoundError,OSError):
|
|
pass
|
|
|
|
def test_ics_download(self):
|
|
login = self.c.login(username=self.u.username,password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
response = self.c.get('/rowers/sessions/sendcalendar/')
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
startdate, enddate = get_dates_timeperiod(response.wsgi_request)
|
|
|
|
filename = 'training_plan_{u}_{d1}_{d2}.ics'.format(
|
|
u = self.u.username,
|
|
d1 = startdate.strftime("%Y%m%d"),
|
|
d2 = enddate.strftime("%Y%m%d"),
|
|
)
|
|
self.assertEqual(
|
|
response.get('Content-Disposition'),
|
|
'attachment; filename="{name}"'.format(name=filename)
|
|
)
|
|
|
|
|
|
class ForcecurveTest(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
|
|
result = get_random_file(filename='rowers/tests/testdata/quiske_in_stroke.csv')
|
|
|
|
self.winstroke = WorkoutFactory(user=self.r,
|
|
csvfilename=result['filename'],
|
|
starttime=result['starttime'],
|
|
startdatetime=result['startdatetime'],
|
|
duration=result['duration'],
|
|
distance=result['totaldist'],
|
|
workouttype = 'water',
|
|
)
|
|
|
|
|
|
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.read_data',side_effect = mocked_read_data)
|
|
def test_forcecurve_plot(self, mocked_read_data):
|
|
login = self.c.login(username=self.u.username, password = self.password)
|
|
self.assertTrue(login)
|
|
|
|
encoded1 = str(encoder.encode_hex(1))
|
|
url = '/rowers/workout/'+encoded1+'/forcecurve/'
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# saving
|
|
form_data = {
|
|
'spm_min': 19,
|
|
'spm_max': 25,
|
|
'dist_min': 0,
|
|
'dist_max': 10000,
|
|
'work_min': 0,
|
|
'work_max': 3444,
|
|
'notes': 'aap',
|
|
'name': 'sdsd',
|
|
'includereststrokes': True,
|
|
'plottype':'none',
|
|
'_save_as_new':'Save'
|
|
}
|
|
|
|
form = ForceCurveOptionsForm(form_data)
|
|
result = form.is_valid()
|
|
if not result:
|
|
print(form.errors)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url, form_data)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
url = '/rowers/analysis/forcecurveanalysis/'
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
url = '/rowers/analysis/forcecurveanalysis/1/delete/'
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
form_data = {}
|
|
response = self.c.post(url, form_data, follow=True)
|
|
|
|
expected_url = '/rowers/analysis/forcecurveanalysis/'
|
|
self.assertRedirects(response, expected_url=expected_url, status_code=302,target_status_code=200)
|
|
|
|
|
|
def test_instroke_analysis(self):
|
|
login = self.c.login(username=self.u.username, password = self.password)
|
|
self.assertTrue(login)
|
|
|
|
encoded1 = str(encoder.encode_hex(self.winstroke.id))
|
|
url = '/rowers/workout/'+encoded1+'/instroke/interactive/'
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# saving
|
|
form_data = {
|
|
'spm_min': 19,
|
|
'spm_max': 25,
|
|
'activeminutesmin': 0,
|
|
'activeminutesmax': 10,
|
|
'individual_curves': False,
|
|
'notes': 'aap',
|
|
'name': 'sdsd',
|
|
'metric': 'boat accelerator curve',
|
|
'_save_as_new':'Save'
|
|
}
|
|
|
|
form = InstrokeForm(form_data,choices=['boat accelerator curve', 'oar angle velocity curve'])
|
|
result = form.is_valid()
|
|
if not result:
|
|
print(form.errors)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url, form_data)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
url = '/rowers/analysis/instrokeanalysis/'
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
url = '/rowers/analysis/instrokeanalysis/1/delete/'
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
form_data = {}
|
|
response = self.c.post(url, form_data, follow=True)
|
|
|
|
expected_url = '/rowers/analysis/instrokeanalysis/'
|
|
self.assertRedirects(response, expected_url=expected_url, status_code=302,target_status_code=200)
|
|
|
|
|
|
|
|
class WorkoutCompareTestNew(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
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.read_data')
|
|
def test_workouts_compare(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = '/rowers/user-analysis-select/compare/'
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
@patch('rowers.dataprep.create_engine')
|
|
@patch('rowers.dataprep.read_data', side_effect=mocked_read_data)
|
|
def test_workouts_compare_submit(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
form_data = {
|
|
'function':'compare',
|
|
'xparam':'hr',
|
|
'plotfield':'spm',
|
|
'yparam':'pace',
|
|
'yaxis2':'hr',
|
|
'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'],
|
|
'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 WorkoutBoxPlotTestNew(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
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.read_data')
|
|
def test_workouts_boxplot(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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.read_data', side_effect=mocked_read_data)
|
|
def test_workouts_boxplot_submit(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
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'],
|
|
'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, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
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.read_data')
|
|
def test_workouts_histo(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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.read_data', side_effect=mocked_read_data)
|
|
def test_workouts_histo_submit(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
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'],
|
|
'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 History(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(20, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
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.read_data',side_effect=mocked_read_data)
|
|
def test_workouts_history(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = '/rowers/history/'
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
url = '/rowers/history/data/'
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
@patch('rowers.dataprep.create_engine')
|
|
@patch('rowers.dataprep.read_data', side_effect=mocked_read_data)
|
|
def test_workouts_history_submit(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
login = self.c.login(username=self.u.username,password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=50)).date()
|
|
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=50)).date()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
form_data = {
|
|
'startdate':startdate,
|
|
'enddate':enddate,
|
|
'workouttype':'rower',
|
|
'yaxis':'TRIMP',
|
|
}
|
|
|
|
form = HistorySelectForm(form_data)
|
|
|
|
result = form.is_valid()
|
|
if not result:
|
|
print(form.errors)
|
|
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.get('/rowers/history/',form_data)
|
|
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
response = self.c.get('/rowers/history/data/',form_data,xhr=True)
|
|
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
class GoldMedalScores(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(20, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
result = get_random_file(filename='rowers/tests/testdata/onwater2.csv')
|
|
self.w1 = WorkoutFactory(user=self.r,
|
|
csvfilename=result['filename'],
|
|
starttime=result['starttime'],
|
|
startdatetime=result['startdatetime'],
|
|
duration=result['duration'],
|
|
distance=result['totaldist'],
|
|
workouttype = 'water',
|
|
rankingpiece=True
|
|
)
|
|
|
|
result = get_random_file(filename='rowers/tests/testdata/onwater2.csv')
|
|
self.w2 = WorkoutFactory(user=self.r,
|
|
csvfilename=result['filename'],
|
|
starttime=result['starttime'],
|
|
startdatetime=result['startdatetime'],
|
|
duration=result['duration'],
|
|
distance=result['totaldist'],
|
|
workouttype = 'water',
|
|
rankingpiece=True
|
|
)
|
|
|
|
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.read_data')
|
|
def test_workouts_goldmedalscores(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
ws = Workout.objects.filter(rankingpiece=True)
|
|
self.assertEqual(ws.count(),2)
|
|
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = '/rowers/goldmedalscores/'
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
@patch('rowers.dataprep.create_engine')
|
|
@patch('rowers.dataprep.read_data', side_effect=mocked_read_data)
|
|
def test_workouts_goldmedalscores_submit(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
login = self.c.login(username=self.u.username,password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=50)).date()
|
|
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=50)).date()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
form_data = {
|
|
'startdate':startdate,
|
|
'enddate':enddate,
|
|
}
|
|
|
|
form = DateRangeForm(form_data)
|
|
|
|
result = form.is_valid()
|
|
if not result:
|
|
print(form.errors)
|
|
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post('/rowers/goldmedalscores/',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, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
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.read_data')
|
|
def test_workouts_flexall(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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.read_data', side_effect=mocked_read_data)
|
|
def test_workouts_flexall_submit(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
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'],
|
|
'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, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
|
|
today = datetime.date.today()
|
|
i = 0
|
|
for w in self.user_workouts:
|
|
w.date = today-datetime.timedelta(days=i)
|
|
i += 1
|
|
w.save()
|
|
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.read_data')
|
|
def test_workouts_stats(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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.read_data', side_effect=mocked_read_data)
|
|
@patch('rowers.dataprep.read_cols_df_sql', side_effect=mocked_read_cols_df_sql)
|
|
def test_analysis_data(self,
|
|
mocked_sqlalchemy,
|
|
mocked_read_data,
|
|
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()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
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',
|
|
'trendline':True,
|
|
'spmmin':15,
|
|
'spmmax':55,
|
|
'workmin':0,
|
|
'workmax':1500,
|
|
'cpfit':'data',
|
|
'piece': 4,
|
|
'cpoverlay':True,
|
|
'cpfit':'data',
|
|
'includereststrokes':False,
|
|
'modality':'all',
|
|
'waterboattype':['1x','2x','4x'],
|
|
'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 = cpdata(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.read_data', side_effect=mocked_read_data)
|
|
@patch('rowers.dataprep.read_cols_df_sql', side_effect=mocked_read_cols_df_sql)
|
|
def test_analysis_data2(self,
|
|
mocked_sqlalchemy,
|
|
mocked_read_data,
|
|
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()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
options = {
|
|
'function':'flexall',
|
|
'xparam':'spm',
|
|
'plotfield':'spm',
|
|
'yparam':'power',
|
|
'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,
|
|
'cpfit':'data',
|
|
'piece': 4,
|
|
'cpoverlay':True,
|
|
'cpfit':'data',
|
|
'includereststrokes':False,
|
|
'modality':'all',
|
|
'waterboattype':['1x','2x','4x'],
|
|
'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 = cpdata(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.read_data', side_effect=mocked_read_data)
|
|
@patch('rowers.dataprep.read_cols_df_sql', side_effect=mocked_read_cols_df_sql)
|
|
def test_analysis_data2(self,
|
|
mocked_sqlalchemy,
|
|
mocked_read_data,
|
|
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()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
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.strftime('%Y-%m-%d'),
|
|
'enddate':enddate.strftime('%Y-%m-%d'),
|
|
'plottype':'scatter',
|
|
'spmmin':15,
|
|
'spmmax':55,
|
|
'workmin':0,
|
|
'workmax':1500,
|
|
'cpfit':'data',
|
|
'piece': 4,
|
|
'cpoverlay':True,
|
|
'cpfit':'data',
|
|
'includereststrokes':False,
|
|
'modality':'all',
|
|
'waterboattype':['1x','2x','4x'],
|
|
'ids':[1,2,3],
|
|
'userid':self.u.id,
|
|
'function':'boxplot'
|
|
}
|
|
|
|
workouts = self.user_workouts
|
|
|
|
request = self.factory
|
|
request.user = self.u
|
|
request.META = {
|
|
'HTTP_X_REQUESTED_WITH':'XMLHttpRequest'
|
|
}
|
|
request.COOKIES = SimpleCookie({'name': 'bla'})
|
|
# adding session
|
|
get_response = MagicMock()
|
|
middleware = SessionMiddleware(get_response)
|
|
middleware.process_request(request)
|
|
|
|
|
|
request.session.save()
|
|
|
|
session = request.session
|
|
options['ids'] = [w.id for w in workouts]
|
|
session['options'] = options
|
|
session.save()
|
|
|
|
|
|
response = analysis_view_data(request)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
@patch('rowers.dataprep.create_engine')
|
|
@patch('rowers.dataprep.read_data', side_effect=mocked_read_data)
|
|
def test_workouts_stats_submit(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
|
|
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()
|
|
|
|
# make sure the dates are not naive
|
|
try:
|
|
startdate = pytz.utc.localize(startdate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
try:
|
|
enddate = pytz.utc.localize(enddate)
|
|
except (ValueError, AttributeError):
|
|
pass
|
|
|
|
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'],
|
|
'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 MarkerPerformanceTest(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
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,
|
|
)
|
|
self.werg2k.date = self.werg2k.startdatetime.date()
|
|
self.werg2k.save()
|
|
|
|
# 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,
|
|
)
|
|
self.werg5k.date = self.werg5k.startdatetime.date()
|
|
self.werg5k.save()
|
|
|
|
# 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,
|
|
)
|
|
self.werg1h.date = self.werg1h.startdatetime.date()
|
|
self.werg1h.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.read_data')
|
|
def test_create_marker_workouts(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
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.read_data', side_effect=mocked_getsmallrowdata_uh)
|
|
def test_trainingzones_view(self,mocked_getsmallrowdata_uh):
|
|
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()
|
|
zones = 'hr'
|
|
|
|
url = reverse('trainingzones_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
url = reverse('trainingzones_view_data')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
url += '?startdate={startdate}&enddate={enddate}&zones={zones}'.format(
|
|
startdate = startdate.strftime("%Y-%m-%d"),
|
|
enddate = enddate.strftime("%Y-%m-%d"),
|
|
zones=zones,
|
|
)
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
zones = 'power'
|
|
url = reverse('trainingzones_view_data')
|
|
url += '?startdate={startdate}&enddate={enddate}&zones={zones}'.format(
|
|
startdate = startdate.strftime("%Y-%m-%d"),
|
|
enddate = enddate.strftime("%Y-%m-%d"),
|
|
zones=zones,
|
|
)
|
|
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
dates = 'week'
|
|
yaxis = 'percentage'
|
|
url = reverse('trainingzones_view_data')
|
|
url += '?startdate={startdate}&enddate={enddate}&zones={zones}&yaxis={yaxis}&dates={dates}'.format(
|
|
startdate = startdate.strftime("%Y-%m-%d"),
|
|
enddate = enddate.strftime("%Y-%m-%d"),
|
|
zones=zones,
|
|
dates=dates,
|
|
yaxis=yaxis
|
|
)
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
zones = 'hr'
|
|
dates = 'month'
|
|
yaxis = 'percentage'
|
|
url = reverse('trainingzones_view_data')
|
|
url += '?startdate={startdate}&enddate={enddate}&zones={zones}&yaxis={yaxis}&dates={dates}'.format(
|
|
startdate = startdate.strftime("%Y-%m-%d"),
|
|
enddate = enddate.strftime("%Y-%m-%d"),
|
|
zones=zones,
|
|
dates=dates,
|
|
yaxis=yaxis
|
|
)
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
@patch('rowers.dataprep.create_engine')
|
|
@patch('rowers.dataprep.read_data')
|
|
def test_performancemanager_view(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
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)
|
|
|
|
|
|
class AlertTest(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=faker.profile()['birthdate'],
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='pro')
|
|
|
|
self.c = Client()
|
|
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
|
for w in self.user_workouts:
|
|
if w.date != w.startdatetime.date():
|
|
w.date = w.startdatetime.date()
|
|
w.save()
|
|
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.alerts.read_data')
|
|
def test_alerts(self, mocked_sqlalchemy,
|
|
mocked_read_data):
|
|
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('alerts_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# create alert
|
|
url = reverse('alert_create_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
data = {
|
|
'name': 'Ss',
|
|
'period':7,
|
|
'emailalert': True,
|
|
'boattype':'1x',
|
|
'workouttype':'water',
|
|
'reststrokes':False,
|
|
'metric':'spm',
|
|
'condition':'<',
|
|
'value1':20,
|
|
'value2':22,
|
|
# management_form data
|
|
'form-INITIAL_FORMS': '0',
|
|
'form-TOTAL_FORMS': '1',
|
|
'form-MAX_NUM_FORMS': '',
|
|
|
|
# First condition data
|
|
'form-0-metric': 'hr',
|
|
'form-0-condition': '>',
|
|
'form-0-value1': 120,
|
|
'form-0-value2': 130
|
|
}
|
|
|
|
|
|
form = AlertEditForm(data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url,data,follow=True)
|
|
expected_url = reverse('alert_edit_view',kwargs={'id':1})
|
|
self.assertRedirects(response,expected_url=expected_url,status_code=302,target_status_code=200)
|
|
|
|
url = expected_url
|
|
response = self.c.post(url,data)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
data = {}
|
|
|
|
url = reverse('alert_report_view',kwargs={'id':1,'userid':self.u.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# delete
|
|
url = '/rowers/alerts/1/delete/'
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
response = self.c.post(url,data,follow=True)
|
|
expected_url = reverse('alerts_view')
|
|
self.assertRedirects(response,expected_url=expected_url,status_code=302,target_status_code=200)
|
|
|
|
#
|