import pytest from app.models.organization import Organization from app.models.service import Service from tests import organization_json, service_json from tests.conftest import ORGANISATION_ID, create_folder, create_template def test_organization_type_when_services_organization_has_no_org_type(mocker, service_one): service = Service(service_one) service._dict['organization_id'] = ORGANISATION_ID org = organization_json(organization_type=None) mocker.patch('app.organizations_client.get_organization', return_value=org) assert not org['organization_type'] assert service.organization_type == 'federal' def test_organization_type_when_service_and_its_org_both_have_an_org_type(mocker, service_one): # service_one has an organization_type of 'central' service = Service(service_one) service._dict['organization'] = ORGANISATION_ID org = organization_json(organization_type='local') mocker.patch('app.organizations_client.get_organization', return_value=org) assert service.organization_type == 'local' def test_organization_name_comes_from_cache(mocker, service_one): mock_redis_get = mocker.patch( 'app.extensions.RedisClient.get', return_value=b'"Borchester Council"', ) mock_get_organization = mocker.patch('app.organizations_client.get_organization') service = Service(service_one) service._dict['organization'] = ORGANISATION_ID assert service.organization_name == 'Borchester Council' mock_redis_get.assert_called_once_with(f'organization-{ORGANISATION_ID}-name') assert mock_get_organization.called is False def test_organization_name_goes_into_cache(mocker, service_one): mocker.patch( 'app.extensions.RedisClient.get', return_value=None, ) mock_redis_set = mocker.patch( 'app.extensions.RedisClient.set', ) mocker.patch( 'app.organizations_client.get_organization', return_value=organization_json(), ) service = Service(service_one) service._dict['organization'] = ORGANISATION_ID assert service.organization_name == 'Test Organization' mock_redis_set.assert_called_once_with( f'organization-{ORGANISATION_ID}-name', '"Test Organization"', ex=604800, ) def test_service_without_organization_doesnt_need_org_api(mocker, service_one): mock_redis_get = mocker.patch('app.extensions.RedisClient.get') mock_get_organization = mocker.patch('app.organizations_client.get_organization') service = Service(service_one) service._dict['organization'] = None assert service.organization_id is None assert service.organization_name is None assert isinstance(service.organization, Organization) assert mock_redis_get.called is False assert mock_get_organization.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'" @pytest.mark.parametrize("purchase_order_number,expected_result", [ [None, None], ["PO1234", [None, None, None, "PO1234"]] ]) def test_service_billing_details(purchase_order_number, expected_result): service = Service(service_json(purchase_order_number=purchase_order_number)) service._dict['purchase_order_number'] = purchase_order_number assert service.billing_details == expected_result def test_has_templates_of_type_includes_folders( mocker, service_one, mock_get_template_folders, ): mocker.patch( 'app.service_api_client.get_service_templates', return_value={'data': [create_template( folder='something', template_type='sms' )]} ) mocker.patch( 'app.template_folder_api_client.get_template_folders', return_value=[create_folder(id='something')] ) assert Service(service_one).has_templates_of_type('sms')