"""Test for Recipient Persister.""" from datetime import datetime from unittest.mock import ANY from oto import status import pytest from collaborator.constants import error from collaborator.models.rds.recipient_persister import RecipientPersister from collaborator.utils.error import OwsError from collaborator.utils.typing import User from tests.testutils import db from tests.testutils.seed.recipient_seed import next_recipient_id @db.test_schema_default_seed @pytest.mark.parametrize( "transferwise_id, name, currency, user, expected_result", [ ( 88889999, "Dracula", "USD", User(type="alw", id="111"), { "id": next_recipient_id, "transferwise_id": 88889999, "name": "Dracula", "currency": "USD", "created_by": "alw:111", "created_date": ANY, "deleted_by": None, "deleted_date": None, }, ) ], ) def test_create_recipient(transferwise_id, name, currency, user, expected_result): """Test creating a Recipient.""" result = RecipientPersister.create_recipient(transferwise_id, name, currency, user) # It's hard to override the default field, so just replacing it for now result["created_date"] = "now" assert result == expected_result @db.test_schema_default_seed @pytest.mark.parametrize("recipient_id", [1, 2, 3]) def test_delete_recipient(recipient_id, mocker, mock_user): """Test deleting existing Recipients.""" RecipientPersister.delete_recipient(recipient_id, mock_user) recipient = db.get_recipient(recipient_id) assert recipient["deleted_by"] == str(mock_user) @db.test_schema_default_seed def test_delete_recipient_not_found(): """Test deleting a Recipient that doesn't exist.""" recipient_id = 12345 user = User(type="alw", id=111) with pytest.raises(OwsError) as error_info: RecipientPersister.delete_recipient(recipient_id, user) assert error_info.value.status == status.NOT_FOUND assert error_info.value.code == error.ERROR_CODE_RECIPIENT_NOT_FOUND assert error_info.value.message == error.ERROR_MESSAGE_RECIPIENT_NOT_FOUND @db.test_schema_default_seed @pytest.mark.parametrize( "recipient_id, expected_result", [ ( 1, { "id": 1, "transferwise_id": 11112222, "name": "SomeGuy", "currency": "USD", "created_by": "alw:111", "created_date": datetime(2019, 9, 8, 7, 6, 5).isoformat(), "deleted_by": None, "deleted_date": None, }, ) ], ) def test_get_recipient(recipient_id, expected_result): """Test getting a recipient.""" result = RecipientPersister.get_recipient(recipient_id) assert result == expected_result @db.test_schema_default_seed @pytest.mark.parametrize( "recipient_id", [ (123), (456), ], ) def test_get_recipient_not_found(recipient_id): """Test getting a recipient that does not exist.""" with pytest.raises(OwsError) as error_info: RecipientPersister.get_recipient(recipient_id) assert error_info.value.status == status.NOT_FOUND assert error_info.value.code == error.ERROR_CODE_RECIPIENT_NOT_FOUND assert error_info.value.message == error.ERROR_MESSAGE_RECIPIENT_NOT_FOUND @db.test_schema_default_seed @pytest.mark.parametrize( "recipient_ids, expected_result", [ ( [1, 2], [ { "id": 1, "transferwise_id": 11112222, "name": "SomeGuy", "currency": "USD", "created_by": "alw:111", "created_date": datetime(2019, 9, 8, 7, 6, 5).isoformat(), "deleted_by": None, "deleted_date": None, }, { "id": 2, "transferwise_id": 22223333, "name": "Another Guy", "currency": "GBP", "created_by": "alw:123", "created_date": datetime(2020, 10, 9, 8, 7, 6).isoformat(), "deleted_by": None, "deleted_date": None, }, ], ) ], ) def test_get_recipients_by_id(recipient_ids, expected_result): """Test getting a recipient.""" result = RecipientPersister.get_recipients_by_id(recipient_ids) assert result == expected_result