"""Functional tests for contract_exclusion endpoints.""" from abacus_contract.constants import error from abacus_contract.tests.utils.factories import ( AccountContractFactory, ContractExclusionFactory, ContractFactory, LegacyContractFactory, ) def test_create_contract_exclusions(fixture_client): """Test creating contract exclusions.""" contract = ContractFactory.create() exclusions = {'countries': ['USA', 'RUS'], 'stores': ['12']} res = fixture_client.post( f'/contract/{contract.contract_id}/exclusions/', json=exclusions ) assert res.status_code == 201 assert res.json['exclusions'] == exclusions def test_create_contract_exclusions_already_exists(fixture_client): """Test getting error "Contract exclusion already exists".""" contract = ContractFactory.create() ContractExclusionFactory.create(contract=contract) exclusions = {'countries': ['USA', 'RUS'], 'stores': ['12']} res = fixture_client.post( f'/contract/{contract.contract_id}/exclusions/', json=exclusions ) assert res.status_code == 400 assert res.json['message'] == error.ERROR_CONTRACT_EXCLUSION_ALREADY_EXISTS.format( contract_id=contract.contract_id ) def test_create_contract_exclusions_for_invalid_country(fixture_client): """Test creating contract exclusions for invalid country code.""" contract = ContractFactory.create() country_code = 'test' exclusions = {'countries': [country_code], 'stores': []} res = fixture_client.post( f'/contract/{contract.contract_id}/exclusions/', json=exclusions ) assert res.status_code == 400 assert res.json['message'] == error.ERROR_UNKNOWN_COUNTRY.format(code=country_code) def test_create_contract_exclusions_if_oa_contract_exists(fixture_client): """Test creating contract exclusions if oa_contract exists.""" legacy_contract = LegacyContractFactory.create() country_code = 'test' exclusions = {'countries': [country_code], 'stores': []} res = fixture_client.post( f'/contract/{legacy_contract.contract.contract_id}/exclusions/', json=exclusions ) assert res.status_code == 400 assert res.json['message'] == error.ERROR_OA_CONTRACT_EXISTS def test_get_exclusions_by_contract(fixture_client, create_mock_account): """Test to get exclusions by contract.""" contract = ContractFactory.create() AccountContractFactory.create(contract=contract) exclusions = {'countries': ['USA', 'RUS'], 'stores': ['12']} ContractExclusionFactory.create(contract=contract, exclusions=exclusions) res = fixture_client.get(f'/contract/{contract.contract_id}/exclusions/') assert res.status_code == 200 assert res.json['exclusions'] == exclusions def test_get_exclusions_by_invalid_contract(fixture_client): """Test to get exclusions for invalid contract.""" contract_id = 12345 res = fixture_client.get(f'/contract/{contract_id}/exclusions/') assert res.status_code == 404 assert res.json['message'] == error.ERROR_ACCOUNT_NOT_FOUND_FOR_CONTRACT.format( object_type='Contract', object_id=contract_id ) def test_update_contract_exclusions(fixture_client): """Test to update an existing contract_exclusion.""" contract = ContractFactory.create() ContractExclusionFactory.create(contract=contract) exclusions = {'countries': ['USA', 'RUS'], 'stores': ['12']} res = fixture_client.put( f'/contract/{contract.contract_id}/exclusions/', json=exclusions ) assert res.status_code == 200 assert res.json['exclusions'] == exclusions def test_update_contract_exclusions_no_record(fixture_client): """Test to update contract_exclusion that does not exist.""" contract = ContractFactory.create() exclusions = {'countries': ['USA', 'RUS'], 'stores': ['12']} res = fixture_client.put( f'/contract/{contract.contract_id}/exclusions/', json=exclusions ) assert res.status_code == 404 assert res.json['message'] == error.ERROR_CONTRACT_EXCLUSION_DOES_NOT_EXIST.format( contract_id=contract.contract_id ) def test_update_contract_exclusions_invalid_country(fixture_client): """Test to update contract_exclusion with invalid country_code.""" contract = ContractFactory.create() ContractExclusionFactory.create(contract=contract) exclusions = {'countries': ['test'], 'stores': []} res = fixture_client.put( f'/contract/{contract.contract_id}/exclusions/', json=exclusions ) assert res.status_code == 400 assert res.json['message'] == error.ERROR_UNKNOWN_COUNTRY.format(code='test')