strava done
This commit is contained in:
195
rowers/tests.py
195
rowers/tests.py
@@ -61,6 +61,23 @@ def mocked_requests(*args, **kwargs):
|
||||
|
||||
c2workoutlist = json.load(open('rowers/testdata/c2workoutlist.txt'))
|
||||
stravaworkoutlist = json.load(open('rowers/testdata/stravaworkoutlist.txt'))
|
||||
stravasummaryjson = json.load(open('rowers/testdata/stravaworkoutsummary.txt','r'))
|
||||
|
||||
stravatimejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
|
||||
stravavelojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r'))
|
||||
stravadistancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r'))
|
||||
stravalatlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
|
||||
stravahrjson = json.load(open('rowers/testdata/stravahrtestdata.txt','r'))
|
||||
stravaspmjson = json.load(open('rowers/testdata/stravaspmtestdata.txt','r'))
|
||||
|
||||
stravastreamjson = {
|
||||
'time':stravatimejson,
|
||||
'velocity_smooth':stravavelojson,
|
||||
'distance':stravadistancejson,
|
||||
'latlng':stravalatlongjson,
|
||||
'heartrate':stravahrjson,
|
||||
'cadence':stravaspmjson,
|
||||
}
|
||||
|
||||
class MockResponse:
|
||||
def __init__(self, json_data, status_code):
|
||||
@@ -102,10 +119,22 @@ def mocked_requests(*args, **kwargs):
|
||||
|
||||
stravaworkoutlistregex = '.*?strava\.com\/api\/v3\/athlete\/activities'
|
||||
stravaworkoutlisttester = re.compile(stravaworkoutlistregex)
|
||||
|
||||
stravastreamregex = '.*?strava\.com\/api\/v3\/activities\/\d+\/streams\/(\w.*?)\?'
|
||||
stravastreamtester = re.compile(stravastreamregex)
|
||||
|
||||
stravasummaryregex = '.*?strava\.com\/api\/v3\/activities\/\d+$'
|
||||
stravasummarytester = re.compile(stravasummaryregex)
|
||||
|
||||
if stravatester.match(args[0]):
|
||||
if stravaworkoutlisttester.match(args[0]):
|
||||
return MockResponse(stravaworkoutlist,200)
|
||||
if stravastreamtester.match(args[0]):
|
||||
metric = stravastreamtester.match(args[0]).group(1)
|
||||
json_data = stravastreamjson[metric]
|
||||
return MockResponse(json_data,200)
|
||||
elif stravasummarytester.match(args[0]):
|
||||
return MockResponse(stravasummaryjson,200)
|
||||
|
||||
if c2tester.match(args[0]):
|
||||
if c2strokestester.match(args[0]):
|
||||
@@ -245,170 +274,22 @@ class StravaObjects(DjangoTestCase):
|
||||
self.r.save()
|
||||
self.c.login(username='john',password='koeinsloot')
|
||||
|
||||
@patch('rowers.stravastuff.requests.post', side_effects=mocked_requests)
|
||||
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
def test_strava_list(self, mock_get):
|
||||
response = self.c.get('/rowers/workout/stravaimport',follow=True)
|
||||
response = self.c.get('/rowers/workout/stravaimport/',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
@patch('rowers.utils.requests.get', side_effect=mocked_requests)
|
||||
def test_strava_import(self, mock_get):
|
||||
|
||||
def test_strokedata(self):
|
||||
timejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
|
||||
velojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r'))
|
||||
distancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r'))
|
||||
latlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
|
||||
hrjson = json.load(open('rowers/testdata/stravahrtestdata.txt','r'))
|
||||
spmjson = json.load(open('rowers/testdata/stravaspmtestdata.txt','r'))
|
||||
workoutsummary = json.load(open('rowers/testdata/stravasummarytestdata.txt','r'))
|
||||
workoutsummary['timezone'] = "Etc/UTC"
|
||||
startdatetime = workoutsummary['start_date']
|
||||
response = self.c.get('/rowers/workout/stravaimport/12',follow=True)
|
||||
|
||||
|
||||
t = np.array(timejson[0]['data'])
|
||||
d = np.array(distancejson[0]['data'])
|
||||
nr_rows = len(t)
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/1/edit',
|
||||
status_code=301,target_status_code=200)
|
||||
|
||||
try:
|
||||
spm = np.array( spmjson[1]['data'])
|
||||
except IndexError:
|
||||
spm = np.zeros(nr_rows)
|
||||
|
||||
try:
|
||||
hr = np.array(hrjson[1]['data'])
|
||||
except IndexError:
|
||||
hr = np.zeros(nr_rows)
|
||||
|
||||
try:
|
||||
velo = np.array(velojson[1]['data'])
|
||||
except IndexError:
|
||||
velo = np.zeros(nr_rows)
|
||||
|
||||
dt = np.diff(t).mean()
|
||||
wsize = round(5./dt)
|
||||
|
||||
from stravastuff import ewmovingaverage
|
||||
velo2 = ewmovingaverage(velo,wsize)
|
||||
coords = np.array(latlongjson[0]['data'])
|
||||
try:
|
||||
lat = coords[:,0]
|
||||
lon = coords[:,1]
|
||||
except IndexError:
|
||||
lat = np.zeros(len(t))
|
||||
lon = np.zeros(len(t))
|
||||
|
||||
|
||||
|
||||
|
||||
strokelength = velo*60./(spm)
|
||||
strokelength[np.isinf(strokelength)] = 0.0
|
||||
|
||||
pace = 500./(1.0*velo2)
|
||||
pace[np.isinf(pace)] = 0.0
|
||||
|
||||
strokedata = pd.DataFrame({'t':10*t,
|
||||
'd':10*d,
|
||||
'p':10*pace,
|
||||
'spm':spm,
|
||||
'hr':hr,
|
||||
'lat':lat,
|
||||
'lon':lon,
|
||||
'strokelength':strokelength,
|
||||
})
|
||||
|
||||
from rowers.views import add_workout_from_strokedata
|
||||
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
u.first_name = 'John'
|
||||
u.last_name = 'Sander'
|
||||
u.save()
|
||||
r = Rower.objects.create(user=u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
|
||||
res = add_workout_from_strokedata(u,1,workoutsummary,strokedata,
|
||||
source='strava')
|
||||
|
||||
def test_strokedatanohr(self):
|
||||
timejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
|
||||
velojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r'))
|
||||
distancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r'))
|
||||
latlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
|
||||
hrjson = json.load(open('rowers/testdata/stravahrtestnodata.txt','r'))
|
||||
spmjson = json.load(open('rowers/testdata/stravaspmtestdata.txt','r'))
|
||||
workoutsummary = json.load(open('rowers/testdata/stravasummarytestdata.txt','r'))
|
||||
workoutsummary['timezone'] = "Etc/UTC"
|
||||
startdatetime = workoutsummary['start_date']
|
||||
|
||||
|
||||
t = np.array(timejson[0]['data'])
|
||||
d = np.array(distancejson[0]['data'])
|
||||
nr_rows = len(t)
|
||||
|
||||
try:
|
||||
spm = np.array( spmjson[1]['data'])
|
||||
except IndexError:
|
||||
spm = np.zeros(nr_rows)
|
||||
|
||||
try:
|
||||
hr = np.array(hrjson[1]['data'])
|
||||
except IndexError:
|
||||
hr = np.zeros(nr_rows)
|
||||
|
||||
try:
|
||||
velo = np.array(velojson[1]['data'])
|
||||
except IndexError:
|
||||
velo = np.zeros(nr_rows)
|
||||
|
||||
dt = np.diff(t).mean()
|
||||
wsize = round(5./dt)
|
||||
|
||||
from stravastuff import ewmovingaverage
|
||||
velo2 = ewmovingaverage(velo,wsize)
|
||||
coords = np.array(latlongjson[0]['data'])
|
||||
try:
|
||||
lat = coords[:,0]
|
||||
lon = coords[:,1]
|
||||
except IndexError:
|
||||
lat = np.zeros(len(t))
|
||||
lon = np.zeros(len(t))
|
||||
|
||||
|
||||
|
||||
|
||||
strokelength = velo*60./(spm)
|
||||
strokelength[np.isinf(strokelength)] = 0.0
|
||||
|
||||
pace = 500./(1.0*velo2)
|
||||
pace[np.isinf(pace)] = 0.0
|
||||
|
||||
strokedata = pd.DataFrame({'t':10*t,
|
||||
'd':10*d,
|
||||
'p':10*pace,
|
||||
'spm':spm,
|
||||
'hr':hr,
|
||||
'lat':lat,
|
||||
'lon':lon,
|
||||
'strokelength':strokelength,
|
||||
})
|
||||
|
||||
from rowers.views import add_workout_from_strokedata
|
||||
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
u.first_name = 'John'
|
||||
u.last_name = 'Sander'
|
||||
u.save()
|
||||
r = Rower.objects.create(user=u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
res = add_workout_from_strokedata(u,1,workoutsummary,strokedata,
|
||||
source='strava')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user