"""Tests for ows-users model.""" from unittest.mock import MagicMock, patch import pytest from collaborator.constants import error, service_name from collaborator.models.ows import ows_users from collaborator.utils.error import OwsError from collaborator.utils.typing import Account, User from tests.testutils import user_fixtures @patch("collaborator.models.ows.ows_users.request") @pytest.mark.parametrize( "message", [ dict( type="alw", user_id="alw:123", account=dict(vendor_id=123), login="login139", language="en", auth0_user_id="auth0139", primary=None, active="Y", contact_id=4444, first_name="first name", last_name="last name", email="email", requested_login_email="", ), None, ], ) def test_get_master_contact(mock_request, message): """Test getting the master contact.""" mock_response = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = message mock_response.text = str(message) mock_request.get.return_value = mock_response account = Account("vendor", 123) result = ows_users.get_master_contact(account) assert result == message mock_request.get.assert_called_with( service_name.OWS_USERS, "/ows/vendor/123/primary-contact", params={"active": "Y"}, ) @patch("collaborator.models.ows.ows_users.request") def test_get_master_contact_fail(mock_request): """Test failing to get the master contact.""" mock_response = MagicMock() mock_response.status_code = 500 mock_response.json.return_value = dict( code=error.ERROR_CODE_OWS_USERS, message="Some error" ) mock_request.get.return_value = mock_response account = Account("vendor", 123) with pytest.raises(OwsError) as err: ows_users.get_master_contact(account) assert err.value.code == error.ERROR_CODE_OWS_USERS assert err.value.message == "Some error" assert err.value.status == 500 @patch("collaborator.models.ows.ows_users.request") def test_get_user_metadata_fail(mock_request): """Test failing to get the user's metadata.""" mock_response = MagicMock() mock_response.status_code = 500 mock_response.json.return_value = dict( code=error.ERROR_CODE_OWS_USERS, message="Some error" ) mock_request.get.return_value = mock_response user_id = "alw:25824" with pytest.raises(OwsError) as err: ows_users.get_user_metadata(user_id) assert err.value.code == error.ERROR_CODE_OWS_USERS assert err.value.message == "Some error" assert err.value.status == 500 @patch("collaborator.models.ows.ows_users.request") def test_get_identity_metadata(mock_request): """Test getting the identity's metadata.""" mock_response = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = user_fixtures.IDENTITY_RESPONSE mock_response.text = "content" mock_request.get.return_value = mock_response user = User(type="identity", id="abc-123-my-id") result = ows_users.get_identity_metadata(user) assert result == user_fixtures.IDENTITY_RESPONSE mock_request.get.assert_called_with( service_name.OWS_USERS, "/users/identity/abc-123-my-id" ) @patch("collaborator.models.ows.ows_users.request") def test_get_identity_metadata_fail(mock_request): """Test failing to get the identity's metadata.""" mock_response = MagicMock() mock_response.status_code = 500 mock_response.json.return_value = dict( code=error.ERROR_CODE_OWS_USERS, message="Some error" ) mock_request.get.return_value = mock_response user = User(type="identity", id="abc-123-my-id") with pytest.raises(OwsError) as err: ows_users.get_user_metadata(user) assert err.value.code == error.ERROR_CODE_OWS_USERS assert err.value.message == "Some error" assert err.value.status == 500