"""Tests for vendor_contract handlers.""" import datetime from unittest.mock import patch from owsresponse import response from abacus_legacy_sync.constants import constants from abacus_legacy_sync.schemas import VendorContractDetailSchema from tests.utils.factories import VendorContract @patch('abacus_legacy_sync.blueprints.vendor_contract.logic') def test_create_vendor_contract(mock_logic, fixture_client): """Test POST endpoint to create vendor contract.""" mock_response = response.Response( message=VendorContractDetailSchema().dump(VendorContract.create()), status=201 ) mock_logic.create_vendor_contract.return_value = mock_response data = { 'vendor_id': 77, 'cont_start': '2022-01-01', 'cont_end': '2122-12-31', 'contract_type': constants.VENDOR_CONTRACT_CONTRACT_TYPES.VENDOR_TERM, 'release_term': 0, 'opt_out': 'N', 'is_automatic_rollover': 'Y', 'payment_interval': constants.VENDOR_CONTRACT_PAYMENT_INTERVALS.MONTH, 'pay_after': constants.VENDOR_CONTRACT_PAY_AFTER_INTERVALS.AFTER_30, 'digital_split': 0.75, 'currency_code': 'USD', 'country_exclusion': ['USA'], } res = fixture_client.post('/vendor-contract', json=data) assert res.status_code == 201 assert res.json == mock_response.message expected_logic_data = dict(data) expected_logic_data['cont_start'] = datetime.date(2022, 1, 1) expected_logic_data['cont_end'] = datetime.date(2122, 12, 31) mock_logic.create_vendor_contract.assert_called_once_with(**expected_logic_data) @patch('abacus_legacy_sync.blueprints.vendor_contract.logic') def test_update_vendor_contract(mock_logic, fixture_client): """Test PUT endpoint to update vendor contract.""" vendor_contract = VendorContract.create() mock_response = response.Response( message=VendorContractDetailSchema().dump(VendorContract.create()), status=200 ) mock_logic.update_vendor_contract.return_value = mock_response vendor_contract_id = vendor_contract.vendor_contract_id mock_put_data = { 'country_exclusion': ['USA'], 'store_exclusion': ['1', '2'], 'distribution_type_id': 1, } res = fixture_client.put( f'/vendor-contract/{vendor_contract_id}', json=mock_put_data ) assert res.status_code == 200 assert res.json == mock_response.message mock_logic.update_vendor_contract.assert_called_once_with( vendor_contract, **mock_put_data )