"""Functional tests for the adjustments validation logic.""" from unittest.mock import MagicMock, patch from abacus_common_logic.adjustments_validation.adjustments_validation import ( validate_adjustments, ) from abacus_common_logic.adjustments_validation.constants import VALIDATION_ERRORS from abacus_common_logic.adjustments_validation.snowflake.executor import ( AdjustmentsValidationSnowflakeExecutor, ) @patch( 'abacus_common_logic.adjustments_validation.snowflake.executor.SnowflakeSQLExecutor.__init__', MagicMock(), ) def test_validate_adjustments( adjustments_mock, sf_config_mock, sf_close_balance_statuses_mock, sf_accounts_mock, sf_account_contracts_mock, sf_payment_entities_mock, sf_display_upcs_mock, sf_product_terms_mock, sf_label_terms_mock, sf_account_upcs_mock, sf_statement_periods_mock, sf_adjustment_types_mock, ): """Test validating a list of manual adjustments.""" statement_period_id = 1 fetch_mock = MagicMock() fetch_mock.side_effect = [ sf_close_balance_statuses_mock, sf_accounts_mock, sf_account_contracts_mock, sf_payment_entities_mock, sf_display_upcs_mock, sf_product_terms_mock, sf_label_terms_mock, sf_account_upcs_mock, sf_statement_periods_mock, sf_adjustment_types_mock, ] sf_executor = AdjustmentsValidationSnowflakeExecutor(sf_config_mock) sf_executor.fetchall = fetch_mock results = validate_adjustments(adjustments_mock, statement_period_id, sf_executor) assert list(results.keys()) == [0, 1, 2, 3, 4, 5, 6, 7] assert VALIDATION_ERRORS.ACCOUNT_MISSING in results[0] assert VALIDATION_ERRORS.CONTRACT_MISSING in results[1] assert VALIDATION_ERRORS.CONTRACT_MISSING in results[2] assert VALIDATION_ERRORS.UPC_MISSING in results[3] assert VALIDATION_ERRORS.UPC_BLANK in results[4] assert VALIDATION_ERRORS.ACCOUNT_INVALID_CLOSE_BALANCE in results[5] assert VALIDATION_ERRORS.AMOUNT_INVALID in results[6] assert VALIDATION_ERRORS.CURRENCY_UNSUPPORTED in results[6] assert VALIDATION_ERRORS.ACTIVITY_MONTH_LENGTH in results[6] assert VALIDATION_ERRORS.STATEMENT_MONTH_INVALID in results[6] assert VALIDATION_ERRORS.ADJUSTMENT_TYPE_UNSUPPORTED in results[6] assert VALIDATION_ERRORS.COMMENTS_REQUIRED in results[6] assert VALIDATION_ERRORS.FLOWTHROUGH_PAYMENT_REQUIRED in results[7]