Add Dumas JSON utility batch
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user