Private
Public Access
1
0

done runkeeper

This commit is contained in:
Sander Roosendaal
2018-07-03 22:01:53 +02:00
parent ce53c29fee
commit 8da86e610d
7 changed files with 164 additions and 5 deletions

View File

@@ -82,6 +82,9 @@ def mocked_requests(*args, **kwargs):
stravaworkoutlist = json.load(open('rowers/testdata/stravaworkoutlist.txt'))
sporttracksworkoutlist = json.load(open('rowers/testdata/sporttracksworkouts.txt'))
rkworkoutlistjson = json.load(open('rowers/testdata/rkworkoutslist.txt','r'))
stravasummaryjson = json.load(open('rowers/testdata/stravaworkoutsummary.txt','r'))
stravatimejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
@@ -100,6 +103,10 @@ def mocked_requests(*args, **kwargs):
'cadence':stravaspmjson,
}
ststrokesjson = json.load(open('rowers/testdata/sporttracksstrokedata.txt','r'))
rkstrokesjson = json.load(open('rowers/testdata/rkstrokes.txt','r'))
class MockResponse:
def __init__(self, json_data, status_code):
self.json_data = json_data
@@ -108,6 +115,12 @@ def mocked_requests(*args, **kwargs):
def json(self):
return self.json_data
class MockHeaderResponse:
def __init__(self, header_data, status_code):
self.headers = header_data
self.status_code = status_code
class MockSession:
def send(self,prepped):
# prepped.url
@@ -129,6 +142,7 @@ def mocked_requests(*args, **kwargs):
c2tester = re.compile('.*?log\.concept2\.com')
stravatester = re.compile('.*?strava\.com')
sttester = re.compile('.*?sporttracks\.mobi')
rktester = re.compile('.*?runkeeper\.com')
c2importregex = '.*?concept2.com\/api\/users\/me\/results\/\d+'
c2importtester = re.compile(c2importregex)
@@ -156,6 +170,54 @@ def mocked_requests(*args, **kwargs):
stworkoutlistregex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities$'
stworkoutlisttester = re.compile(stworkoutlistregex)
ststrokesregex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities/\d+$'
ststrokestester = re.compile(ststrokesregex)
rkuploadregex = '.*?api\.runkeeper\.com\/fitnessActivities$'
rkuploadtester = re.compile(rkuploadregex)
rkuserregex = '.*?api\.runkeeper\.com\/user$'
rkusertester = re.compile(rkuserregex)
rkstrokesregex = '.*?api\.runkeeper\.com\/fitnessActivities/\d+$'
rkstrokestester = re.compile(rkstrokesregex)
if rktester.match(args[0]):
if 'token' in args[0]:
json_data = {
'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq',
'expires_in': 604800,
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
}
return MockResponse(json_data,200)
if rkuploadtester.match(args[0]):
if 'data' in kwargs:
# post
header_data = {
'Location': '/fitnessActivities/12'
}
return MockHeaderResponse(header_data,200)
else:
json_data = rkworkoutlistjson
return MockResponse(json_data,200)
if rkusertester.match(args[0]):
json_data = {
"userID": 1234567890,
"profile": "/profile",
"settings": "/settings",
"fitness_activities": "/fitnessActivities",
"strength_training_activities": "/strengthTrainingActivities",
"background_activities": "/backgroundActivities",
"sleep": "/sleep",
"nutrition": "/nutrition",
"weight": "/weight",
"general_measurements": "/generalMeasurements",
"diabetes": "/diabetes",
"records": "/records",
"team": "/team"
}
return MockResponse(json_data, 200)
if rkstrokestester.match(args[0]):
return MockResponse(rkstrokesjson,200)
if sttester.match(args[0]):
if 'oauth2/token' in args[0]:
@@ -165,6 +227,8 @@ def mocked_requests(*args, **kwargs):
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
}
return MockResponse(json_data,200)
if ststrokestester.match(args[0]):
return MockResponse(ststrokesjson,200)
if stuploadtester.match(args[0]):
json_data = {
"uris": [
@@ -508,6 +572,95 @@ class STObjects(DjangoTestCase):
res = add_workout_from_data(self.u,1,data,data)
class RunKeeperObjects(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,
gdproptindate=timezone.now()
)
self.r.runkeepertoken = '12'
self.r.save()
self.c.login(username='john',password='koeinsloot')
self.nu = datetime.datetime.now()
filename = 'rowers/testdata/testdata.csv'
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
hrut1=self.r.ut1,hrat=self.r.at,
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
row = rdata(filename,rower=rr)
totaldist = row.df['cum_dist'].max()
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)']
hours = int(totaltime/3600.)
minutes = int((totaltime - 3600.*hours)/60.)
seconds = int(totaltime - 3600.*hours - 60.*minutes)
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
self.w = Workout.objects.create(
name='testworkout',workouttype='On-water',
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
starttime=workoutstarttime,
startdatetime=row.rowdatetime,
duration=duration,distance=totaldist,
csvfilename=filename
)
@patch('rowers.runkeeperstuff.requests.post', side_effect=mocked_requests)
def test_runkeeper_callback(self, mock_post):
response = self.c.get('/runkeeper_callback?code=dsdoij232s',follow=True)
self.assertEqual(response.status_code, 200)
@patch('rowers.runkeeperstuff.requests.post', side_effect=mocked_requests)
@patch('rowers.runkeeperstuff.requests.get', side_effect=mocked_requests)
def test_runkeeper_upload(self, mock_get, mock_post):
response = self.c.get('/rowers/workout/1/runkeeperuploadw/')
self.assertRedirects(response,
expected_url = '/rowers/workout/1/export',
status_code=302,target_status_code=200)
self.assertEqual(response.url, '/rowers/workout/1/export')
self.assertEqual(response.status_code, 302)
@patch('rowers.runkeeperstuff.requests.get', side_effect=mocked_requests)
def test_runkeeper_list(self, mock_get):
response = self.c.get('/rowers/workout/runkeeperimport',follow=True)
self.assertEqual(response.status_code,200)
@patch('rowers.imports.requests.get', side_effect=mocked_requests)
def test_runkeeper_import(self, mock_get):
response = self.c.get('/rowers/workout/runkeeperimport/12/',follow=True)
self.assertRedirects(response,
expected_url='/rowers/workout/2/edit',
status_code=302,target_status_code=200)
self.assertEqual(response.status_code, 200)
class TestErrorPages(TestCase):
def test_error_handlers(self):