"""Test for the Rule schema.""" import pytest from vector_job_rules.constants import error from vector_job_rules.schemas.rule import UpdateRuleSchema @pytest.mark.parametrize( 'payload, errors', [ ({'rule_id': 1, 'updated_by': 1}, {}), ( {'priority': 1}, { '_schema': ['Rule id and priority must both be present'], 'rule_id': ['Missing data for required field.'], 'updated_by': ['Missing data for required field.'], }, ), ( {'rule_id': 1, 'priority': 'string'}, { 'priority': ['Not a valid integer.'], 'updated_by': ['Missing data for required field.'], }, ), ([{'rule_id': 1, 'updated_by': 1}, {'rule_id': 2, 'updated_by': 2}], {}), ([{'rule_id': 1, 'updated_by': 1}, {'rule_id': 2, 'updated_by': 1}], {}), ( [{'rule_id': 1}, {'rule_id': 2}], { 0: {'updated_by': ['Missing data for required field.']}, 1: {'updated_by': ['Missing data for required field.']}, }, ), ( [{'rule_id': 'string'}, {'rule_id': 2}], { 0: { 'updated_by': ['Missing data for required field.'], 'rule_id': ['Not a valid integer.'], }, 1: {'updated_by': ['Missing data for required field.']}, }, ), ( [ {'rule_id': 1, 'description': 'hey', 'updated_by': 1}, {'rule_id': 2, 'updated_by': 1}, ], {}, ), ( [{'rule_id': 1, 'description': 'hey'}, {'rule_id': 2}], { 0: {'updated_by': ['Missing data for required field.']}, 1: {'updated_by': ['Missing data for required field.']}, }, ), ( [ {'rule_id': 1, 'description': '', 'updated_by': 1}, {'rule_id': 2, 'updated_by': 2}, ], {}, ), ( [{'rule_id': 1, 'description': ''}, {'rule_id': 2}], { 0: {'updated_by': ['Missing data for required field.']}, 1: {'updated_by': ['Missing data for required field.']}, }, ), ( [{'rule_id': 1, 'description': 1}, {'rule_id': 2}], { 0: { 'description': ['Not a valid string.'], 'updated_by': ['Missing data for required field.'], }, 1: {'updated_by': ['Missing data for required field.']}, }, ), ( [ {'rule_id': 1, 'priority': 1, 'updated_by': 1}, {'rule_id': 2, 'priority': 2}, ], {1: {'updated_by': ['Missing data for required field.']}}, ), ( [ {'rule_id': 1, 'priority': 1, 'updated_by': 1}, {'rule_id': 2, 'priority': 2, 'updated_by': 2}, ], {}, ), ( [ {'rule_id': 1, 'updated_by': 1}, {'rule_id': 2, 'priority': 2, 'updated_by': 1}, ], {1: {'_schema': [error.ERROR_MESSAGE_RULE_ID_AND_PRIORITY_REQUIRED]}}, ), ( [{'rule_id': 1, 'priority': 2}, {'rule_id': 2, 'priority': 2}], { 0: { '_schema': [error.ERROR_MESSAGE_PRIORITY_NOT_UNIQUE], 'updated_by': ['Missing data for required field.'], }, 1: { '_schema': [error.ERROR_MESSAGE_PRIORITY_NOT_UNIQUE], 'updated_by': ['Missing data for required field.'], }, }, ), ({'rule_id': 1, 'priority': 2, 'updated_by': 1734}, {}), ( [ {'rule_id': 1, 'priority': 1, 'updated_by': 1734}, {'rule_id': 2, 'priority': 2, 'updated_by': 1735}, ], {}, ), ( [ {'rule_id': 1, 'priority': 1, 'updated_by': 1734}, {'rule_id': 2, 'priority': 2, 'updated_by': 'string'}, ], {1: {'updated_by': ['Not a valid integer.']}}, ), ], ) def test_get_rules_filtered(payload, errors): """Test getting all rules filtered.""" if type(payload) is list: many = True else: many = False result = UpdateRuleSchema(many=many).load(payload) assert result.errors == errors if not errors: assert result.data == payload