From 4dbb54b5e7f8f27cb1ecaab53b64466b4bbef383 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Fri, 25 Jan 2019 16:05:55 +0000 Subject: [PATCH] Added an endpoint to get letter-branding by id. --- app/dao/letter_branding_dao.py | 4 ++++ app/letter_branding/letter_branding_rest.py | 10 +++++++++- tests/app/dao/test_letter_branding_dao.py | 20 ++++++++++++++++++- .../test_letter_branding_rest.py | 18 ++++++++++++++++- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/app/dao/letter_branding_dao.py b/app/dao/letter_branding_dao.py index 3b735df41..e07960131 100644 --- a/app/dao/letter_branding_dao.py +++ b/app/dao/letter_branding_dao.py @@ -3,6 +3,10 @@ from app.dao.dao_utils import transactional from app.models import LetterBranding +def dao_get_letter_branding_by_id(letter_branding_id): + return LetterBranding.query.filter(LetterBranding.id == letter_branding_id).one() + + def dao_get_letter_branding_by_domain(domain): return LetterBranding.query.filter( LetterBranding.domain == domain diff --git a/app/letter_branding/letter_branding_rest.py b/app/letter_branding/letter_branding_rest.py index fc0301f28..b7bfde001 100644 --- a/app/letter_branding/letter_branding_rest.py +++ b/app/letter_branding/letter_branding_rest.py @@ -5,7 +5,8 @@ from flask import Blueprint, jsonify, request from app.dao.letter_branding_dao import ( dao_get_all_letter_branding, dao_create_letter_branding, - dao_update_letter_branding + dao_update_letter_branding, + dao_get_letter_branding_by_id ) from app.errors import register_errors from app.letter_branding.letter_branding_schema import post_letter_branding_schema @@ -53,6 +54,13 @@ def get_all_letter_brands(): return jsonify([lb.serialize() for lb in letter_brands]) +@letter_branding_blueprint.route('/', methods=['GET']) +def get_letter_brand_by_id(letter_branding_id): + letter_branding = dao_get_letter_branding_by_id(letter_branding_id) + + return jsonify(letter_branding.serialize()), 200 + + @letter_branding_blueprint.route('', methods=['POST']) def create_letter_brand(): data = request.get_json() diff --git a/tests/app/dao/test_letter_branding_dao.py b/tests/app/dao/test_letter_branding_dao.py index fee02e665..d8e056ef7 100644 --- a/tests/app/dao/test_letter_branding_dao.py +++ b/tests/app/dao/test_letter_branding_dao.py @@ -1,13 +1,31 @@ +import uuid + +import pytest +from sqlalchemy.exc import SQLAlchemyError + from app.dao.letter_branding_dao import ( dao_get_letter_branding_by_domain, dao_get_all_letter_branding, dao_create_letter_branding, - dao_update_letter_branding + dao_update_letter_branding, + dao_get_letter_branding_by_id ) from app.models import LetterBranding from tests.app.db import create_letter_branding +def test_dao_get_letter_branding_by_id(notify_db_session): + letter_branding = create_letter_branding() + result = dao_get_letter_branding_by_id(letter_branding.id) + + assert result == letter_branding + + +def test_dao_get_letter_brand_by_id_raises_exception_if_does_not_exist(notify_db_session): + with pytest.raises(expected_exception=SQLAlchemyError): + dao_get_letter_branding_by_id(uuid.uuid4()) + + def test_dao_get_letter_branding_by_domain_returns_none_if_no_matching_domains(notify_db_session): result = dao_get_letter_branding_by_domain(domain="test.domain") assert not result diff --git a/tests/app/letter_branding/test_letter_branding_rest.py b/tests/app/letter_branding/test_letter_branding_rest.py index 4ff066a35..4564fc466 100644 --- a/tests/app/letter_branding/test_letter_branding_rest.py +++ b/tests/app/letter_branding/test_letter_branding_rest.py @@ -1,5 +1,5 @@ import json - +import uuid from app.models import LetterBranding from tests import create_authorization_header @@ -24,6 +24,22 @@ def test_get_all_letter_brands(client, notify_db_session): assert False +def test_get_letter_branding_by_id(client, notify_db_session): + hm_gov = create_letter_branding() + create_letter_branding( + name='test domain', filename='test-domain', domain='test.domain' + ) + response = client.get('/letter-branding/{}'.format(hm_gov.id), headers=[create_authorization_header()]) + + assert response.status_code == 200 + assert json.loads(response.get_data(as_text=True)) == hm_gov.serialize() + + +def test_get_letter_branding_by_id_returns_404_if_does_not_exist(client, notify_db_session): + response = client.get('/letter-branding/{}'.format(uuid.uuid4()), headers=[create_authorization_header()]) + assert response.status_code == 404 + + def test_create_letter_branding(client, notify_db_session): form = { 'name': 'super brand',