From 5ce47baf9dab5de1590756270143cc88dde2ca9d Mon Sep 17 00:00:00 2001 From: Jay Shepherd Date: Wed, 7 Dec 2016 23:17:55 -0700 Subject: [PATCH 1/2] Case insensitive string comparator --- advanced_guide.md | 1 + pyresttest/test_validators.py | 31 +++++++++++++++++++++++++++++++ pyresttest/validators.py | 1 + 3 files changed, 33 insertions(+) diff --git a/advanced_guide.md b/advanced_guide.md index 467fae5f..59b908e9 100644 --- a/advanced_guide.md +++ b/advanced_guide.md @@ -349,6 +349,7 @@ Optionally, validators can return a Failure which evaluates to False, but suppli | 'le', 'less_than_or_equal' | Less Than Or Equal To | A <= B | | 'eq', 'equals' | Equals | A == B | | 'str_eq' | Values are Equal When Converted to String | str(A) == str(B) -- useful for comparing templated numbers/collections | +| 'str_eq_insensitive' | Case Insensitive version of str_eq | str(A).lower() == str(B).lower() | | 'ne', 'not_equals' | Not Equals | A != B | | 'ge', 'greater_than_or_equal' | Greater Than Or Equal To | A >= B | | 'gt', 'greater_than' | Greater Than | A > B | diff --git a/pyresttest/test_validators.py b/pyresttest/test_validators.py index 519be622..bee0cfad 100644 --- a/pyresttest/test_validators.py +++ b/pyresttest/test_validators.py @@ -577,5 +577,36 @@ def test_parse_validator_jsonpath_mini_extracttest(self): self.assertEqual(validation_result.message, "Extract and test validator failed on test: exists(None)") + def test_validator_string_comparison(self): + """ Tests string comparison """ + config = { + 'jsonpath_mini': 'key.val', + 'comparator': 'str_eq', + 'expected': "data" + } + comp_validator = validators.ComparatorValidator.parse(config) + myjson_pass = '{"id": 3, "key": {"val": "data"}}' + myjson_fail = '{"id": 3, "key": {"val": "DATA"}}' + + self.assertTrue(comp_validator.validate(body=myjson_pass)) + self.assertFalse(comp_validator.validate(body=myjson_fail)) + + def test_validator_string_comparison(self): + """ Tests case-insensitive string comparison """ + config = { + 'jsonpath_mini': 'key.val', + 'comparator': 'str_eq_insensitive', + 'expected': "data" + } + comp_validator = validators.ComparatorValidator.parse(config) + myjson_lowercase = '{"id": 3, "key": {"val": "data"}}' + myjson_uppercase = '{"id": 3, "key": {"val": "DATA"}}' + myjson_mixcase = '{"id": 3, "key": {"val": "DaTa"}}' + + self.assertTrue(comp_validator.validate(body=myjson_lowercase)) + self.assertTrue(comp_validator.validate(body=myjson_uppercase)) + self.assertTrue(comp_validator.validate(body=myjson_mixcase)) + + if __name__ == '__main__': unittest.main() diff --git a/pyresttest/validators.py b/pyresttest/validators.py index d59cbbea..644aad7c 100644 --- a/pyresttest/validators.py +++ b/pyresttest/validators.py @@ -53,6 +53,7 @@ 'eq': operator.eq, 'equals': operator.eq, 'str_eq': lambda x, y: operator.eq(str(x), str(y)), + 'str_eq_insensitive': lambda x, y: operator.eq(str(x).lower(), str(y).lower()), 'ne': operator.ne, 'not_equals': operator.ne, 'ge': operator.ge, From fac7bd82caa83b9177e322ad58a15825b778e9ca Mon Sep 17 00:00:00 2001 From: Jay Shepherd Date: Thu, 8 Dec 2016 21:55:16 -0700 Subject: [PATCH 2/2] Rename test function correcting copy paste of function name --- pyresttest/test_validators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyresttest/test_validators.py b/pyresttest/test_validators.py index bee0cfad..a12a44d7 100644 --- a/pyresttest/test_validators.py +++ b/pyresttest/test_validators.py @@ -591,7 +591,7 @@ def test_validator_string_comparison(self): self.assertTrue(comp_validator.validate(body=myjson_pass)) self.assertFalse(comp_validator.validate(body=myjson_fail)) - def test_validator_string_comparison(self): + def test_validator_string_insensitive_comparison(self): """ Tests case-insensitive string comparison """ config = { 'jsonpath_mini': 'key.val',