From 37329d0ab622b0348ef2169ae14a264fe7394ab2 Mon Sep 17 00:00:00 2001 From: Liam DeVoe Date: Mon, 25 Aug 2025 19:40:06 -0400 Subject: [PATCH] fix list item hash --- src/rpdk/core/jsonutils/utils.py | 2 +- tests/contract/test_resource_client.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/rpdk/core/jsonutils/utils.py b/src/rpdk/core/jsonutils/utils.py index abadcce2..d868f9d2 100644 --- a/src/rpdk/core/jsonutils/utils.py +++ b/src/rpdk/core/jsonutils/utils.py @@ -29,7 +29,7 @@ def item_hash( if isinstance(item, dict): item = {k: item_hash(v) for k, v in item.items()} if isinstance(item, list): - item = [item_hash(i) for i in item].sort() + item = sorted(item_hash(i) for i in item) encoded = json.dumps(item, sort_keys=True).encode() dhash.update(encoded) return dhash.hexdigest() diff --git a/tests/contract/test_resource_client.py b/tests/contract/test_resource_client.py index cc09456b..3e175364 100644 --- a/tests/contract/test_resource_client.py +++ b/tests/contract/test_resource_client.py @@ -1909,6 +1909,24 @@ def test_compare_collection(resource_client, inputs, outputs, schema_fragment): resource_client.compare(inputs, outputs) +def test_compare_collection_with_list_items_should_fail(resource_client): + inputs = {"CollectionToCompare": [[1]]} + outputs = {"CollectionToCompare": [[2]]} + schema_fragment = { + "properties": { + "CollectionToCompare": { + "type": "array", + "insertionOrder": False, + "items": {"type": "array", "items": {"type": "integer"}}, + } + } + } + resource_client._update_schema(schema_fragment) + + with pytest.raises(AssertionError): + resource_client.compare(inputs, outputs) + + def test_compare_should_throw_key_error(resource_client): resource_client._update_schema(SCHEMA_WITH_NESTED_PROPERTIES) inputs = {"b": {"d": 1}, "f": [{"d": 1}], "h": [{"d": 1}]}