"""Functional tests for account_contract_vat_detail.""" from unittest.mock import patch from abacus_common_logic.test_utils.helpers import get_json_body from abacus_account import models from abacus_account.models.account_contract_vat_detail \ import AccountContractVatDetail def test_create_account_contract_vat_detail_success( fixture_client, reference_signing_entity_fixture, account_contract_vat_detail_fixtures ): """Test to create an account contract vat detail.""" post_body = [{ 'account_id': 1, 'contract_id': 1, 'is_vat_registered': True, 'is_vat_eligible': True, 'vat_country': 'Latvia', 'company_code': '2981', }] res = fixture_client.post('/account-contract-vat-detail', json=post_body) vat_details = AccountContractVatDetail.query.filter( AccountContractVatDetail.account_id == 1).first() assert res.status_code == 201 assert vat_details.account_id == post_body[0]['account_id'] assert vat_details.contract_id == post_body[0]['contract_id'] assert vat_details.vat_country == post_body[0]['vat_country'] assert vat_details.is_vat_registered == post_body[0]['is_vat_registered'] assert vat_details.is_vat_eligible == post_body[0]['is_vat_eligible'] assert vat_details.company_code == post_body[0]['company_code'] def test_create_account_contract_vat_detail_error(fixture_client): """Test to create an account contract vat detail error.""" post_body = [{ 'account_id': 1, 'contract_id': 1, }] res = fixture_client.post('/account-contract-vat-detail', json=post_body) assert res.status_code == 400 response_data = get_json_body(res) assert response_data['code'] == 'error' assert response_data['message'].find( "'is_vat_eligible': ['Must be specified.']") != -1 assert response_data['message'].find( "'is_vat_registered': ['Must be specified.']") != -1 assert response_data['message'].find( "'company_code': ['Must be specified.']") != -1 @patch('abacus_account.models.AccountContractVatDetail.' 'get_by_account_id_contract_id') def test_create_account_contract_vat_detail_error_on_save( mock_model, fixture_client, reference_signing_entity_fixture, account_contract_vat_detail_fixtures ): """Test to create an account contract vat detail error on save to db.""" post_body = [ { 'account_id': 1, 'contract_id': 1, 'is_vat_registered': True, 'is_vat_eligible': True, 'vat_country': 'Latvia', 'company_code': 'company_code', }, { 'account_id': 2, 'contract_id': 2, 'is_vat_registered': False, 'is_vat_eligible': False, 'vat_country': 'Mexico', 'company_code': 'company_code2', } ] mock_model.side_effect = [ models.AccountContractVatDetail(**post_body[0]), Exception('Something went wrong!') ] res = fixture_client.post('/account-contract-vat-detail', json=post_body) assert res.status_code == 500 def test_create_account_contract_vat_detail_exception( fixture_client, mocker, reference_signing_entity_fixture, account_contract_vat_detail_fixtures ): """Test to create an account contract vat detail exception.""" post_body = [{ 'account_id': 1, 'contract_id': 1, 'is_vat_registered': True, 'is_vat_eligible': True, 'vat_country': 'Germany', 'company_code': 'company_code', }] mocker.patch('abacus_account.blueprints.account_contract_vat_detail.' 'logic.create_or_update_account_contract_vat_detail', side_effect=Exception('Something went wrong!')) res = fixture_client.post('/account-contract-vat-detail', json=post_body) assert res.status_code == 500