Added choose_service using services_dao.

This commit is contained in:
Nicholas Staples
2016-01-18 11:15:14 +00:00
parent 4e2019c949
commit a09ac6cbf5
5 changed files with 74 additions and 15 deletions
+25
View File
@@ -1,8 +1,10 @@
from flask import url_for
from datetime import datetime from datetime import datetime
from client.errors import HTTPError, InvalidResponse from client.errors import HTTPError, InvalidResponse
from sqlalchemy.orm import load_only from sqlalchemy.orm import load_only
from flask.ext.login import current_user from flask.ext.login import current_user
from app import (db, notifications_api_client) from app import (db, notifications_api_client)
from app.main.utils import BrowsableItem
def insert_new_service(service_name, user_id): def insert_new_service(service_name, user_id):
@@ -18,6 +20,10 @@ def get_service_by_id(id_):
return notifications_api_client.get_service(id_) return notifications_api_client.get_service(id_)
def get_services():
return notifications_api_client.get_services()
def unrestrict_service(service_id): def unrestrict_service(service_id):
resp = notifications_api_client.get_service(service_id) resp = notifications_api_client.get_service(service_id)
if resp['data']['restricted']: if resp['data']['restricted']:
@@ -56,3 +62,22 @@ def find_service_by_service_name(service_name):
def find_all_service_names(): def find_all_service_names():
resp = notifications_api_client.get_services() resp = notifications_api_client.get_services()
return [x['name'] for x in resp['data']] return [x['name'] for x in resp['data']]
class ServicesBrowsableItem(BrowsableItem):
@property
def title(self):
return self._item['name']
@property
def link(self):
return url_for('main.service_dashboard', service_id=self._item['id'])
@property
def destructive(self):
return False
@property
def hint(self):
return "Some service hint here"
+26
View File
@@ -0,0 +1,26 @@
class BrowsableItem(object):
"""
Maps for the template browse-list.
"""
def __init__(self, item, *args, **kwargs):
self._item = item
super(BrowsableItem, self).__init__()
@property
def title(self):
pass
@property
def link(self):
pass
@property
def hint(self):
pass
@property
def destructive(self):
pass
+11 -2
View File
@@ -1,9 +1,18 @@
from flask import render_template from flask import (render_template, redirect, url_for)
from flask_login import login_required from flask_login import login_required
from app.main.dao import services_dao
from app.main import main from app.main import main
@main.route("/services") @main.route("/services")
@login_required @login_required
def choose_service(): def choose_service():
return render_template('views/choose-service.html') services = services_dao.get_services()
# If there is only one service redirect
# to the service dashboard.
if len(services['data']) == 1:
return redirect(url_for(
'main.service_dashboard', service_id=services['data'][0]['id']))
return render_template(
'views/choose-service.html',
services=[services_dao.ServicesBrowsableItem(x) for x in services['data']])
+1 -10
View File
@@ -11,16 +11,7 @@
Choose service Choose service
</h1> </h1>
{{ browse_list([ {{ browse_list(services) }}
{
'title': 'MOT Reminders',
'link': url_for('.service_dashboard', service_id=123)
},
{
'title': 'Vehicle Tax',
'link': url_for('.service_dashboard', service_id=123)
},
]) }}
{{ browse_list([ {{ browse_list([
{ {
'title': 'Add a new service…', 'title': 'Add a new service…',
+11 -3
View File
@@ -1,15 +1,23 @@
from tests import create_test_user from tests import create_test_user
from flask import url_for from flask import url_for
from app.models import User
def test_should_show_choose_services_page(app_, def test_should_show_choose_services_page(app_,
db_, db_,
db_session, db_session,
active_user): active_user,
mock_get_services):
with app_.test_request_context(): with app_.test_request_context():
with app_.test_client() as client: with app_.test_client() as client:
client.login(active_user) user = User.query.first()
client.login(user)
response = client.get(url_for('main.choose_service')) response = client.get(url_for('main.choose_service'))
assert response.status_code == 200 assert response.status_code == 200
assert 'Choose service' in response.get_data(as_text=True) resp_data = response.get_data(as_text=True)
assert 'Choose service' in resp_data
services = mock_get_services.side_effect()
assert mock_get_services.called
assert services['data'][0]['name'] in resp_data
assert services['data'][1]['name'] in resp_data