import pytest from app.models import ( ServiceWhitelist, Notification, MOBILE_TYPE, EMAIL_TYPE, NOTIFICATION_CREATED, NOTIFICATION_PENDING, NOTIFICATION_FAILED, NOTIFICATION_TECHNICAL_FAILURE, NOTIFICATION_STATUS_TYPES_FAILED ) @pytest.mark.parametrize('mobile_number', [ '07700 900678', '+44 7700 900678' ]) def test_should_build_service_whitelist_from_mobile_number(mobile_number): service_whitelist = ServiceWhitelist.from_string('service_id', MOBILE_TYPE, mobile_number) assert service_whitelist.recipient == mobile_number @pytest.mark.parametrize('email_address', [ 'test@example.com' ]) def test_should_build_service_whitelist_from_email_address(email_address): service_whitelist = ServiceWhitelist.from_string('service_id', EMAIL_TYPE, email_address) assert service_whitelist.recipient == email_address @pytest.mark.parametrize('contact, recipient_type', [ ('', None), ('07700dsadsad', MOBILE_TYPE), ('gmail.com', EMAIL_TYPE) ]) def test_should_not_build_service_whitelist_from_invalid_contact(recipient_type, contact): with pytest.raises(ValueError): ServiceWhitelist.from_string('service_id', recipient_type, contact) @pytest.mark.parametrize('initial_statuses, expected_statuses', [ # passing in single statuses as strings (NOTIFICATION_FAILED, NOTIFICATION_STATUS_TYPES_FAILED), (NOTIFICATION_CREATED, NOTIFICATION_CREATED), (NOTIFICATION_TECHNICAL_FAILURE, NOTIFICATION_TECHNICAL_FAILURE), # passing in lists containing single statuses ([NOTIFICATION_FAILED], NOTIFICATION_STATUS_TYPES_FAILED), ([NOTIFICATION_CREATED], [NOTIFICATION_CREATED]), ([NOTIFICATION_TECHNICAL_FAILURE], [NOTIFICATION_TECHNICAL_FAILURE]), # passing in lists containing multiple statuses ([NOTIFICATION_FAILED, NOTIFICATION_CREATED], NOTIFICATION_STATUS_TYPES_FAILED + [NOTIFICATION_CREATED]), ([NOTIFICATION_CREATED, NOTIFICATION_PENDING], [NOTIFICATION_CREATED, NOTIFICATION_PENDING]), ([NOTIFICATION_CREATED, NOTIFICATION_TECHNICAL_FAILURE], [NOTIFICATION_CREATED, NOTIFICATION_TECHNICAL_FAILURE]), # checking we don't end up with duplicates ( [NOTIFICATION_FAILED, NOTIFICATION_CREATED, NOTIFICATION_TECHNICAL_FAILURE], NOTIFICATION_STATUS_TYPES_FAILED + [NOTIFICATION_CREATED] ), ]) def test_status_conversion_handles_failed_statuses(initial_statuses, expected_statuses): converted_statuses = Notification.substitute_status(initial_statuses) assert len(converted_statuses) == len(expected_statuses) assert set(converted_statuses) == set(expected_statuses)