diff --git a/rowers/polarstuff.py b/rowers/polarstuff.py index ef201d44..3ac89424 100644 --- a/rowers/polarstuff.py +++ b/rowers/polarstuff.py @@ -93,6 +93,10 @@ def get_token(code): data=post_data, headers=headers) + if response.status_code != 200: + dologging('polar.log','Getting token, got:') + dologging('polar.log',response.status_code) + dologging('polar.log',response.text) try: token_json = response.json() @@ -100,11 +104,17 @@ def get_token(code): expires_in = token_json['expires_in'] user_id = token_json['x_user_id'] dologging('polar.log',response.status_code) - dologging('polar.log',response.text) + try: + dologging('polar.log',response.text) + except AttributeError: + pass dologging('polar.log',token_json) except (KeyError,JSONDecodeError) as e: dologging('polar.log',e) - dologging('polar.log',response.text) + try: + dologging('polar.log',response.text) + except AttributeError: + pass thetoken = 0 expires_in = 0 user_id = 0 @@ -132,11 +142,12 @@ def revoke_access(user): 'Authorization': 'Bearer {token}'.format(token=user.rower.polartoken) } - response = requests.delete('https://www.polaraccesslink.com/v3/users/{user-id}', params={ - 'user-id':user.rower.polaruserid, - }, headers = headers) + response = requests.delete('https://www.polaraccesslink.com/v3/users/{userid}'.format( + userid = user.rower.polaruserid + ), headers = headers) dologging('polar.log',response.text) + dologging('polar.log',response.reason) return 1 @@ -169,9 +180,12 @@ def get_polar_notifications(): dologging('polar.log',available_data) else: dologging('polar.log',response.status_code) - dologging('polar.log',reponse.text) + dologging('polar.log',response.text) except AttributeError: - dologging('polar.log',response.text) + try: + dologging('polar.log',response.text) + except AttributeError: + pass pass return available_data diff --git a/rowers/tests/mocks.py b/rowers/tests/mocks.py index f4a31f68..35e54974 100644 --- a/rowers/tests/mocks.py +++ b/rowers/tests/mocks.py @@ -1021,6 +1021,7 @@ def mocked_requests(*args, **kwargs): polartester = re.compile(r'.*?polaraccesslink\.com') + polarremotetester = re.compile(r'.*?polarremote\.com') c2tester = re.compile(r'.*?log\.concept2\.com') stravatester = re.compile(r'.*?strava\.com') sttester = re.compile(r'.*?sporttracks\.mobi') @@ -1041,6 +1042,9 @@ def mocked_requests(*args, **kwargs): polartcxregex = r'.*?polaraccesslink\.com\/.*\/(\d+)\/tcx' polartcxtester = re.compile(polartcxregex) + polarnotificationregex = r'.*polaraccesslink\.com\/.*\/notifications' + polarnotificationtester = re.compile(polarnotificationregex) + c2importregex = r'.*?concept2.com\/api\/users\/me\/results\/\d+' c2importtester = re.compile(c2importregex) @@ -1134,8 +1138,32 @@ def mocked_requests(*args, **kwargs): json_data = stravaathletejson return MockResponse(json_data,200) + if polarremotetester.match(args[0]): + json_data = { + 'access_token':'aap', + 'expires_in':31535999, + 'x_user_id':1, + } + return MockResponse(json_data,200) + if polartester.match(args[0]): - if polartcxtester.match(args[0]): + if polarnotificationtester.match(args[0]): + json_data = { + "available-user-data": [ + { + "user-id": 475, + "data-type": "ACTIVITY_SUMMARY", + "url": "https://www.polaraccesslink.com/v3/users/475/activity-transactions" + }, + { + 'user-id': 475, + 'data-type': 'EXERCISE', + 'url': 'https://polaraccesslink.com/v3/users/40273947/exercise-transactions' + } + ] + } + return MockResponse(json_data,200) + elif polartcxtester.match(args[0]): filename = 'rowers/tests/testdata/polar_response.tcx' return MockContentResponse(filename,200) elif polarexercisetester.match(args[0]): diff --git a/rowers/tests/test_imports.py b/rowers/tests/test_imports.py index 7bee6d14..ce78fa52 100644 --- a/rowers/tests/test_imports.py +++ b/rowers/tests/test_imports.py @@ -774,6 +774,8 @@ class PolarObjects(DjangoTestCase): self.r.polartoken = '12' self.r.polarrefreshtoken = '123' + self.r.polaruserid = 475 + self.r.rowerplan = 'pro' self.r.polartokenexpirydate = arrow.get(datetime.datetime.now()+datetime.timedelta(days=100)).datetime @@ -821,6 +823,23 @@ class PolarObjects(DjangoTestCase): res = polarstuff.get_polar_workouts(self.r.user) self.assertEqual(len(res),2) + @patch('rowers.polarstuff.requests.post', side_effect=mocked_requests) + @patch('rowers.polarstuff.requests.get', side_effect=mocked_requests) + def test_polar_callback(self, mock_get, mock_post): + response = self.c.get('/polarflowcallback?code=abcdef&state=12sdss',follow=True) + + self.assertEqual(response.status_code,200) + + @patch('rowers.polarstuff.requests.post', side_effect=mocked_requests) + @patch('rowers.polarstuff.requests.get', side_effect=mocked_requests) + def test_polar_notifications(self, mock_get, mock_post): + data = polarstuff.get_polar_notifications() + + self.assertEqual(data[0]['user-id'],475) + + response = polarstuff.get_all_new_workouts(data) + self.assertEqual(response,1) + #@pytest.mark.django_db @override_settings(TESTING=True) class RP3Objects(DjangoTestCase): diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz deleted file mode 100644 index 2469a2d9..00000000 Binary files a/rowers/tests/testdata/testdata.tcx.gz and /dev/null differ