import unittest from dumas_json_nodes import ( DumasJSONArrayLengthNode, DumasJSONGetValueNode, DumasJSONKeysNode, DumasJSONMergeObjectsNode, DumasJSONObjectToStringNode, DumasJSONStringToObjectNode, DumasJSONSetValueNode, ) class DumasJSONNodeTests(unittest.TestCase): def test_parses_valid_json(self): node = DumasJSONStringToObjectNode() result = node.convert_string_to_json('{"name":"Dumas","count":2}') self.assertEqual(result, ({"name": "Dumas", "count": 2},)) def test_returns_none_for_invalid_json(self): node = DumasJSONStringToObjectNode() result = node.convert_string_to_json('{"name":') self.assertEqual(result, (None,)) def test_object_to_string_can_pretty_print(self): node = DumasJSONObjectToStringNode() result = node.convert_object_to_string({"b": 1, "a": 2}, True, True) self.assertEqual(result, ('{\n "a": 2,\n "b": 1\n}',)) def test_get_value_reads_nested_paths(self): node = DumasJSONGetValueNode() result = node.get_value({"items": [{"id": "a1"}]}, "items.0.id") self.assertEqual(result, ("a1",)) def test_set_value_writes_nested_paths(self): node = DumasJSONSetValueNode() result = node.set_value({"user": {"name": "Chris"}}, "user.name", '"Dumas"') self.assertEqual(result, ({"user": {"name": "Dumas"}},)) def test_merge_objects_deep_merges_dictionaries(self): node = DumasJSONMergeObjectsNode() result = node.merge_objects( {"user": {"name": "Chris", "flags": {"admin": False}}}, {"user": {"flags": {"admin": True}, "role": "owner"}}, ) self.assertEqual( result, ({"user": {"name": "Chris", "flags": {"admin": True}, "role": "owner"}},), ) def test_keys_returns_key_list_and_count(self): node = DumasJSONKeysNode() result = node.list_keys({"name": "Dumas", "kind": "nodes"}) self.assertEqual(result, (["name", "kind"], 2)) def test_array_length_returns_length(self): node = DumasJSONArrayLengthNode() result = node.get_length([1, 2, 3, 4]) self.assertEqual(result, (4,)) if __name__ == "__main__": unittest.main()