Refactor schema to improve error response

This commit is contained in:
Ken Tsang
2017-05-25 17:45:15 +01:00
parent 54d85fd8df
commit 1375bbe400
4 changed files with 12 additions and 15 deletions

View File

@@ -138,7 +138,7 @@ def dao_create_service(service, user, service_id=None, service_permissions=[SMS_
service.active = True
service.research_mode = False
def process_deprecated_service_permissions():
def deprecate_process_service_permissions():
for permission in service_permissions:
service_permission = ServicePermission(service_id=service.id, permission=permission)
service.permissions.append(service_permission)
@@ -148,7 +148,7 @@ def dao_create_service(service, user, service_id=None, service_permissions=[SMS_
if permission == LETTER_TYPE:
service.can_send_letters = True
def sync_flags(flag, notify_type):
def convert_flags(flag, notify_type):
if flag and notify_type not in service_permissions:
service_permission = ServicePermission(service_id=service.id, permission=notify_type)
service.permissions.append(service_permission)
@@ -156,10 +156,10 @@ def dao_create_service(service, user, service_id=None, service_permissions=[SMS_
service_permission = ServicePermission(service_id=service.id, permission=notify_type)
service.permissions.remove(service_permission)
sync_flags(service.can_send_international_sms, INTERNATIONAL_SMS_TYPE)
sync_flags(service.can_send_letters, LETTER_TYPE)
convert_flags(service.can_send_international_sms, INTERNATIONAL_SMS_TYPE)
convert_flags(service.can_send_letters, LETTER_TYPE)
process_deprecated_service_permissions()
deprecate_process_service_permissions()
db.session.add(service)

View File

@@ -247,7 +247,7 @@ class ServiceSchema(BaseSchema):
if len(set(permissions)) != len(permissions):
duplicates = list(set([x for x in permissions if permissions.count(x) > 1]))
raise ValueError('Service Permission duplicated: {}'.format(duplicates))
raise ValidationError('Duplicate Service Permission: {}'.format(duplicates))
@pre_load()
def format_for_data_model(self, in_data):
@@ -264,7 +264,7 @@ class ServiceSchema(BaseSchema):
in_data['can_send_international_sms'] = INTERNATIONAL_SMS_TYPE in [p.permission for p in permissions]
def deprecate_convert_flags_to_permissions():
def convert_flag(flag, notify_type):
def convert_flags(flag, notify_type):
if flag and notify_type not in str_permissions:
permission = ServicePermission(service_id=in_data['id'], permission=notify_type)
permissions.append(permission)
@@ -273,8 +273,8 @@ class ServiceSchema(BaseSchema):
if p.permission == notify_type:
permissions.remove(p)
convert_flag(in_data["can_send_international_sms"], INTERNATIONAL_SMS_TYPE)
convert_flag(in_data["can_send_letters"], LETTER_TYPE)
convert_flags(in_data["can_send_international_sms"], INTERNATIONAL_SMS_TYPE)
convert_flags(in_data["can_send_letters"], LETTER_TYPE)
if self.override_flag:
deprecate_override_flags()

View File

@@ -130,10 +130,7 @@ def update_service(service_id):
current_data = dict(service_schema.dump(fetched_service).data.items())
service_schema.set_override_flag(request.get_json().get('permissions') is not None)
current_data.update(request.get_json())
try:
update_dict = service_schema.load(current_data).data
except ValueError as e:
raise InvalidRequest(str(e), status_code=400)
update_dict = service_schema.load(current_data).data
dao_update_service(update_dict)
if service_going_live:

View File

@@ -21,7 +21,7 @@ from tests.app.conftest import (
sample_notification_with_job
)
from app.models import (
ServicePermission,
Service, ServicePermission,
KEY_TYPE_NORMAL, KEY_TYPE_TEAM, KEY_TYPE_TEST,
EMAIL_TYPE, SMS_TYPE, LETTER_TYPE, INTERNATIONAL_SMS_TYPE, INBOUND_SMS_TYPE
)
@@ -629,7 +629,7 @@ def test_update_permissions_with_duplicate_permissions_will_raise_error(client,
assert resp.status_code == 400
assert result['result'] == 'error'
assert "Service Permission duplicated: ['{}']".format(LETTER_TYPE) in result['message']
assert "Duplicate Service Permission: ['{}']".format(LETTER_TYPE) in result['message']['permissions']
def test_update_service_research_mode_throws_validation_error(notify_api, sample_service):