"""Unit Tests for contract_term_schedule handlers.""" from unittest import mock from flask import testing as flask_testing from owsresponse import response import pytest from tests.utils.factories import ContractTermFactory @mock.patch('abacus_contract.blueprints.contract_term_schedule.logic') def test_get_contract_term_schedules_by_term_id(mock_logic, fixture_client): """Test to get a list of contract term schedules by contract_term_id.""" mock_contract_term = ContractTermFactory.create() contract_term_id = mock_contract_term.contract_term_id mock_logic.get_contract_term_schedules_by_term_id.return_value = \ response.Response(message='ok', status=200) res = fixture_client.get( f'/contract-term/{contract_term_id}/contract-term-schedules' ) assert res.status_code == 200 mock_logic.get_contract_term_schedules_by_term_id.assert_called_once_with( contract_term_id ) @pytest.mark.parametrize( [ 'standalone_check_result', 'get_account_id_result', 'pdp_auth_result', 'expected_status', ], [ pytest.param(True, None, None, 200, id='Standalone check pass'), pytest.param(False, None, None, 403, id='Account id not found'), pytest.param(False, 199, False, 403, id='PDP auth fail'), pytest.param(True, 199, True, 200, id='PDP auth pass'), ] ) @mock.patch('abacus_contract.blueprints.contract_term_schedule.logic') @mock.patch('abacus_contract.blueprints.contract_term_schedule.authorization') @mock.patch('abacus_contract.blueprints.contract_term_schedule.contract_term_logic') @mock.patch('abacus_contract.blueprints.contract_term_schedule.flask_request') def test_get_contract_term_schedules_by_term_id_authorization( mock_flask_request: mock.MagicMock, mock_contract_term_logic: mock.MagicMock, mock_authorization: mock.MagicMock, mock_logic: mock.MagicMock, standalone_check_result: bool, get_account_id_result: int | None, pdp_auth_result: bool | None, expected_status: int, fixture_client: flask_testing.FlaskClient, ) -> None: """Test authorization for getting contract term schedules.""" contract_term_id = 33 mock_flask_request.verify_rules_access_standalone.return_value = \ standalone_check_result mock_contract_term_logic.get_account_id_by_contract_term_id.return_value = \ get_account_id_result mock_authorization.pdp_authorize_many_accounts.return_value = pdp_auth_result mock_logic.get_contract_term_schedules_by_term_id.return_value = \ response.Response() res = fixture_client.get( f'/contract-term/{contract_term_id}/contract-term-schedules' ) assert res.status_code == expected_status mock_flask_request.verify_rules_access_standalone.assert_called_once() if not standalone_check_result: mock_contract_term_logic.get_account_id_by_contract_term_id.assert_called_once_with( # noqa contract_term_id ) if get_account_id_result is not None: mock_authorization.pdp_authorize_many_accounts.assert_called_once_with( [199] )