"""Test logic for worksheet_account_contract_payable_details records.""" from unittest.mock import call, patch from payment.logic import worksheet_account_contract_payable_details as logic from tests.utils.factories import WorksheetAccountContractPayableDetailsFactory @patch( 'payment.logic.worksheet_account_contract_payable_details.' 'WorksheetAccountContractPayableDetails' ) def test_bulk_create_success( mock_model, mock_statement_periods, mock_exchange_rates, mock_contracts, mock_accounts, mock_abacus_event, mock_ledger_account_contracts, mock_worksheet_account_contract_closing_balance, ): """Test bulk_create method.""" item1 = WorksheetAccountContractPayableDetailsFactory.create() item2 = WorksheetAccountContractPayableDetailsFactory.create() mock_model.side_effect = (item1, item2) create_params = ( { 'worksheet_account_contract_payable_after_tax_id': item1.worksheet_account_contract_payable_after_tax_id, 'account_id': item1.account_id, 'contract_id': item1.contract_id, 'target_table': item1.target_table, 'target_id': item1.target_id, 'reference_target_table': item1.reference_target_table, 'reference_target_id': item1.reference_target_id, 'payable_detail_type_id': item1.payable_detail_type_id, 'amount_payable': item1.amount_payable, 'currency': item1.currency, 'notes': item1.notes, }, { 'worksheet_account_contract_payable_after_tax_id': item2.worksheet_account_contract_payable_after_tax_id, 'account_id': item2.account_id, 'contract_id': item2.contract_id, 'target_table': item2.target_table, 'target_id': item2.target_id, 'reference_target_table': item2.reference_target_table, 'reference_target_id': item2.reference_target_id, 'payable_detail_type_id': item2.payable_detail_type_id, 'amount_payable': item2.amount_payable, 'currency': item2.currency, 'notes': item2.notes, }, ) res = logic.bulk_create( event_id=1, statement_period_id=1, create_params=create_params ) assert mock_model.call_args_list == [ call(**{**create_params[0], 'statement_period_id': 1}), call(**{**create_params[1], 'statement_period_id': 1}), ] assert res == [item1, item2] @patch( 'payment.logic.worksheet_account_contract_payable_details.' 'WorksheetAccountContractPayableDetails' ) def test_bulk_delete(mock_model, faker): """Def test bulk_delete_method.""" event_id = faker.pyint() logic.bulk_delete(event_id) assert mock_model.soft_delete_by_event_id(event_id) @patch( 'payment.logic.worksheet_account_contract_payable_details.' 'WorksheetAccountContractPayableDetails' ) def test_bulk_soft_delete_corrections_by_worksheet_payable_after_tax_ids( mock_model, faker ): """Logic delegates to the model with the provided ids.""" ids = [faker.pyint(min_value=1), faker.pyint(min_value=1)] logic.bulk_soft_delete_corrections_by_worksheet_payable_after_tax_ids(ids) assert ( mock_model.soft_delete_corrections_by_worksheet_payable_after_tax_ids.call_args_list == [call(ids)] ) @patch('payment.logic.worksheet_account_contract_payable_details.repository') def test_get_filtered_active_records( worksheet_account_contract_payable_details_repo_mock, ): """Test get contracts by statement period id \ and worksheet_account_contract_payable_after_tax_ids (opt).""" limit = 10 offset = 0 worksheet_account_contract_payable_after_tax_id = 1 worksheet_account_contract_payable_details = ( WorksheetAccountContractPayableDetailsFactory.build() ) worksheet_account_contract_payable_details_repo_mock.get_filtered_active_records.return_value = ( # noqa: E501 [worksheet_account_contract_payable_details], 1, ) response = logic.get_filtered_active_records( limit=limit, offset=offset, statement_period_id=worksheet_account_contract_payable_details.statement_period_id, # noqa: E501 worksheet_after_tax_ids=[worksheet_account_contract_payable_after_tax_id], detail_groups=['some_group'], ) expected_data = { 'items': [worksheet_account_contract_payable_details], 'total_count': 1, } assert response == expected_data worksheet_account_contract_payable_details_repo_mock.get_filtered_active_records.assert_called_once_with( # noqa: E501 statement_period_id=worksheet_account_contract_payable_details.statement_period_id, # noqa: E501 worksheet_after_tax_ids=[worksheet_account_contract_payable_after_tax_id], detail_groups=['some_group'], limit=limit, offset=offset, )