diff --git a/ate/response.py b/ate/response.py index 9b704137..0b4c17a9 100644 --- a/ate/response.py +++ b/ate/response.py @@ -68,13 +68,13 @@ class ResponseObject(object): @return (OrderDict) variable binds ordered dict """ extracted_variables_mapping = OrderedDict() + extract_binds_order_dict = utils.convert_to_order_dict(extract_binds) - for extract_bind in extract_binds: - for key, field in extract_bind.items(): - if not isinstance(field, utils.string_type): - raise exception.ParamsError("invalid extract_binds in testcase extract_binds!") + for key, field in extract_binds_order_dict.items(): + if not isinstance(field, utils.string_type): + raise exception.ParamsError("invalid extract_binds in testcase extract_binds!") - extracted_variables_mapping[key] = self.extract_field(field) + extracted_variables_mapping[key] = self.extract_field(field) return extracted_variables_mapping diff --git a/ate/utils.py b/ate/utils.py index 428ef9ec..1b8db202 100644 --- a/ate/utils.py +++ b/ate/utils.py @@ -9,6 +9,7 @@ import random import re import string import types +from collections import OrderedDict import yaml from ate import exception @@ -309,3 +310,52 @@ def lower_dict_key(origin_dict, depth=1): new_dict[key.lower()] = value return new_dict + +def convert_to_order_dict(map_list): + """ convert mapping in list to ordered dict + @param (list) map_list + [ + {"a": 1}, + {"b": 2} + ] + @return (OrderDict) + OrderDict({ + "a": 1, + "b": 2 + }) + """ + ordered_dict = OrderedDict() + for map_dict in map_list: + ordered_dict.update(map_dict) + + return ordered_dict + +def update_ordered_dict(ordered_dict, override_mapping): + """ override ordered_dict with new mapping + @param + (OrderDict) ordered_dict + OrderDict({ + "a": 1, + "b": 2 + }) + (dict) override_mapping + {"a": 3, "c": 4} + @return (OrderDict) + OrderDict({ + "a": 3, + "b": 2, + "c": 4 + }) + """ + for var, value in override_mapping.items(): + ordered_dict.update({var: value}) + + return ordered_dict + +def override_variables_binds(variable_binds, new_mapping): + """ convert variable_binds in testcase to ordered mapping, with new_mapping overrided + """ + return update_ordered_dict( + convert_to_order_dict(variable_binds), + new_mapping + ) diff --git a/tests/test_utils.py b/tests/test_utils.py index d535cd55..8a591e22 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -241,3 +241,33 @@ class TestUtils(ApiServerUnittest): self.assertIn("headers", new_dict["request"]) self.assertIn("Accept", new_dict["request"]["headers"]) self.assertIn("User-Agent", new_dict["request"]["headers"]) + + def test_convert_to_order_dict(self): + map_list = [ + {"a": 1}, + {"b": 2} + ] + ordered_dict = utils.convert_to_order_dict(map_list) + self.assertIsInstance(ordered_dict, dict) + self.assertIn("a", ordered_dict) + + def test_update_ordered_dict(self): + map_list = [ + {"a": 1}, + {"b": 2} + ] + ordered_dict = utils.convert_to_order_dict(map_list) + override_mapping = {"a": 3, "c": 4} + new_dict = utils.update_ordered_dict(ordered_dict, override_mapping) + self.assertEqual(3, new_dict["a"]) + self.assertEqual(4, new_dict["c"]) + + def test_override_variables_binds(self): + map_list = [ + {"a": 1}, + {"b": 2} + ] + override_mapping = {"a": 3, "c": 4} + new_dict = utils.override_variables_binds(map_list, override_mapping) + self.assertEqual(3, new_dict["a"]) + self.assertEqual(4, new_dict["c"])