"""Tests for ledger_vat_summary handlers.""" from unittest.mock import patch from moneyhub.constants.constants import PAGINATION_TYPE_STANDARD from moneyhub.constants.constants import VatCategory from moneyhub.schemas.ledger_vat_summary import LedgerVatSummaryBackfillSchema from moneyhub.schemas.ledger_vat_summary import LedgerVatSummarySchema from moneyhub.schemas.ledger_vat_summary import PaginatedLedgerVatSummarySchema from moneyhub.schemas.pagination import PaginationSchema @patch('moneyhub.handlers.ledger_vat_summary.logic') def test_get_ledger_vat_summary_by_account_and_contract_and_statement_period_id( mock_logic, fixture_client ): """Test to get vat info per statement period for an account/contract.""" account_id = 1 contract_id = 123 statement_period_id = 285 vat_categories = 'ross_revenue,closing_balance' expected_response = [ { 'ledger_vat_summary_id': 1, 'abacus_event_id': 1, 'account_id': account_id, 'statement_period_id': statement_period_id, 'activity_statement_period_id': statement_period_id, 'contract_id': contract_id, 'description': None, 'vat_category': VatCategory.GROSS_REVENUE, 'payee_currency_code': 'USD', 'vat_currency_code': 'USD', 'base_amount_payee_currency': 0.001406240000, 'vat_rate': None, 'vat_amount_payee_currency': None, 'vat_amount_vat_currency': None, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': 0.001406240000, 'abacus_exempt_reason': None, 'is_reporting_only': False, 'created_at': '2022-11-17T22:02:42', 'created_by': 'me', 'last_modified': '2022-12-17T22:02:42', 'last_modified_by': 'me' } ] mock_logic.get_by_account_id \ .return_value = expected_response res = fixture_client.get( f'/ledger-vat-summary/account/{account_id}/statement-period/{statement_period_id}?contract_id={contract_id}&vat_categories={vat_categories}') # noqa: E501 assert res.status_code == 200 assert res.json() == expected_response mock_logic.get_by_account_id.assert_called_once_with( account_id, statement_period_id, contract_id, vat_categories.split(',')) @patch('moneyhub.handlers.ledger_vat_summary.logic') def test_get_ledger_vat_summary_by_activity_statement_period_id( mock_logic, fixture_client ): """Test to get vat info per statement period for an account/contract.""" account_id = 24601 contract_id = 123 statement_period_id = 285 expected_response = [ { 'ledger_vat_summary_id': 1, 'abacus_event_id': 1, 'account_id': account_id, 'statement_period_id': 288, 'activity_statement_period_id': statement_period_id, 'contract_id': contract_id, 'description': None, 'vat_category': VatCategory.GROSS_REVENUE, 'payee_currency_code': 'USD', 'vat_currency_code': 'USD', 'base_amount_payee_currency': 0.001406240000, 'vat_rate': None, 'vat_amount_payee_currency': None, 'vat_amount_vat_currency': None, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': 0.001406240000, 'abacus_exempt_reason': None, 'is_reporting_only': False, 'created_at': '2022-11-17T22:02:42', 'created_by': 'me', 'last_modified': '2022-12-17T22:02:42', 'last_modified_by': 'me' } ] mock_logic.get_activity_by_account_id \ .return_value = expected_response res = fixture_client.get( f'/ledger-vat-summary/account/{account_id}/activity-statement-period/{statement_period_id}?contract_id={contract_id}') # noqa: E501 assert res.status_code == 200 assert res.json() == expected_response mock_logic.get_activity_by_account_id.assert_called_once_with( account_id, statement_period_id, contract_id, None) @patch('moneyhub.handlers.ledger_vat_summary.logic') def test_backfill_ledger_vat_summary(mock_logic, fixture_client): """Test for POSTing ledger vat summary entries.""" statement_period_id = 123 expected_response = [ { 'ledger_vat_summary_id': 1, 'abacus_event_id': 1, 'account_id': 24601, 'activity_statement_period_id': statement_period_id, 'statement_period_id': statement_period_id, 'contract_id': 10001, 'description': None, 'vat_category': VatCategory.GROSS_REVENUE, 'payee_currency_code': 'USD', 'vat_currency_code': 'USD', 'base_amount_payee_currency': 0.001406240000, 'vat_rate': None, 'vat_amount_payee_currency': None, 'vat_amount_vat_currency': None, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': 0.001406240000, 'abacus_exempt_reason': None, 'is_reporting_only': False, 'created_at': '2022-11-17T22:02:42', 'created_by': 'me', 'last_modified': '2022-12-17T22:02:42', 'last_modified_by': 'me' } ] payload = [ { 'account_id': 24601, 'contract_id': 10001, 'vat_category': VatCategory.GROSS_REVENUE, 'payee_currency_code': 'USD', 'vat_currency_code': 'USD', 'base_amount_payee_currency': 0.001406240000, 'vat_rate': None, 'vat_amount_payee_currency': None, 'vat_amount_vat_currency': None, 'net_amount_payee_currency': 0.001406240000, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, } ] mock_logic.backfill_vat_summary_entries.return_value = expected_response response = fixture_client.post( f'/ledger-vat-summary/statement-period/{statement_period_id}/backfill', json=payload, ) assert response.status_code == 201 assert response.json() == expected_response mock_logic.backfill_vat_summary_entries.assert_called_once_with( statement_period_id, [LedgerVatSummaryBackfillSchema(**item) for item in payload]) @patch('moneyhub.handlers.ledger_vat_summary.logic') def test_get_ledger_vat_summary_by_vat_summary_file(mock_logic, fixture_client): """Test getting VAT summary entries by a VAT summary file ID.""" vat_summary_file_id = 123 entries = PaginatedLedgerVatSummarySchema( items=[ LedgerVatSummarySchema( ledger_vat_summary_id=1, statement_period_id=1, activity_statement_period_id=1, abacus_event_id=1, account_id=1, contract_id=10001, vat_category='gross_revenue', payee_currency_code='USD', vat_currency_code='USD', base_amount_payee_currency=2020.20, vat_rate=20.00, vat_amount_payee_currency=2020.20, vat_amount_vat_currency=2020.20, wht_amount_payee_currency=None, wht_amount_vat_currency=None, wht_rate=None, net_amount_payee_currency=2020.20, abacus_exempt_reason=None, is_reporting_only=False, created_by='me', created_at='2010-09-08T07:06:05', last_modified_by='me', last_modified='2010-09-08T07:06:05', ), LedgerVatSummarySchema( ledger_vat_summary_id=2, statement_period_id=2, activity_statement_period_id=2, abacus_event_id=1, account_id=1, contract_id=10001, vat_category='gross_revenue', payee_currency_code='USD', vat_currency_code='USD', base_amount_payee_currency=2020.20, vat_rate=20.00, vat_amount_payee_currency=2020.20, vat_amount_vat_currency=2020.20, wht_amount_payee_currency=None, wht_amount_vat_currency=None, wht_rate=None, net_amount_payee_currency=2020.20, abacus_exempt_reason=None, is_reporting_only=False, created_by='me', created_at='2010-09-08T07:06:05', last_modified_by='me', last_modified='2010-09-08T07:06:05', ), ], pagination=PaginationSchema( pagination_type=PAGINATION_TYPE_STANDARD, total_records=100 ), ) expected = { 'items': [ { 'ledger_vat_summary_id': 1, 'statement_period_id': 1, 'activity_statement_period_id': 1, 'abacus_event_id': 1, 'account_id': 1, 'contract_id': 10001, 'description': None, 'vat_category': 'gross_revenue', 'payee_currency_code': 'USD', 'vat_currency_code': 'USD', 'base_amount_payee_currency': 2020.20, 'vat_rate': 20.00, 'vat_amount_payee_currency': 2020.20, 'vat_amount_vat_currency': 2020.20, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': 2020.20, 'abacus_exempt_reason': None, 'is_reporting_only': False, 'created_by': 'me', 'created_at': '2010-09-08T07:06:05', 'last_modified_by': 'me', 'last_modified': '2010-09-08T07:06:05', }, { 'ledger_vat_summary_id': 2, 'statement_period_id': 2, 'activity_statement_period_id': 2, 'abacus_event_id': 1, 'account_id': 1, 'contract_id': 10001, 'description': None, 'vat_category': 'gross_revenue', 'payee_currency_code': 'USD', 'vat_currency_code': 'USD', 'base_amount_payee_currency': 2020.20, 'vat_rate': 20.00, 'vat_amount_payee_currency': 2020.20, 'vat_amount_vat_currency': 2020.20, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': 2020.20, 'abacus_exempt_reason': None, 'is_reporting_only': False, 'created_by': 'me', 'created_at': '2010-09-08T07:06:05', 'last_modified_by': 'me', 'last_modified': '2010-09-08T07:06:05', }, ], 'pagination': { 'pagination_type': PAGINATION_TYPE_STANDARD, 'total_records': 100, }, } mock_logic.get_by_vat_summary_file.return_value = entries response = fixture_client.get( f'/ledger-vat-summary/vat-summary-file/{vat_summary_file_id}' ) assert response.status_code == 200 assert response.json() == expected mock_logic.get_by_vat_summary_file.assert_called_once_with( vat_summary_file_id, 0, 0 ) @patch('moneyhub.handlers.ledger_vat_summary.logic') def test_get_ledger_vat_summary_by_vat_summary_file_limit_offset( mock_logic, fixture_client): """Test getting VAT summary entries by a VAT summary file ID with limit/offset.""" vat_summary_file_id = 123 limit = 1 offset = 1 entries = PaginatedLedgerVatSummarySchema( items=[ LedgerVatSummarySchema( ledger_vat_summary_id=1, statement_period_id=1, activity_statement_period_id=1, abacus_event_id=1, account_id=1, contract_id=10001, vat_category='gross_revenue', payee_currency_code='USD', vat_currency_code='USD', base_amount_payee_currency=2020.20, vat_rate=20.00, vat_amount_payee_currency=2020.20, vat_amount_vat_currency=2020.20, wht_amount_payee_currency=None, wht_amount_vat_currency=None, wht_rate=None, net_amount_payee_currency=2020.20, abacus_exempt_reason=None, is_reporting_only=False, created_by='me', created_at='2010-09-08T07:06:05', last_modified_by='me', last_modified='2010-09-08T07:06:05', ), ], pagination=PaginationSchema( pagination_type=PAGINATION_TYPE_STANDARD, total_records=100 ), ) expected = { 'items': [ { 'ledger_vat_summary_id': 1, 'statement_period_id': 1, 'activity_statement_period_id': 1, 'abacus_event_id': 1, 'account_id': 1, 'contract_id': 10001, 'description': None, 'vat_category': 'gross_revenue', 'payee_currency_code': 'USD', 'vat_currency_code': 'USD', 'base_amount_payee_currency': 2020.20, 'vat_rate': 20.00, 'vat_amount_payee_currency': 2020.20, 'vat_amount_vat_currency': 2020.20, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': 2020.20, 'abacus_exempt_reason': None, 'is_reporting_only': False, 'created_by': 'me', 'created_at': '2010-09-08T07:06:05', 'last_modified_by': 'me', 'last_modified': '2010-09-08T07:06:05', }, ], 'pagination': { 'pagination_type': PAGINATION_TYPE_STANDARD, 'total_records': 100, }, } mock_logic.get_by_vat_summary_file.return_value = entries response = fixture_client.get( f'/ledger-vat-summary/vat-summary-file/{vat_summary_file_id}' f'?limit={limit}&offset={offset}' ) assert response.status_code == 200 assert response.json() == expected mock_logic.get_by_vat_summary_file.assert_called_once_with( vat_summary_file_id, limit, offset )