mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-21 16:01:15 -05:00
- It would be nice to refactor the send_sms and send_email tasks to use these common functions as well, that way I can get rid of the new Notifications.from_v2_api_request method. - Still not happy with the format of the errors. Would like to find a happy place, where the message is descript enough that we do not need external documentation to explain the error. Perhaps we still only need documentation to explain the trial mode concept.
137 lines
6.8 KiB
Python
137 lines
6.8 KiB
Python
import pytest
|
|
|
|
from app.notifications.validators import check_service_message_limit, check_template_is_for_notification_type, \
|
|
check_template_is_active, service_can_send_to_recipient, check_sms_content_char_count
|
|
from app.v2.errors import BadRequestError, TooManyRequestsError
|
|
from tests.app.conftest import (sample_notification as create_notification,
|
|
sample_service as create_service, sample_service_whitelist)
|
|
|
|
|
|
@pytest.mark.parametrize('key_type', ['test', 'team', 'normal'])
|
|
def test_check_service_message_limit_with_unrestricted_service_passes(key_type,
|
|
sample_service,
|
|
sample_notification):
|
|
assert check_service_message_limit(key_type, sample_service) is None
|
|
|
|
|
|
@pytest.mark.parametrize('key_type', ['test', 'team', 'normal'])
|
|
def test_check_service_message_limit_under_message_limit_passes(key_type,
|
|
sample_service,
|
|
sample_notification):
|
|
assert check_service_message_limit(key_type, sample_service) is None
|
|
|
|
|
|
@pytest.mark.parametrize('key_type', ['team', 'normal'])
|
|
def test_check_service_message_limit_over_message_limit_fails(key_type, notify_db, notify_db_session):
|
|
service = create_service(notify_db, notify_db_session, restricted=True, limit=4)
|
|
for x in range(5):
|
|
create_notification(notify_db, notify_db_session, service=service)
|
|
with pytest.raises(TooManyRequestsError):
|
|
check_service_message_limit(key_type, service)
|
|
|
|
|
|
@pytest.mark.parametrize('template_type, notification_type',
|
|
[('email', 'email'),
|
|
('sms', 'sms')])
|
|
def test_check_template_is_for_notification_type_pass(template_type, notification_type):
|
|
assert check_template_is_for_notification_type(notification_type=notification_type,
|
|
template_type=template_type) is None
|
|
|
|
|
|
@pytest.mark.parametrize('template_type, notification_type',
|
|
[('sms', 'email'),
|
|
('email', 'sms')])
|
|
def test_check_template_is_for_notification_type_fails_when_template_type_does_not_match_notification_type(
|
|
template_type, notification_type):
|
|
with pytest.raises(BadRequestError):
|
|
check_template_is_for_notification_type(notification_type=notification_type,
|
|
template_type=template_type)
|
|
|
|
|
|
def test_check_template_is_active_passes(sample_template):
|
|
assert check_template_is_active(sample_template) is None
|
|
|
|
|
|
def test_check_template_is_active_fails(sample_template):
|
|
sample_template.archived = True
|
|
from app.dao.templates_dao import dao_update_template
|
|
dao_update_template(sample_template)
|
|
try:
|
|
check_template_is_active(sample_template)
|
|
except BadRequestError as e:
|
|
assert e.status_code == 400
|
|
assert e.code == '10400'
|
|
assert e.message == 'Template has been deleted'
|
|
assert e.link == "link to documentation"
|
|
|
|
|
|
@pytest.mark.parametrize('key_type',
|
|
['test', 'normal'])
|
|
def test_service_can_send_to_recipient_passes(key_type, notify_db, notify_db_session):
|
|
trial_mode_service = create_service(notify_db, notify_db_session, service_name='trial mode', restricted=True)
|
|
assert service_can_send_to_recipient(trial_mode_service.users[0].email_address,
|
|
key_type,
|
|
trial_mode_service) is None
|
|
assert service_can_send_to_recipient(trial_mode_service.users[0].mobile_number,
|
|
key_type,
|
|
trial_mode_service) is None
|
|
|
|
|
|
@pytest.mark.parametrize('key_type',
|
|
['test', 'normal'])
|
|
def test_service_can_send_to_recipient_passes_for_live_service_non_team_member(key_type, notify_db, notify_db_session):
|
|
live_service = create_service(notify_db, notify_db_session, service_name='live', restricted=False)
|
|
assert service_can_send_to_recipient("some_other_email@test.com",
|
|
key_type,
|
|
live_service) is None
|
|
assert service_can_send_to_recipient('07513332413',
|
|
key_type,
|
|
live_service) is None
|
|
|
|
|
|
@pytest.mark.parametrize('key_type',
|
|
['team'])
|
|
def test_service_can_send_to_recipient_passes_for_whitelisted_recipient_passes(key_type, notify_db, notify_db_session,
|
|
sample_service):
|
|
sample_service_whitelist(notify_db, notify_db_session, email_address="some_other_email@test.com")
|
|
assert service_can_send_to_recipient("some_other_email@test.com",
|
|
key_type,
|
|
sample_service) is None
|
|
sample_service_whitelist(notify_db, notify_db_session, mobile_number='07513332413')
|
|
assert service_can_send_to_recipient('07513332413',
|
|
key_type,
|
|
sample_service) is None
|
|
|
|
|
|
@pytest.mark.parametrize('key_type',
|
|
['team', 'normal'])
|
|
def test_service_can_send_to_recipient_fails_when_recipient_is_not_on_team(key_type, notify_db, notify_db_session):
|
|
trial_mode_service = create_service(notify_db, notify_db_session, service_name='trial mode', restricted=True)
|
|
with pytest.raises(BadRequestError):
|
|
assert service_can_send_to_recipient("some_other_email@test.com",
|
|
key_type,
|
|
trial_mode_service) is None
|
|
with pytest.raises(BadRequestError):
|
|
assert service_can_send_to_recipient('07513332413',
|
|
key_type,
|
|
trial_mode_service) is None
|
|
|
|
|
|
def test_service_can_send_to_recipient_fails_when_mobile_number_is_not_on_team(notify_db, notify_db_session):
|
|
live_service = create_service(notify_db, notify_db_session, service_name='live mode', restricted=False)
|
|
with pytest.raises(BadRequestError):
|
|
assert service_can_send_to_recipient("0758964221",
|
|
'team',
|
|
live_service) is None
|
|
|
|
|
|
@pytest.mark.parametrize('char_count', [495, 0, 494, 200])
|
|
def test_check_sms_content_char_count_passes(char_count, notify_api):
|
|
assert check_sms_content_char_count(char_count) is None
|
|
|
|
|
|
@pytest.mark.parametrize('char_count', [496, 500, 6000])
|
|
def test_check_sms_content_char_count_fails(char_count, notify_api):
|
|
with pytest.raises(BadRequestError):
|
|
check_sms_content_char_count(char_count)
|