Activities: database and routes update + unit tests

This commit is contained in:
SamR1 2018-01-21 19:45:13 +01:00
parent 3f0b3844d4
commit 5f53d2ae13
5 changed files with 149 additions and 5 deletions

View File

@ -1,14 +1,35 @@
from flask import Blueprint, jsonify from flask import Blueprint, jsonify
from ..users.utils import authenticate from ..users.utils import authenticate
from .models import Activity from .models import Activity, Sport
activities_blueprint = Blueprint('activities', __name__) activities_blueprint = Blueprint('activities', __name__)
@activities_blueprint.route('/sports', methods=['GET'])
@authenticate
def get_sports(auth_user_id):
"""Get all sports"""
sports = Sport.query.all()
sports_list = []
for sport in sports:
sport_object = {
'id': sport.id,
'label': sport.label
}
sports_list.append(sport_object)
response_object = {
'status': 'success',
'data': {
'sports': sports_list
}
}
return jsonify(response_object), 200
@activities_blueprint.route('/activities', methods=['GET']) @activities_blueprint.route('/activities', methods=['GET'])
@authenticate @authenticate
def get_activities(user_id): def get_activities(auth_user_id):
"""Get all activities""" """Get all activities"""
activities = Activity.query.all() activities = Activity.query.all()
activities_list = [] activities_list = []
@ -17,7 +38,9 @@ def get_activities(user_id):
'id': activity.id, 'id': activity.id,
'user_id': activity.user_id, 'user_id': activity.user_id,
'sport_id': activity.sport_id, 'sport_id': activity.sport_id,
'creation_date': activity.creation_date 'creation_date': activity.creation_date,
'activity_date': activity.activity_date,
'duration': activity.duration.seconds
} }
activities_list.append(activity_object) activities_list.append(activity_object)
response_object = { response_object = {

View File

@ -51,7 +51,8 @@ class Activity(db.Model):
return self.sport.label + \ return self.sport.label + \
" - " + self.activity_date.strftime('%Y-%m-%d') " - " + self.activity_date.strftime('%Y-%m-%d')
def __init__(self, user_id, sport_id, activity_date): def __init__(self, user_id, sport_id, activity_date, duration):
self.user_id = user_id self.user_id = user_id
self.sport_id = sport_id self.sport_id = sport_id
self.activity_date = activity_date self.activity_date = activity_date
self.duration = duration

View File

@ -0,0 +1,94 @@
import datetime
import json
from mpwo_api.tests.base import BaseTestCase
from mpwo_api.tests.utils import add_activity, add_sport, add_user
class TestActivitiesService(BaseTestCase):
"""Tests for Activities."""
def test_get_all_sports(self):
add_user('test', 'test@test.com', '12345678')
add_sport('cycling')
add_sport('running')
with self.client:
resp_login = self.client.post(
'/api/auth/login',
data=json.dumps(dict(
email='test@test.com',
password='12345678'
)),
content_type='application/json'
)
response = self.client.get(
'/api/sports',
headers=dict(
Authorization='Bearer ' + json.loads(
resp_login.data.decode()
)['auth_token']
)
)
data = json.loads(response.data.decode())
self.assertEqual(response.status_code, 200)
self.assertIn('success', data['status'])
self.assertEqual(len(data['data']['sports']), 2)
self.assertIn('cycling', data['data']['sports'][0]['label'])
self.assertIn('running', data['data']['sports'][1]['label'])
def test_get_all_activities(self):
add_user('test', 'test@test.com', '12345678')
add_user('toto', 'toto@toto.com', '12345678')
add_sport('cycling')
add_sport('running')
add_activity(
1,
2,
datetime.datetime.strptime('01/01/2018', '%d/%m/%Y'),
datetime.timedelta(seconds=1024))
add_activity(
2,
1,
datetime.datetime.strptime('23/01/2018', '%d/%m/%Y'),
datetime.timedelta(seconds=3600))
with self.client:
resp_login = self.client.post(
'/api/auth/login',
data=json.dumps(dict(
email='test@test.com',
password='12345678'
)),
content_type='application/json'
)
response = self.client.get(
'/api/activities',
headers=dict(
Authorization='Bearer ' + json.loads(
resp_login.data.decode()
)['auth_token']
)
)
data = json.loads(response.data.decode())
self.assertEqual(response.status_code, 200)
self.assertIn('success', data['status'])
self.assertEqual(len(data['data']['activities']), 2)
self.assertTrue('creation_date' in data['data']['activities'][0])
self.assertTrue('creation_date' in data['data']['activities'][1])
self.assertEqual('Tue, 23 Jan 2018 00:00:00 GMT',
data['data']['activities'][0][
'activity_date'])
self.assertEqual('Mon, 01 Jan 2018 00:00:00 GMT',
data['data']['activities'][1][
'activity_date'])
self.assertTrue('creation_date' in data['data']['activities'][1])
self.assertEqual(2, data['data']['activities'][0]['user_id'])
self.assertEqual(1, data['data']['activities'][1]['user_id'])
self.assertEqual(1, data['data']['activities'][0]['sport_id'])
self.assertEqual(2, data['data']['activities'][1]['sport_id'])
self.assertEqual(3600, data['data']['activities'][0]['duration'])
self.assertEqual(1024, data['data']['activities'][1]['duration'])

View File

@ -1,6 +1,7 @@
import datetime import datetime
from mpwo_api import db from mpwo_api import db
from mpwo_api.activities.models import Activity, Sport
from mpwo_api.users.models import User from mpwo_api.users.models import User
@ -21,3 +22,21 @@ def add_user_full(username, email, password):
db.session.add(user) db.session.add(user)
db.session.commit() db.session.commit()
return user return user
def add_sport(label):
sport = Sport(label=label)
db.session.add(sport)
db.session.commit()
return sport
def add_activity(user_id, sport_id, activity_date, duration):
activity = Activity(
user_id=user_id,
sport_id=sport_id,
activity_date=activity_date,
duration=duration)
db.session.add(activity)
db.session.commit()
return activity

View File

@ -1,6 +1,7 @@
import unittest import unittest
from mpwo_api import app, db from mpwo_api import app, db
from mpwo_api.activities.models import Sport
from mpwo_api.users.models import User from mpwo_api.users.models import User
@ -20,8 +21,14 @@ def init_data():
password='mpwoadmin') password='mpwoadmin')
admin.admin = True admin.admin = True
db.session.add(admin) db.session.add(admin)
db.session.add(Sport(label='Cycling (Sport)'))
db.session.add(Sport(label='Cycling (Transport)'))
db.session.add(Sport(label='Hiking'))
db.session.add(Sport(label='Mountain Biking'))
db.session.add(Sport(label='Running'))
db.session.add(Sport(label='Walking'))
db.session.commit() db.session.commit()
print('Admin created.') print('Initial data stored in database.')
def run_test(test_path='mpwo_api/tests'): def run_test(test_path='mpwo_api/tests'):