from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals from .statements import * from rowers.mytypes import rowtypes nu = datetime.datetime.now() # interactive plots from rowers import interactiveplots from rowers import dataprep class DataPrepTests(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() result = get_random_file(filename='rowers/tests/testdata/uherskehradiste_otw.csv') self.wuh_otw = WorkoutFactory(user=self.r, csvfilename=result['filename'], starttime=result['starttime'], startdatetime=result['startdatetime'], duration=result['duration'], distance=result['totaldist'], workouttype = 'water', ) def tearDown(self): pass @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_uh) def test_get_videodata(self,mocked_getsmallrowdata_uh): data, metrics, maxtime = dataprep.get_video_data(self.wuh_otw) self.assertEqual(len(data),9) self.assertEqual(len(metrics),6) self.assertEqual(int(maxtime),1737) def test_polarization_index(self): df = pd.read_csv('rowers/tests/testdata/uhfull.csv') index = dataprep.polarization_index(df,self.r) self.assertEqual(int(100*index),-67) def test_get_latlon(self): data = dataprep.get_latlon(self.wuh_otw.id) self.assertEqual(len(data),2) def test_workout_summary_to_df(self): df = dataprep.workout_summary_to_df(self.r) self.assertEqual(len(df),6) @patch('rowers.dataprep.create_engine') def test_update_c2id(self,mocked_sqlalchemy): res = dataprep.update_c2id_sql(1,1) self.assertEqual(res,1) def test_checkmarker(self): workouts = Workout.objects.all().order_by("-date") wmax = dataprep.check_marker(workouts[0]) self.assertTrue(wmax.rankingpiece) def test_workouttype_fromfit(self): filename = 'rowers/tests/testdata/3x250m.fit' res = dataprep.get_workouttype_from_fit(filename) self.assertEqual(res,'Workout') def test_workouttype_fromtcx(self): filename = 'rowers/tests/testdata/crewnerddata.tcx' res = dataprep.get_workouttype_from_tcx(filename) self.assertEqual(res,'water') class InteractivePlotTests(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() def tearDown(self): pass def test_interactive_hr_piechart(self): df = pd.read_csv('rowers/tests/testdata/getrowdata_mock.csv') script, div = interactiveplots.interactive_hr_piechart(df, self.r,'') self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) def test_interactive_workouttype_piechart(self): workouts = Workout.objects.filter(user=self.r) script, div = interactiveplots.interactive_workouttype_piechart(workouts) self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) def test_interactive_boxchart(self): df = pd.read_csv('rowers/tests/testdata/boxplotdata.csv') script, div = interactiveplots.interactive_boxchart(df, 'spm') self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) def test_interactive_activitychart(self): workouts = Workout.objects.filter(user=self.r).order_by('date') workouts2 = Workout.objects.filter(user=self.r).order_by('-date') startdate = workouts[0].date-datetime.timedelta(days=5) enddate = workouts2[0].date+datetime.timedelta(days=5) script, div = interactiveplots.interactive_activitychart(workouts,startdate,enddate) self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) def test_interactive_otwcpchart(self): df = pd.read_csv('rowers/tests/testdata/otwcp.csv') script, div, p1, ratio, message = interactiveplots.interactive_otwcpchart(df,r=self.r,cpfit='data') self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) script, div, p1, ratio, message = interactiveplots.interactive_otwcpchart(df,r=self.r,cpfit='automatic') self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getsmallrowdata_db) def test_interactive_chart(self, mocked_sqlalchemy, mocked_getsmallrowdata_db): workout = Workout.objects.filter(user=self.r,workouttype__in=mytypes.rowtypes)[0] id = workout.id script, div = interactiveplots.interactive_chart(id=id) self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) intervaldata = { 'itime': [0.0, 234.0, 61.2, 59.7, 60.5, 61.0, 44.2, 74.7, 44.8, 75.1, 43.4, 78.0, 40.1, 79.4, 42.4, 76.1, 45.4, 75.2, 43.2, 255.0, 60.0, 60.6, 60.7, 60.7, 55.3, 65.4, 58.2, 60.2, 59.7, 62.0, 44.7, 72.5, 43.2, 78.5, 56.4, 889.5], 'idist': [0, 700, 257, 179, 254, 197, 185, 246, 190, 240, 181, 240, 169, 241, 179, 215, 180, 223, 179, 302, 247, 190, 246, 180, 229, 197, 242, 179, 245, 189, 175, 208, 166, 218, 224, 2399], 'itype': [4, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3, 4.0, 3], 'selector': 'power', 'normp': 203, 'normv': 3.557050625695544 } script, div = interactiveplots.interactive_chart(id=id,intervaldata=intervaldata) self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) def test_interactive_chart_video(self): datadf = pd.read_csv('rowers/tests/testdata/videodata.csv') data = datadf.to_dict() script, div = interactiveplots.interactive_chart_video(data) self.assertFalse(len(script)==0) self.assertFalse(len(div)==0) @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getsmallrowdata_db) def test_interactive_flexchart_stacked(self, mocked_sqlalchemy, mocked_getsmallrowdata_db): workout = Workout.objects.filter(user=self.r,workouttype__in=mytypes.rowtypes)[0] id = workout.id script, div, js_res, css_res, comment = interactiveplots.interactive_flexchart_stacked(id,self.r) self.assertFalse(len(script)==0) self.assertFalse(len(div)==0)