Add Dumas JSON utility batch

This commit is contained in:
2026-07-21 11:03:17 +00:00
parent 24d8ac5e14
commit 4ad9e93b63
3 changed files with 366 additions and 0 deletions

View File

@@ -1,11 +1,18 @@
import unittest
from dumas_json_nodes import (
DumasJSONArrayAppendNode,
DumasJSONArrayLengthNode,
DumasJSONArrayIteratorNode,
DumasJSONArraySliceNode,
DumasJSONFlattenNode,
DumasJSONGetValueNode,
DumasJSONHasKeyNode,
DumasJSONKeysNode,
DumasJSONMergeObjectsNode,
DumasJSONPickFieldsNode,
DumasJSONRemoveKeyNode,
DumasJSONUnflattenNode,
DumasJSONObjectIteratorNode,
DumasJSONObjectToStringNode,
DumasJSONStringToObjectNode,
@@ -48,6 +55,30 @@ class DumasJSONNodeTests(unittest.TestCase):
self.assertEqual(result, ({"user": {"name": "Dumas"}},))
def test_has_key_checks_nested_paths(self):
node = DumasJSONHasKeyNode()
result = node.has_key({"user": {"name": "Chris"}}, "user.name")
self.assertEqual(result, (True,))
def test_remove_key_removes_nested_values(self):
node = DumasJSONRemoveKeyNode()
result = node.remove_key({"user": {"name": "Chris", "role": "owner"}}, "user.role")
self.assertEqual(result, ({"user": {"name": "Chris"}},))
def test_pick_fields_builds_filtered_object(self):
node = DumasJSONPickFieldsNode()
result = node.pick_fields(
{"user": {"name": "Chris", "role": "owner"}, "meta": {"active": True}},
"user.name\nmeta.active",
)
self.assertEqual(result, ({"user": {"name": "Chris"}, "meta": {"active": True}},))
def test_merge_objects_deep_merges_dictionaries(self):
node = DumasJSONMergeObjectsNode()
@@ -75,6 +106,20 @@ class DumasJSONNodeTests(unittest.TestCase):
self.assertEqual(result, (4,))
def test_array_append_appends_parsed_value(self):
node = DumasJSONArrayAppendNode()
result = node.append_item([1, 2], '{"name":"Dumas"}')
self.assertEqual(result, ([1, 2, {"name": "Dumas"}],))
def test_array_slice_returns_subarray(self):
node = DumasJSONArraySliceNode()
result = node.slice_array([0, 1, 2, 3, 4], 1, 4, 2)
self.assertEqual(result, ([1, 3],))
def test_array_iterator_fixed_mode_uses_given_index(self):
node = DumasJSONArrayIteratorNode()
@@ -145,6 +190,20 @@ class DumasJSONNodeTests(unittest.TestCase):
self.assertEqual(result, (None, None, -1, 0))
def test_flatten_converts_nested_data_to_path_map(self):
node = DumasJSONFlattenNode()
result = node.flatten_json({"user": {"name": "Chris"}, "items": [{"id": 1}]})
self.assertEqual(result, ({"user.name": "Chris", "items.0.id": 1},))
def test_unflatten_rebuilds_nested_data(self):
node = DumasJSONUnflattenNode()
result = node.unflatten_json({"user.name": "Chris", "items.0.id": 1})
self.assertEqual(result, ({"user": {"name": "Chris"}, "items": [{"id": 1}]},))
if __name__ == "__main__":
unittest.main()