From e42b15ac7ac58c364e5e8000df3173e947ca9f7e Mon Sep 17 00:00:00 2001 From: Imdad Ahad Date: Wed, 8 Mar 2017 17:21:02 +0000 Subject: [PATCH 1/2] Split schema for provider and provider history --- app/schemas.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/schemas.py b/app/schemas.py index fa1523f9e..c22e2257c 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -169,9 +169,19 @@ class ProviderDetailsSchema(BaseSchema): strict = True -class ProviderDetailsHistorySchema(ProviderDetailsSchema): +class ProviderDetailsHistorySchema(BaseSchema): + created_by_user = fields.Nested( + UserSchema, + attribute='created_by', + dump_to='created_by', + only=['id', 'name', 'email_address'], + dump_only=True + ) + class Meta: model = models.ProviderDetailsHistory + exclude = ("provider_rates", "provider_stats") + strict = True class ServiceSchema(BaseSchema): From ed8dcf5fa1bb86734c6b5f08d5af6845f6f51c7a Mon Sep 17 00:00:00 2001 From: Imdad Ahad Date: Wed, 8 Mar 2017 23:15:56 +0000 Subject: [PATCH 2/2] Refactor schemas and add tests to ensure user is returned on provider schema dump --- app/schemas.py | 16 ++-------------- tests/app/test_schemas.py | 40 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/app/schemas.py b/app/schemas.py index c22e2257c..8c76b99a4 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -155,13 +155,7 @@ class UserUpdatePasswordSchema(BaseSchema): class ProviderDetailsSchema(BaseSchema): - created_by_user = fields.Nested( - UserSchema, - attribute='created_by', - dump_to='created_by', - only=['id', 'name', 'email_address'], - dump_only=True - ) + created_by = fields.Nested(UserSchema, only=['id', 'name', 'email_address'], dump_only=True) class Meta: model = models.ProviderDetails @@ -170,13 +164,7 @@ class ProviderDetailsSchema(BaseSchema): class ProviderDetailsHistorySchema(BaseSchema): - created_by_user = fields.Nested( - UserSchema, - attribute='created_by', - dump_to='created_by', - only=['id', 'name', 'email_address'], - dump_only=True - ) + created_by = fields.Nested(UserSchema, only=['id', 'name', 'email_address'], dump_only=True) class Meta: model = models.ProviderDetailsHistory diff --git a/tests/app/test_schemas.py b/tests/app/test_schemas.py index 1d66f3290..4d435e09e 100644 --- a/tests/app/test_schemas.py +++ b/tests/app/test_schemas.py @@ -1,6 +1,10 @@ import pytest from marshmallow import ValidationError +from sqlalchemy import desc + +from app.dao.provider_details_dao import dao_update_provider_details +from app.models import ProviderDetailsHistory def test_job_schema_doesnt_return_notifications(sample_notification_with_job): @@ -75,3 +79,39 @@ def test_user_update_schema_rejects_disallowed_attribute_keys(user_attribute): data, errors = user_update_schema_load_json.load(update_dict) assert excinfo.value.messages['_schema'][0] == 'Unknown field name {}'.format(user_attribute) + + +def test_provider_details_schema_returns_user_details( + mocker, + sample_user, + current_sms_provider +): + from app.schemas import provider_details_schema + mocker.patch('app.provider_details.switch_providers.get_user_by_id', return_value=sample_user) + current_sms_provider.created_by = sample_user + data = provider_details_schema.dump(current_sms_provider).data + + assert sorted(data['created_by'].keys()) == sorted(['id', 'email_address', 'name']) + + +def test_provider_details_history_schema_returns_user_details( + mocker, + sample_user, + restore_provider_details, + current_sms_provider +): + from app.schemas import provider_details_schema + mocker.patch('app.provider_details.switch_providers.get_user_by_id', return_value=sample_user) + current_sms_provider.created_by_id = sample_user.id + data = provider_details_schema.dump(current_sms_provider).data + + dao_update_provider_details(current_sms_provider) + + current_sms_provider_in_history = ProviderDetailsHistory.query.filter( + ProviderDetailsHistory.id == current_sms_provider.id + ).order_by( + desc(ProviderDetailsHistory.version) + ).first() + data = provider_details_schema.dump(current_sms_provider_in_history).data + + assert sorted(data['created_by'].keys()) == sorted(['id', 'email_address', 'name'])