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

View File

@@ -1,8 +1,10 @@
from flask import url_for
from datetime import datetime
from client.errors import HTTPError, InvalidResponse
from sqlalchemy.orm import load_only
from flask.ext.login import current_user
from app import (db, notifications_api_client)
from app.main.utils import BrowsableItem
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_)
def get_services():
return notifications_api_client.get_services()
def unrestrict_service(service_id):
resp = notifications_api_client.get_service(service_id)
if resp['data']['restricted']:
@@ -56,3 +62,22 @@ def find_service_by_service_name(service_name):
def find_all_service_names():
resp = notifications_api_client.get_services()
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
app/main/utils.py Normal file
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

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 app.main.dao import services_dao
from app.main import main
@main.route("/services")
@login_required
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']])

View File

@@ -11,16 +11,7 @@
Choose service
</h1>
{{ browse_list([
{
'title': 'MOT Reminders',
'link': url_for('.service_dashboard', service_id=123)
},
{
'title': 'Vehicle Tax',
'link': url_for('.service_dashboard', service_id=123)
},
]) }}
{{ browse_list(services) }}
{{ browse_list([
{
'title': 'Add a new service…',

View File

@@ -1,15 +1,23 @@
from tests import create_test_user
from flask import url_for
from app.models import User
def test_should_show_choose_services_page(app_,
db_,
db_session,
active_user):
active_user,
mock_get_services):
with app_.test_request_context():
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'))
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