def test_runs1(db_instance): email = 'mock' + str(random.randint(1, 101)) + '@mock.com' password = '******' example = User() example.email = email example.set_password(password) runs_id = ['1', '2', '3', '4', '5', '6', '7'] db_instance.session.add(example) for i in runs_id: run = Run() run.runner = example run.strava_id = i db_instance.session.add(run) db_instance.session.commit() user_id = example.get_id() previous_run = db_instance.session.query(Run).filter( Run.runner_id == example.get_id(), Run.id < 7).order_by(Run.id.desc()).first() assert previous_run.id == 6 q = db_instance.session.query(Run).filter( Run.runner_id == example.get_id(), Run.id == 4) q.delete(synchronize_session=False) db_instance.session.commit() previous_run = db_instance.session.query(Run).filter( Run.runner_id == example.get_id(), Run.id < 5).order_by(Run.id.desc()).first() assert previous_run.id == 3 _delete_user(example)
def test_runs2(db_instance): email = 'mock' + str(random.randint(1, 101)) + '@mock.com' password = '******' example = User() example.email = email example.set_password(password) runs_id = ['1', '2', '3', '4', '5', '6', '7'] db_instance.session.add(example) for i in runs_id: run = Run() run.runner = example run.strava_id = i db_instance.session.add(run) db_instance.session.commit() user_id = example.get_id() runId = 150 run = db_instance.session.query(Run).filter( Run.runner_id == example.get_id(), Run.id == runId).first() assert run == None _delete_user(example)
def post(self): run_dict = request.json protocol_id = extract_protocol_id(run_dict) run_dict.pop('protocol', None) if not protocol_id: abort(400) return protocol = Protocol.query.get(protocol_id) if not protocol: abort(400) return run = Run() run_version = RunVersion(data=strip_metadata(run_dict), server_version=app.config['SERVER_VERSION']) run_version.run = run run.current = run_version run.protocol_version_id = protocol.version_id add_owner(run) db.session.add_all([run, run_version]) samples = get_samples(run, run_version) if samples: for sample in samples: db.session.merge(sample) db.session.commit() add_policy(path=f"/run/{str(run.id)}", method="GET") add_policy(path=f"/run/{str(run.id)}", method="PUT") add_policy(path=f"/run/{str(run.id)}", method="DELETE") return run_to_dict(run, run_version)
def test_read_runs(self): # Load example runs. example_run_1 = Run() example_run_1.id = 6 example_run_1.data = { "name": "Example Run 9", "notes": "Example notes!", "data_link": "https://s3.amazon.com/..." } db.session.add(example_run_1) example_run_1_permission = RunPermission() example_run_1_permission.run = example_run_1 example_run_1_permission.user_id = 42 db.session.add(example_run_1_permission) response = self.client.get("/run") if response.json is None: pprint.pprint(response) self.assertEqual(response.json, [{ "id": 6, "name": "Example Run 9", "notes": "Example notes!", "data_link": "https://s3.amazon.com/..." }])
def _copy_run(runs, index): r1 = Run() r1.runner = runs[index].runner r1.strava_id = runs[index].strava_id r1.name = runs[index].name r1.average_speed = runs[index].average_speed r1.elapsed_time = runs[index].elapsed_time r1.distance = runs[index].distance return r1
def test_objective(client, db_instance): #ensure login user = ensure_logged_in(client, db_instance) #create 2 fake runs runs_id = ['1', '2'] for i in runs_id: run = Run() run.runner = user run.strava_id = i run.distance = 1000 run.average_speed = 10 run.elapsed_time= 10000 db_instance.session.add(run) db_instance.session.commit() #set objective objective_distance = 1000 _setObjective(user, objective_distance) #check that the objective is correctly settend in the database assert db_instance.session.query(Objectives).first().distance == 1000 #check that the objective is correctly showed in the view res = client.get('/') html = pq(res.data) objective_view = km2m(float(html("#obj_dist").html())) #check the view converting the distance to km assert objective_view == objective_distance
async def create_run( run: RunModel, enforcer: casbin.Enforcer = Depends(get_enforcer), db: Session = Depends(get_db), current_user: Auth0ClaimsPatched = Depends(get_current_user)): run_dict = run.dict() protocol_id = extract_protocol_id(run_dict) run_dict.pop('protocol', None) if not protocol_id: raise HTTPException(status_code=400, detail='Invalid Protocol ID') protocol = db.query(Protocol).get(protocol_id) if not protocol: raise HTTPException(status_code=400, detail='Invalid Protocol (Not Found)') new_run = Run() new_run_version = RunVersion(data=strip_metadata(run_dict), server_version=settings.server_version) new_run_version.run = new_run new_run.current = new_run_version new_run.protocol_version_id = protocol.version_id add_owner(new_run, current_user.username) db.add_all([new_run, new_run_version]) samples = get_samples(new_run_version, protocol.current) if samples: for sample in samples: db.merge(sample) db.commit() add_policy(enforcer, user=current_user.username, path=f"/run/{str(new_run.id)}", method="GET") add_policy(enforcer, user=current_user.username, path=f"/run/{str(new_run.id)}", method="PUT") add_policy(enforcer, user=current_user.username, path=f"/run/{str(new_run.id)}", method="DELETE") return run_to_dict(new_run, new_run_version)
def test_objective(client, db_instance): KILOMETERS = 2 # simulate login user = ensure_logged_in(client, db_instance) # generate some runs runs = [] for i in ['1', '2']: run = Run() run.runner = user run.strava_id = i run.name = "Run " + i run.average_speed = float(i) #distance in meters run.distance = KILOMETERS * 1000 run.elapsed_time = float(i) * float(i) * 1000 runs.append(run) db_instance.session.add(run) db_instance.session.commit() #Testing total distance in "PROGRESS" field res = client.get("/") html = pq(res.data) total_distance = html("#tot_dist").html() assert float(total_distance) == float(len(runs) * KILOMETERS) #Testing remaining kilometers in "PROGRESS" field _setObjective(user, 30000) res = client.get("/") html = pq(res.data) rem_km = float(html("#rem_KM").html()) objective = float(html("#obj_dist").html()) total_distance = float(html("#tot_dist").html()) assert (rem_km >= 0.0) assert rem_km == (objective - total_distance)
def test_compare_stats(client, db_instance): # simulate login user = ensure_logged_in(client, db_instance) # generate some runs runs = [] for i in ['1', '2']: run = Run() run.runner = user run.strava_id = i run.name = "Run " + i run.average_speed = float(i) run.elapsed_time = float(i) * float(i) * 1000 runs.append(run) db_instance.session.add(run) db_instance.session.commit() # route to comparisons page res = client.post('/comparisons', data={'runs': ['1', '2']}, follow_redirects=True) # parse html page html = pq(res.data) table = html("#comparison-table") trs = table("tr") # check number of rows equals given runs (2) assert len(trs) - 1 == 2 # check html table shows correct results for i in range(1, len(trs)): tds = trs.eq(i)("td") assert runs[i - 1].average_speed == tds[1].text.strip() assert runs[i - 1].elapsed_time == tds[2].text.strip()
def test_delete_user(client, db_instance): email = '*****@*****.**' password = '******' client.post( '/create_user', data=dict( email=email, firstname='Jhon', lastname='Doe', password=password, age='22', weight='75', max_hr='150', rest_hr='60', vo2max='10' ), follow_redirects=True ) user = db_instance.session.query(User).filter(User.email == email).first() user_id = user.get_id() runs_id = ['1', '2', '3'] objective = Objectives() objective.distance = 1000 objective.user = user for id in runs_id: run = Run() run.runner = user run.strava_id = id run.distance = 1500 run.average_speed = 10 run.elapsed_time = 200000 db_instance.session.add(run) db_instance.session.add(objective) db_instance.session.commit() client.post( '/login', data=dict( email=email, password=password ), follow_redirects=True ) client.post( '/delete_user', data=dict( password=password ), follow_redirects=True ) user = db_instance.session.query(User).filter(User.email == email).first() assert user is None run = db_instance.session.query(Run).filter(Run.runner_id == user_id).first() assert run is None objective = db_instance.session.query(Objectives).filter(Objectives.user_id == user_id).first() assert objective is None
def test_challenge_run(client, db_instance): # simulate login user = ensure_logged_in(client, db_instance) # generate some runs runs = [] for i in ['1', '2', '3', '4', '5']: # creating 5 incrementally better runs, except for the fourth one which is bad run = Run() run.runner = user run.strava_id = i run.name = "Run " + i if i != '4': run.average_speed = float(i) run.elapsed_time = float(i) * 1000 run.distance = 25 + float(i) else: run.average_speed = 0 run.elapsed_time = 1 run.distance = 1 runs.append(run) # truncate runs table db_instance.session.query(Run).delete() db_instance.session.flush() db_instance.session.commit() r1 = _copy_run(runs, 0) r2 = _copy_run(runs, 1) db_instance.session.add(r1) db_instance.session.add(r2) db_instance.session.flush() db_instance.session.commit() # route back to index page res = client.post('/challenge', data={'runs': ['1']}, follow_redirects=True) challenged = db_instance.session.query(Challenge).filter( user.id == Run.runner_id).first() assert challenged assert challenged.run_id == 1 r3 = _copy_run(runs, 2) r4 = _copy_run(runs, 3) r5 = _copy_run(runs, 4) db_instance.session.add(r3) db_instance.session.add(r4) db_instance.session.add(r5) db_instance.session.flush() db_instance.session.commit() toCompare = db_instance.session.query(Run).filter( user.id == Run.runner_id, Run.id > challenged.latest_run_id).all() assert len(toCompare) == 3 better = 0 worse = 0 for run in toCompare: if run.average_speed > challenged.run.average_speed and run.distance > challenged.run.distance: better += 1 else: worse += 1 assert better == 2 assert worse == 1 assert better + worse == 3 res = client.post('/challenge', data={'runs': ['1']}, follow_redirects=True) challenged = db_instance.session.query(Challenge).filter( user.id == Run.runner_id).first() assert not challenged
def activity2run(user, activity): """Used by fetch_runs to convert a strava run into a DB entry. """ run = Run() run.runner = user run.strava_id = activity.id run.name = activity.name run.distance = activity.distance run.elapsed_time = activity.elapsed_time.total_seconds() run.average_speed = activity.average_speed run.average_heartrate = activity.average_heartrate run.total_elevation_gain = activity.total_elevation_gain run.start_date = activity.start_date return run