"""Tests for ows_users interface.""" from unittest.mock import MagicMock import requests from flexmock import flexmock from oto import response from owsrequest import request from notifications_delivery import config from notifications_delivery.connectors import sentry from notifications_delivery.constants import error, ows_services from notifications_delivery.models import ows_users def test_get_user_info_success(monkeypatch): """Test getting user info when the request is successfull.""" mock_user_info = { 'type': 'alw', 'user_id': 'alw:123', 'first_name': 'John', 'last_name': 'Doe', 'email': 'jdoe@theorchard.com', 'account': { 'vendor_id': 123, 'subaccount_id': None } } mock_ows_users_response = requests.models.Response() mock_ows_users_response.status_code = 200 mock_ows_users_response.json = MagicMock(return_value=mock_user_info) monkeypatch.setattr( request, 'process', MagicMock(return_value=mock_ows_users_response)) user_id = 'alw:123' result = ows_users.get_user_info(user_id) request.process.assert_called_once_with( application=ows_services.APPLICATION_NAME, environment=config.ENVIRONMENT, method=ows_services.METHOD_GET, service_name=ows_services.OWS_USERS, path='/users/alw:123') assert result.status == 200 assert result.message == mock_user_info def test_get_user_info_error(): """Test getting user info when the request fails.""" user_id = '666' ows_user_error = 'user_id must be in the form oa:123 or alw:123.' ows_users_response = flexmock(requests.models.Response()) ows_users_response.status_code = 400 (flexmock(ows_users_response) .should_receive('text') .and_return(ows_user_error)) (flexmock(request) .should_receive('process') .and_return(ows_users_response)) result = ows_users.get_user_info(user_id) assert result.status == 400 assert result.errors == { 'code': error.ERROR_CODE_OWS_USERS_REQUEST, 'message': ows_user_error } def test_get_users_info(): """Test getting users info.""" user_ids = ['alw:666', 'oa:777'] user_info_mock = { 'type': 'oa', 'user_id': 'oa:777', 'first_name': 'Dan', 'last_name': 'Smith', 'email': 'dsmith@theorchard.com', 'account': { 'vendor_id': 123, 'subaccount_id': None } } (flexmock(ows_users) .should_receive('get_user_info') .and_return(response.Response(user_info_mock))) result = ows_users.get_users_info(user_ids) assert result.status == 200 assert len(result.message) == 2 def test_get_users_info_with_errors(): """Test getting users info return error.""" user_ids = ['666'] (flexmock(ows_users) .should_receive('get_user_info') .and_return(response.create_fatal_response())) (flexmock(sentry) .should_receive('send_response_to_sentry')) result = ows_users.get_users_info(user_ids) assert result.status == 200 assert len(result.message) == 0 def test_get_alw_users_by_email(): """Test getting alw users info.""" user_email = 'email' user_info_mock = { 'items': [ { 'email': 'email', 'user_id': 123, 'vendor_id': 123 } ] } (flexmock(ows_users) .should_receive('get_alw_users_by_email') .and_return(response.Response(user_info_mock))) result = ows_users.get_alw_users_by_email(user_email) assert result.status == 200 assert len(result.message) == 1 def test_get_identity_by_email(monkeypatch): """Test get_identity_by_email.""" user_email = 'email@theorchard.com' mock_response = MagicMock() mock_response.status_code = 200 mock_response.content = '{"foo":"bar"}' monkeypatch.setattr(request, 'process', MagicMock(return_value=mock_response)) result = ows_users.get_identity_by_email(user_email) assert result.status == 200 request.process.assert_called_once_with( application=ows_services.APPLICATION_NAME, environment=config.ENVIRONMENT, method=ows_services.METHOD_GET, service_name=ows_services.OWS_USERS, path=f'/users/identity/email/{user_email}', )