Merge pull request #3470 from alphagov/enforce-service-permissions

Enforce correct naming of service permissions
This commit is contained in:
Chris Hill-Scott
2020-06-08 10:40:09 +01:00
committed by GitHub
2 changed files with 23 additions and 6 deletions

View File

@@ -39,7 +39,6 @@ class Service(JSONModel):
'letter_contact_block', 'letter_contact_block',
'message_limit', 'message_limit',
'name', 'name',
'permissions',
'prefix_sms', 'prefix_sms',
'research_mode', 'research_mode',
'service_callback_api', 'service_callback_api',
@@ -58,16 +57,24 @@ class Service(JSONModel):
'letter', 'letter',
) )
def __init__(self, _dict): ALL_PERMISSIONS = TEMPLATE_TYPES + (
'edit_folder_permissions',
super().__init__(_dict) 'email_auth',
if 'permissions' not in self._dict: 'inbound_sms',
self.permissions = {'email', 'sms', 'letter'} 'international_letters',
'international_sms',
'upload_document',
'upload_letters',
)
@classmethod @classmethod
def from_id(cls, service_id): def from_id(cls, service_id):
return cls(service_api_client.get_service(service_id)['data']) return cls(service_api_client.get_service(service_id)['data'])
@property
def permissions(self):
return self._dict.get('permissions', self.TEMPLATE_TYPES)
def update(self, **kwargs): def update(self, **kwargs):
return service_api_client.update_service(self.id, **kwargs) return service_api_client.update_service(self.id, **kwargs)
@@ -106,6 +113,8 @@ class Service(JSONModel):
return not self.trial_mode return not self.trial_mode
def has_permission(self, permission): def has_permission(self, permission):
if permission not in self.ALL_PERMISSIONS:
raise KeyError(f'{permission} is not a service permission')
return permission in self.permissions return permission in self.permissions
def get_page_of_jobs(self, page): def get_page_of_jobs(self, page):

View File

@@ -1,5 +1,7 @@
import uuid import uuid
import pytest
from app.models.organisation import Organisation from app.models.organisation import Organisation
from app.models.service import Service from app.models.service import Service
from app.models.user import User from app.models.user import User
@@ -247,3 +249,9 @@ def test_service_without_organisation_doesnt_need_org_api(mocker, service_one):
assert mock_redis_get.called is False assert mock_redis_get.called is False
assert mock_get_organisation.called is False assert mock_get_organisation.called is False
def test_bad_permission_raises(service_one):
with pytest.raises(KeyError) as e:
Service(service_one).has_permission('foo')
assert str(e.value) == "'foo is not a service permission'"