"""Test handler.""" from unittest.mock import patch from ddex_ingester_common.constants.catalog_ingestion import ( REJECT, SUCCESS, WARNING, ) from ddex_ingester_common.helpers.catalog_ingestion import ( CatalogIngestionValidationResult ) from ddex_ingester_common.validation.rules import RuleResult from index import ( handler, validate, ValidationRuleException ) import pytest @patch('index.load_ddex_json') @patch('index.validate') @patch('index.save_validation_result') def test_handler(mock_save_validation_result, mock_validate, mock_load_ddex_json, s3_context, context): """Test the main handler.""" mock_load_ddex_json.return_value = s3_context mock_save_validation_result.return_value = [ CatalogIngestionValidationResult( state_machine_name='name', state_machine_execution_name='execution_name', response=SUCCESS )] handler(context, None) mock_validate.assert_called_once() mock_save_validation_result.assert_called_once() @patch('index.load_ddex_json') @patch('index.validate') @patch('index.save_validation_result') def test_handler_warning(mock_save_validation_result, mock_validate, mock_load_ddex_json, s3_context, context): """Test the main handler.""" mock_load_ddex_json.return_value = s3_context mock_save_validation_result.return_value = [ CatalogIngestionValidationResult( state_machine_name='name', state_machine_execution_name='execution_name', response=WARNING, validation_rule_id=41, message='Some helpful validation rule message' )] # A warning should not make the handler throw an exception. handler(context, None) mock_validate.assert_called_once() mock_save_validation_result.assert_called_once() @patch('index.load_ddex_json') @patch('index.validate') @patch('index.save_validation_result') def test_handler_reject_rule(mock_save_validation_result, mock_validate, mock_load_ddex_json, s3_context, context): """Test the main handler.""" mock_load_ddex_json.return_value = s3_context mock_save_validation_result.return_value = [ CatalogIngestionValidationResult( state_machine_name='name', state_machine_execution_name='execution_name', response=REJECT, validation_rule_id=41, message='Some helpful validation rule message' )] with pytest.raises(ValidationRuleException): handler(context, None) mock_validate.assert_called_once() mock_save_validation_result.assert_called_once() def test_validate(s3_context): """Test the validate function against a 'successful' rule.""" rule = [(lambda input: RuleResult(122, SUCCESS, None))] output = validate(s3_context, rule) assert output[0] == rule[0](s3_context) def test_validate_with_rejected_rule(s3_context): """Test the validate function against a 'rejected' rule.""" rule = [ (lambda input: RuleResult(123, REJECT, 'Something is not correct')) ] output = validate(s3_context, rule) assert output[0] == rule[0](s3_context) def test_validate_with_multiple_rejected_rule(s3_context): """Test the validate function against multiple 'failed' rules.""" rule = [ (lambda input: RuleResult(122, SUCCESS, None)), (lambda input: RuleResult(123, REJECT, 'Something is not correct')), ( lambda input: RuleResult( 124, REJECT, 'Something ELSE is not correct') ) ] output = validate(s3_context, rule) assert len(output) == 3 assert output[0] == rule[0](s3_context) assert output[1] == rule[1](s3_context) assert output[2] == rule[2](s3_context)