From 4a14225d04b985c80edb0c49c302035feb7c149a Mon Sep 17 00:00:00 2001 From: Katie Smith Date: Fri, 9 Feb 2018 11:17:13 +0000 Subject: [PATCH] Change Organisation DAO update method - Changed the organisation DAO update method to only make 1 query - Updated the update rest endpoint to not return an organisation when the update is successful --- app/dao/organisation_dao.py | 8 ++++---- app/organisation/rest.py | 12 ++++++------ tests/app/dao/test_organisation_dao.py | 2 +- tests/app/organisation/test_rest.py | 17 ++++++++++++++++- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/app/dao/organisation_dao.py b/app/dao/organisation_dao.py index fd5b863b2..80708f266 100644 --- a/app/dao/organisation_dao.py +++ b/app/dao/organisation_dao.py @@ -19,7 +19,7 @@ def dao_create_organisation(organisation): @transactional -def dao_update_organisation(organisation, **kwargs): - for key, value in kwargs.items(): - setattr(organisation, key, value) - db.session.add(organisation) +def dao_update_organisation(organisation_id, **kwargs): + return Organisation.query.filter_by(id=organisation_id).update( + kwargs + ) diff --git a/app/organisation/rest.py b/app/organisation/rest.py index 659c073ae..f27525b22 100644 --- a/app/organisation/rest.py +++ b/app/organisation/rest.py @@ -6,7 +6,7 @@ from app.dao.organisation_dao import ( dao_get_organisation_by_id, dao_update_organisation, ) -from app.errors import register_errors +from app.errors import register_errors, InvalidRequest from app.models import Organisation from app.organisation.organisation_schema import ( post_create_organisation_schema, @@ -48,10 +48,10 @@ def create_organisation(): @organisation_blueprint.route('/', methods=['POST']) def update_organisation(organisation_id): data = request.get_json() - validate(data, post_update_organisation_schema) + result = dao_update_organisation(organisation_id, **data) - fetched_organisation = dao_get_organisation_by_id(organisation_id) - dao_update_organisation(fetched_organisation, **data) - - return jsonify(fetched_organisation.serialize()), 200 + if result: + return '', 204 + else: + raise InvalidRequest("Organisation not found", 404) diff --git a/tests/app/dao/test_organisation_dao.py b/tests/app/dao/test_organisation_dao.py index 0ab662e31..a72670cb8 100644 --- a/tests/app/dao/test_organisation_dao.py +++ b/tests/app/dao/test_organisation_dao.py @@ -45,7 +45,7 @@ def test_update_organisation(notify_db, notify_db_session): assert len(organisation) == 1 assert organisation[0].name != updated_name - dao_update_organisation(organisation[0], name=updated_name) + dao_update_organisation(organisation[0].id, **{'name': updated_name}) organisation = Organisation.query.all() diff --git a/tests/app/organisation/test_rest.py b/tests/app/organisation/test_rest.py index 949f828ef..d9628016c 100644 --- a/tests/app/organisation/test_rest.py +++ b/tests/app/organisation/test_rest.py @@ -79,7 +79,7 @@ def test_post_update_organisation_updates_fields(admin_request, notify_db_sessio 'organisation.update_organisation', _data=data, organisation_id=org.id, - _expected_status=200 + _expected_status=204 ) organisation = Organisation.query.all() @@ -88,3 +88,18 @@ def test_post_update_organisation_updates_fields(admin_request, notify_db_sessio assert organisation[0].id == org.id assert organisation[0].name == data['name'] assert organisation[0].active == data['active'] + + +def test_post_update_organisation_gives_404_status_if_org_does_not_exist(admin_request, notify_db_session): + data = {'name': 'new organisation name'} + + admin_request.post( + 'organisation.update_organisation', + _data=data, + organisation_id='31d42ce6-3dac-45a7-95cb-94423d5ca03c', + _expected_status=404 + ) + + organisation = Organisation.query.all() + + assert not organisation