def test_should_send_notification_to_whitelist_recipient( client, notify_db, notify_db_session, notification_type, to, _create_sample_template, key_type, service_restricted, mocker ): service = create_sample_service(notify_db, notify_db_session, limit=2, restricted=service_restricted) apply_async = mocker.patch('app.celery.provider_tasks.deliver_{}.apply_async'.format(notification_type)) template = _create_sample_template(notify_db, notify_db_session, service=service) if notification_type == 'sms': service_whitelist = create_sample_service_whitelist(notify_db, notify_db_session, service=service, mobile_number=to) elif notification_type == 'email': service_whitelist = create_sample_service_whitelist(notify_db, notify_db_session, service=service, email_address=to) assert service_whitelist.service_id == service.id assert to in [member.recipient for member in service.whitelist] create_sample_notification(notify_db, notify_db_session, template=template, service=service) data = { 'to': to, 'template': str(template.id) } sample_key = create_sample_api_key(notify_db, notify_db_session, service, key_type=key_type) auth_header = create_jwt_token(secret=sample_key.unsigned_secret, client_id=str(sample_key.service_id)) response = client.post( path='/notifications/{}'.format(notification_type), data=json.dumps(data), headers=[('Content-Type', 'application/json'), ('Authorization', 'Bearer {}'.format(auth_header))]) json_resp = json.loads(response.get_data(as_text=True)) assert response.status_code == 201 assert json_resp['data']['notification']['id'] assert json_resp['data']['body'] == template.content assert json_resp['data']['template_version'] == template.version assert apply_async.called
def test_should_not_send_notification_to_non_whitelist_recipient_in_trial_mode( client, notify_db, notify_db_session, notification_type, to, _create_sample_template, key_type, mocker ): service = create_sample_service(notify_db, notify_db_session, limit=2, restricted=True) service_whitelist = create_sample_service_whitelist(notify_db, notify_db_session, service=service) apply_async = mocker.patch('app.celery.provider_tasks.deliver_{}.apply_async'.format(notification_type)) template = _create_sample_template(notify_db, notify_db_session, service=service) assert service_whitelist.service_id == service.id assert to not in [member.recipient for member in service.whitelist] create_sample_notification(notify_db, notify_db_session, template=template, service=service) data = { 'to': to, 'template': str(template.id) } api_key = create_sample_api_key(notify_db, notify_db_session, service, key_type=key_type) auth_header = create_jwt_token(secret=api_key.unsigned_secret, client_id=str(api_key.service_id)) response = client.post( path='/notifications/{}'.format(notification_type), data=json.dumps(data), headers=[('Content-Type', 'application/json'), ('Authorization', 'Bearer {}'.format(auth_header))]) expected_response_message = ( 'Can’t send to this recipient when service is in trial mode ' '– see https://www.notifications.service.gov.uk/trial-mode' ) if key_type == KEY_TYPE_NORMAL else ('Can’t send to this recipient using a team-only API key') json_resp = json.loads(response.get_data(as_text=True)) assert response.status_code == 400 assert json_resp['result'] == 'error' assert expected_response_message in json_resp['message']['to'] apply_async.assert_not_called()