def test_get_api_keys_should_return_all_keys_for_service(notify_api, notify_db, notify_db_session, sample_api_key): with notify_api.test_request_context(): with notify_api.test_client() as client: another_user = create_user(notify_db, notify_db_session, email='*****@*****.**') another_service = create_sample_service( notify_db, notify_db_session, service_name='another', user=another_user, email_from='another' ) # key for another service create_sample_api_key(notify_db, notify_db_session, service=another_service) # this service already has one key, add two more, one expired create_sample_api_key(notify_db, notify_db_session, service=sample_api_key.service) one_to_expire = create_sample_api_key(notify_db, notify_db_session, service=sample_api_key.service) expire_api_key(service_id=one_to_expire.service_id, api_key_id=one_to_expire.id) assert ApiKey.query.count() == 4 auth_header = create_authorization_header() response = client.get(url_for('service.get_api_keys', service_id=sample_api_key.service_id), headers=[('Content-Type', 'application/json'), auth_header]) assert response.status_code == 200 json_resp = json.loads(response.get_data(as_text=True)) assert len(json_resp['apiKeys']) == 3
def test_get_api_keys_should_return_all_keys_for_service(notify_api, notify_db, notify_db_session, sample_api_key): with notify_api.test_request_context(): with notify_api.test_client() as client: another_user = create_user(notify_db, notify_db_session, email='*****@*****.**') another_service = create_sample_service(notify_db, notify_db_session, service_name='another', user=another_user) create_sample_api_key(notify_db, notify_db_session, service=another_service) api_key2 = ApiKey(**{'service_id': sample_api_key.service_id, 'name': 'second_api_key'}) api_key3 = ApiKey(**{'service_id': sample_api_key.service_id, 'name': 'third_api_key', 'expiry_date': datetime.utcnow() + timedelta(hours=-1)}) save_model_api_key(api_key2) save_model_api_key(api_key3) assert ApiKey.query.count() == 4 auth_header = create_authorization_header(path=url_for('service.get_api_keys', service_id=sample_api_key.service_id), method='GET') response = client.get(url_for('service.get_api_keys', service_id=sample_api_key.service_id), headers=[('Content-Type', 'application/json'), auth_header]) assert response.status_code == 200 json_resp = json.loads(response.get_data(as_text=True)) assert len(json_resp['apiKeys']) == 3
def test_get_api_keys_should_return_all_keys_for_service( notify_api, notify_db, notify_db_session, sample_api_key): with notify_api.test_request_context(): with notify_api.test_client() as client: another_user = create_user(email='*****@*****.**') another_service = create_sample_service(notify_db, notify_db_session, service_name='another', user=another_user, email_from='another') # key for another service create_sample_api_key(notify_db, notify_db_session, service=another_service) # this service already has one key, add two more, one expired create_sample_api_key(notify_db, notify_db_session, service=sample_api_key.service) one_to_expire = create_sample_api_key( notify_db, notify_db_session, service=sample_api_key.service) expire_api_key(service_id=one_to_expire.service_id, api_key_id=one_to_expire.id) assert ApiKey.query.count() == 4 auth_header = create_authorization_header() response = client.get( url_for('service.get_api_keys', service_id=sample_api_key.service_id), headers=[('Content-Type', 'application/json'), auth_header]) assert response.status_code == 200 json_resp = json.loads(response.get_data(as_text=True)) assert len(json_resp['apiKeys']) == 3
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()