From a09ac6cbf5d74efc19d51b774ff700a30e7a2dc1 Mon Sep 17 00:00:00 2001 From: Nicholas Staples Date: Mon, 18 Jan 2016 11:15:14 +0000 Subject: [PATCH] Added choose_service using services_dao. --- app/main/dao/services_dao.py | 25 +++++++++++++++++++ app/main/utils.py | 26 ++++++++++++++++++++ app/main/views/choose_service.py | 13 ++++++++-- app/templates/views/choose-service.html | 11 +-------- tests/app/main/views/test_choose_services.py | 14 ++++++++--- 5 files changed, 74 insertions(+), 15 deletions(-) create mode 100644 app/main/utils.py diff --git a/app/main/dao/services_dao.py b/app/main/dao/services_dao.py index 08d68eb68..a46f7d1b4 100644 --- a/app/main/dao/services_dao.py +++ b/app/main/dao/services_dao.py @@ -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" diff --git a/app/main/utils.py b/app/main/utils.py new file mode 100644 index 000000000..ecb2c5d1e --- /dev/null +++ b/app/main/utils.py @@ -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 diff --git a/app/main/views/choose_service.py b/app/main/views/choose_service.py index e1f874448..fdd4d3d27 100644 --- a/app/main/views/choose_service.py +++ b/app/main/views/choose_service.py @@ -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']]) diff --git a/app/templates/views/choose-service.html b/app/templates/views/choose-service.html index 6f9594da2..f77b8d9b6 100644 --- a/app/templates/views/choose-service.html +++ b/app/templates/views/choose-service.html @@ -11,16 +11,7 @@ Choose service - {{ 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…', diff --git a/tests/app/main/views/test_choose_services.py b/tests/app/main/views/test_choose_services.py index 0db077aaa..48e70958a 100644 --- a/tests/app/main/views/test_choose_services.py +++ b/tests/app/main/views/test_choose_services.py @@ -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