"""Test for Transferwise Batch Persister.""" from decimal import Decimal from unittest.mock import patch from oto import status import pytest from collaborator.constants import error from collaborator.models.rds.transferwise_batch_persister import ( TransferwiseBatchPersister, ) from collaborator.utils import logging from collaborator.utils.error import OwsError from tests.testutils import db, transferwise_batch_fixtures @db.test_schema_default_seed @pytest.mark.parametrize( "data, expected_result", [ ( { "profile_id": 4497, "account_number": "77643994", "bank_code": "231470", "transferwise_fee": 0.92, "reference": "XYZ123", "batch_id": "54a6bc09-cef9-49a8-9041-f1f0c654cd88", "version": 1, "batch_name": "my-batch-group", "amount": 123.45, "currency": "USD", "wire_fee": 0.1, "status": "COMPLETED", "batch_type": "bank_transfer", "payin_name": "TransferWise", "vendor_id": 24601, }, transferwise_batch_fixtures.TRANSFERWISE_BATCH, ) ], ) @patch.object(logging, "log_event") def test_create_batch(log_event_mock, data, expected_result, mock_user): """Test creating a TransferWise batch.""" result = TransferwiseBatchPersister.create_batch(mock_user, data) # It's hard to override the default field, so just replacing it for now result["created_date"] = "2020-11-19T16:39:10.769971" assert result == expected_result log_event_mock.assert_called_with( logging.LOG_EVENT_CREATE, "transferwise_batch", result["id"], None, result, mock_user, ) @db.test_schema_default_seed def test_get_by_id(): """Test getting the batch by ID.""" result = TransferwiseBatchPersister.get_by_id(1) assert result == { "id": 1, "vendor_id": 24601, "profile_id": 12341235, "batch_id": "784d48fd-0f1a-49c8-bf11-fb0998714352", "version": 1, "batch_name": "Test Batch", "amount": Decimal("90.00"), "currency": "USD", "wire_fee": Decimal("0.25"), "transferwise_fee": Decimal("0.75"), "status": "test", "type": "type", "reference": "reference", "payin_name": "payin_name", "bank_code": "bank_code", "account_number": "account_number", "iban": "iban", "account_type": "account_type", "bban": "bban", "bank_address_name": "bank_address_name", "bank_address_branch_name": "bank_address_branch_name", "bank_address_first_line": "bank_address_first_line", "bank_address_post_code": "bank_address_post_code", "bank_address_city": "bank_address_city", "bank_address_state_code": "bank_address_state_code", "bank_address_country": "bank_address_country", "tw_address_name": "tw_address_name", "tw_address_first_line": "tw_address_first_line", "tw_address_post_code": "tw_address_post_code", "tw_address_city": "tw_address_city", "tw_address_state_code": "tw_address_state_code", "tw_address_country": "tw_address_country", "created_date": "2020-05-04T03:02:01", } @db.test_schema_default_seed def test_get_by_id_not_found(): """Test getting the batch by ID if the batch doesn't exist.""" with pytest.raises(OwsError) as err: TransferwiseBatchPersister.get_by_id(999) assert err.value.status == status.NOT_FOUND assert err.value.code == error.ERROR_CODE_TRANSFERWISE_BATCH_NOT_FOUND @db.test_schema_default_seed @patch.object(logging, "log_event") def test_update_batch(log_event_mock, mock_user): """Test updating a batch.""" original = { "id": 1, "vendor_id": 24601, "profile_id": 12341235, "batch_id": "784d48fd-0f1a-49c8-bf11-fb0998714352", "version": 1, "batch_name": "Test Batch", "amount": 90.0, "currency": "USD", "wire_fee": 0.25, "transferwise_fee": 0.75, "status": "test", "type": "type", "reference": "reference", "payin_name": "payin_name", "bank_code": "bank_code", "account_number": "account_number", "iban": "iban", "account_type": "account_type", "bban": "bban", "bank_address_name": "bank_address_name", "bank_address_branch_name": "bank_address_branch_name", "bank_address_first_line": "bank_address_first_line", "bank_address_post_code": "bank_address_post_code", "bank_address_city": "bank_address_city", "bank_address_state_code": "bank_address_state_code", "bank_address_country": "bank_address_country", "tw_address_name": "tw_address_name", "tw_address_first_line": "tw_address_first_line", "tw_address_post_code": "tw_address_post_code", "tw_address_city": "tw_address_city", "tw_address_state_code": "tw_address_state_code", "tw_address_country": "tw_address_country", "created_date": "2020-05-04T03:02:01", } data = { "wire_fee": 0, "transferwise_fee": 0.15, } result = TransferwiseBatchPersister.update_batch(1, data, mock_user) assert result == { "id": 1, "vendor_id": 24601, "profile_id": 12341235, "batch_id": "784d48fd-0f1a-49c8-bf11-fb0998714352", "version": 1, "batch_name": "Test Batch", "amount": 90.0, "currency": "USD", "wire_fee": 0, "transferwise_fee": 0.15, "status": "test", "type": "type", "reference": "reference", "payin_name": "payin_name", "bank_code": "bank_code", "account_number": "account_number", "iban": "iban", "account_type": "account_type", "bban": "bban", "bank_address_name": "bank_address_name", "bank_address_branch_name": "bank_address_branch_name", "bank_address_first_line": "bank_address_first_line", "bank_address_post_code": "bank_address_post_code", "bank_address_city": "bank_address_city", "bank_address_state_code": "bank_address_state_code", "bank_address_country": "bank_address_country", "tw_address_name": "tw_address_name", "tw_address_first_line": "tw_address_first_line", "tw_address_post_code": "tw_address_post_code", "tw_address_city": "tw_address_city", "tw_address_state_code": "tw_address_state_code", "tw_address_country": "tw_address_country", "created_date": "2020-05-04T03:02:01", } log_event_mock.assert_called_with( logging.LOG_EVENT_UPDATE, "transferwise_batch", 1, original, result, mock_user ) @db.test_schema_default_seed def test_update_batch_not_found(mock_user): """Test updating a batch if it doesn't exist.""" with pytest.raises(OwsError) as err: TransferwiseBatchPersister.update_batch(999, {"wire_fee": 123}, mock_user) assert err.value.status == status.NOT_FOUND assert err.value.code == error.ERROR_CODE_TRANSFERWISE_BATCH_NOT_FOUND @db.test_schema_default_seed def test_get_by_vendor_id(): """Test getting batches by vendor ID.""" result = TransferwiseBatchPersister.get_by_vendor_id(24601) result_ids = [batch["id"] for batch in result] assert result_ids == [1, 2, 3]