def test_extend_validators_with_dict(self): def_validators = [{'eq': ["a", {"v": 1}]}, {'eq': [{"b": 1}, 200]}] current_validators = [{'len_eq': ['s3', 12]}, {'eq': [{"b": 1}, 201]}] def_validators = [ parser.parse_validator(validator) for validator in def_validators ] ref_validators = [ parser.parse_validator(validator) for validator in current_validators ] extended_validators = utils.extend_validators(def_validators, ref_validators) self.assertEqual(len(extended_validators), 3) self.assertIn({ 'check': { 'b': 1 }, 'expect': 201, 'comparator': 'eq' }, extended_validators) self.assertNotIn({ 'check': { 'b': 1 }, 'expect': 200, 'comparator': 'eq' }, extended_validators)
def test_parse_validator(self): validator = {"check": "status_code", "comparator": "eq", "expect": 201} self.assertEqual( parser.parse_validator(validator), {"check": "status_code", "comparator": "eq", "expect": 201} ) validator = {'eq': ['status_code', 201]} self.assertEqual( parser.parse_validator(validator), {"check": "status_code", "comparator": "eq", "expect": 201} )
def test_parse_validator(self): validator = {'check': 'status_code', 'comparator': 'eq', 'expect': 200} assert parser.parse_validator(validator) == { 'check': 'status_code', 'comparator': 'eq', 'expect': 200 } validator = {'eq': ['status_code', 200]} assert parser.parse_validator(validator) == { 'check': 'status_code', 'comparator': 'eq', 'expect': 200 }
def validate(self, validators, resp_obj): """ make validations """ evaluated_validators = [] if not validators: return evaluated_validators logger.log_info("start to validate.") validate_pass = True failures = [] for validator in validators: # evaluate validators with context variable mapping. evaluated_validator = self.__eval_check_item( parser.parse_validator(validator), resp_obj) try: self._do_validation(evaluated_validator) except exceptions.ValidationFailure as ex: validate_pass = False failures.append(str(ex)) evaluated_validators.append(evaluated_validator) if not validate_pass: failures_string = "\n".join([failure for failure in failures]) raise exceptions.ValidationFailure(failures_string) return evaluated_validators
def _convert_validators_to_mapping(validators): """ convert validators list to mapping. Args: validators (list): validators in list Returns: dict: validators mapping, use (check, comparator) as key. Examples: >>> validators = [ {"check": "v1", "expect": 201, "comparator": "eq"}, {"check": {"b": 1}, "expect": 200, "comparator": "eq"} ] >>> _convert_validators_to_mapping(validators) { ("v1", "eq"): {"check": "v1", "expect": 201, "comparator": "eq"}, ('{"b": 1}', "eq"): {"check": {"b": 1}, "expect": 200, "comparator": "eq"} } """ validators_mapping = {} for validator in validators: validator = parser.parse_validator(validator) if not isinstance(validator["check"], collections.Hashable): check = json.dumps(validator["check"]) else: check = validator["check"] key = (check, validator["comparator"]) validators_mapping[key] = validator return validators_mapping
def _get_validators_mapping(validators): """ get validators mapping from api or test validators @param (list) validators: [ {"check": "v1", "expect": 201, "comparator": "eq"}, {"check": {"b": 1}, "expect": 200, "comparator": "eq"} ] @return { ("v1", "eq"): {"check": "v1", "expect": 201, "comparator": "eq"}, ('{"b": 1}', "eq"): {"check": {"b": 1}, "expect": 200, "comparator": "eq"} } """ validators_mapping = {} for validator in validators: validator = parser.parse_validator(validator) if not isinstance(validator["check"], collections.Hashable): check = json.dumps(validator["check"]) else: check = validator["check"] key = (check, validator["comparator"]) validators_mapping[key] = validator return validators_mapping
def validate(self, validators, resp_obj): ''' make validations ''' evaluated_validators = [] if not validators: return evaluated_validators logger.log_info('start to validate.') validate_pass = True for vaildator in validators: # evaluate validators with context variable mapping. evaluated_validator = self.__eval_check_item( parser.parse_validator(vaildator), resp_obj) try: self._do_validation(evaluated_validator) except exceptions.VaildationFailure: validate_pass = False evaluated_validators.append(evaluated_validator) if not validate_pass: raise exceptions.VaildationFailure
def validate(self, validators, resp_obj): """ make validations """ if not validators: return logger.log_debug("start to validate.") self.validation_results = [] validate_pass = True failures = [] for validator in validators: # evaluate validators with context variable mapping. evaluated_validator = self.__eval_check_item( parser.parse_validator(validator), resp_obj) try: self._do_validation(evaluated_validator) except exceptions.ValidationFailure as ex: validate_pass = False failures.append(str(ex)) self.validation_results.append(evaluated_validator) return validate_pass, failures
def _convert_validators_to_mapping(validators): ''' convert validators list to mapping. Args: validators (list): validators in list Returns: dict: validators mapping, use (check, comparator) as key. Examples: >>> validators = [ {'check':'v1','expect':201,'comparator':'eq'}, {'check':{'b':1},'expect':201,'comparator':'eq'} ] >>> _convert_validators_to_mapping(validators) { ('v1','eq'):{'check':'v1','expect':201,'comparator':'eq}, ('{'b':1}','eq'):{'check':{'b':1'},'expect':201,'comparator':'eq'} } ''' validators_mapping = {} for validate in validators: validate = parser.parse_validator(validate) if not isinstance(validate['check'], collections.Hashable): check = json.dumps(validate['check']) else: check = validate['check'] key = (check, validate['comparator']) validators_mapping[key] = validate return validators_mapping
def test_extend_validators(self): def_validators = [{ 'eq': ['v1', 200] }, { "check": "s2", "expect": 16, "comparator": "len_eq" }] current_validators = [{ "check": "v1", "expect": 201 }, { 'len_eq': ['s3', 12] }] def_validators = [ parser.parse_validator(validator) for validator in def_validators ] ref_validators = [ parser.parse_validator(validator) for validator in current_validators ] extended_validators = utils.extend_validators(def_validators, ref_validators) self.assertIn({ "check": "v1", "expect": 201, "comparator": "eq" }, extended_validators) self.assertIn({ "check": "s2", "expect": 16, "comparator": "len_eq" }, extended_validators) self.assertIn({ "check": "s3", "expect": 12, "comparator": "len_eq" }, extended_validators)
def validate(self, validators, resp_obj): """ make validations """ evaluated_validators = [] if not validators: return evaluated_validators logger.log_info("start to validate.") failures = [] for validator in validators: # evaluate validators with context variable mapping. evaluated_validator = self.__eval_check_item( parser.parse_validator(validator), resp_obj) try: self._do_validation(evaluated_validator) except exceptions.ValidationFailure as ex: failures.append(str(ex)) evaluated_validators.append(evaluated_validator) return evaluated_validators
def validate(self, validators, resp_obj): """ make validations """ if not validators: return logger.log_info("start to validate.") self.evaluated_validators = [] validate_pass = True for validator in validators: # evaluate validators with context variable mapping. evaluated_validator = self.eval_check_item( parser.parse_validator(validator), resp_obj) try: self.do_validation(evaluated_validator) except exceptions.ValidationFailure: validate_pass = False self.evaluated_validators.append(evaluated_validator) if not validate_pass: raise exceptions.ValidationFailure