diff --git a/rowers/models.py b/rowers/models.py index 1ecccfac..53f5034d 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2729,6 +2729,7 @@ class PlannedSession(models.Model): dct = trainingparser.parsetodict(self.interval_string) dct = [item for item in dct if item['value'] != 0] dct = trainingparser.tofitdict(dct) + for step in dct['steps']: try: step['targetValue'] = int(step['targetValue']) diff --git a/rowers/rojabo_stuff.py b/rowers/rojabo_stuff.py index 5fb74a28..7f76195d 100644 --- a/rowers/rojabo_stuff.py +++ b/rowers/rojabo_stuff.py @@ -172,11 +172,10 @@ a_week_from_now = timezone.now()+timedelta(days=7) def stepsconvert(rojabo_steps, startid = 0, warmup = False, cooldown = False): workout_steps = [] for step in rojabo_steps: - print(step) durationtype = 'Time' durationvalue = 10 if step['duration_type'] == 'seconds': - durationvalue = 1000*durationvalue # milliseconds + durationvalue = 1000*step['duration_value'] # milliseconds if step['duration_type'] == 'meters': durationtype = 'Distance' durationvalue = step['duration_value']*100 # centimeters @@ -200,6 +199,8 @@ def stepsconvert(rojabo_steps, startid = 0, warmup = False, cooldown = False): if targetvalue is None: targettype = 'Cadence' targetvalue = step['stroke_rate'] + if targettype == 'Power': + targetvalue += 1000 if step['target_type'] == 'rest': targettype = '' @@ -219,10 +220,11 @@ def stepsconvert(rojabo_steps, startid = 0, warmup = False, cooldown = False): 'durationType': durationtype, 'durationValue': durationvalue, 'targetType': targettype, - 'targetvalue': targetvalue, + 'targetValue': targetvalue, 'intensity': intensity, 'description': description } + startid += 1 workout_steps.append(newstep) diff --git a/rowers/tests/mocks.py b/rowers/tests/mocks.py index 4e8bfc34..89ac6292 100644 --- a/rowers/tests/mocks.py +++ b/rowers/tests/mocks.py @@ -734,6 +734,9 @@ def mocked_requests(*args, **kwargs): with open('rowers/tests/testdata/c2_timezone.json','r') as infile: c2timezoneworkoutdata = json.load(infile) + with open('rowers/tests/testdata/rojabolist.json','r') as infile: + rojabodata = json.load(infile) + with open('rowers/tests/testdata/c2_timezone2.json','r') as infile: c2timezoneworkoutdata2 = json.load(infile) @@ -1045,6 +1048,9 @@ def mocked_requests(*args, **kwargs): return MockResponse(jsonresponse,200) + if 'rojabo' in args[0]: + return MockResponse(rojabodata, 200) + polartester = re.compile(r'.*?polaraccesslink\.com') polarremotetester = re.compile(r'.*?polarremote\.com') diff --git a/rowers/tests/statements.py b/rowers/tests/statements.py index eae18b4b..aa4821ea 100644 --- a/rowers/tests/statements.py +++ b/rowers/tests/statements.py @@ -66,6 +66,7 @@ from mock import Mock, patch import pandas as pd import rowers.c2stuff as c2stuff import rowers.sporttracksstuff as sporttracksstuff +import rowers.rojabo_stuff as rojabo_stuff from django.urls import reverse, reverse_lazy diff --git a/rowers/tests/test_imports.py b/rowers/tests/test_imports.py index 6ef6c6e0..5534ea5d 100644 --- a/rowers/tests/test_imports.py +++ b/rowers/tests/test_imports.py @@ -21,11 +21,64 @@ import urllib import json import rowers.utils as utils +import rowers.rojabo_stuff as rojabo_stuff from django.db import transaction import rowers.garmin_stuff as gs +@pytest.mark.django_db +@override_settings(TESTING=True) +class RojaboObjects(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,surveydone=True, + gdproptindate=timezone.now() + ) + + self.r.rojabo_token = '12' + self.r.rojabo_refreshtoken = 'ab' + self.r.rojabo_tokenexpirydate = arrow.get(datetime.datetime.now()+datetime.timedelta(days=1)).datetime + self.r.defaulttimezone = 'Europe/Prague' + self.r.rowerplan = 'plan' + self.r.save() + self.c.login(username='john',password='koeinsloot') + + self.nu = datetime.datetime.now() + + @patch('rowers.rojabo_stuff.requests.get', side_effect=mocked_requests) + @patch('rowers.rojabo_stuff.requests.post', side_effect=mocked_requests) + def test_rojabo_import(self, mock_get, mock_post): + url = '/rowers/session/rojaboimport/' + response = self.c.get(url) + self.assertEqual(response.status_code, 200) + + form_data = { + 'csrfmiddlewaretoken': ['xalRrf8y7P2Hhobges9QC4aKCWg4l06gexDc8g2DeuVExgadfk4YhV8oSE1Yu43U'], + 'sessions': ['Import selected sessions'], + 'sessionid': ['862172'] + } + + + response = self.c.post(url,form_data) + self.assertEqual(response.status_code,200) + + pss = PlannedSession.objects.filter(manager=self.r.user) + self.assertEqual(pss.count(),1) + + ps = pss[0] + self.assertEqual(ps.approximate_duration,57) + + self.assertEqual(len(ps.steps['steps']),20) + + @pytest.mark.django_db @override_settings(TESTING=True) class GarminObjects(DjangoTestCase): diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index a680db8d..6d7b2a65 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -1062,7 +1062,7 @@ def workout_rojaboimport_view(request, message="", userid=0): if (res.status_code != 200): # pragma: no cover if (res.status_code == 401): r = getrower(request.user) - if (r.stravatoken == '') or (r.stravatoken is None): + if (r.rojabo_token == '') or (r.rojabo_token is None): s = "Token doesn't exist. Need to authorize" return HttpResponseRedirect("/rowers/me/rojaboauthorize/") message = "Something went wrong in workout_rojaboimport_view" @@ -1114,20 +1114,34 @@ def workout_rojaboimport_view(request, message="", userid=0): # get steps if there are any steps = [] try: - steps.append(rojabostuff.stepsconvert(item['warm_up'])) + steps = steps+rojabo_stuff.stepsconvert( + item['warm_up']['steps'], + warmup=True + ) except KeyError: pass try: - steps.append(rojabostuff.stepsconvert(item['primary'])) + steps = steps + rojabo_stuff.stepsconvert( + item['primary']['steps'], + startid=len(steps) + ) except KeyError: pass try: - steps.append(rojabostuff.stepsconvert(item['cool_down'])) + steps = steps + rojabo_stuff.stepsconvert( + item['cool_down']['steps'], + cooldown=True, + startid=len(steps)) except KeyError: pass if steps: - ps.steps = steps + ps.steps = { + 'name':'', + 'sport':'rowing', + 'filename':'', + 'steps': steps, + } ps.save() messages.info(request,'Saved planned session {id}'.format(id=ps.id))