# tests/test_dict_utils.py import pytest from models.openapi import Schema from utils.dict_utils import add_key, modify_key, remove_key, set_value def test_add_key(): data = {"existing_key": "existing_value"} element_key = "new_key" element_reference = Schema(type="object") result, new_key, new_value = add_key(data, element_key, element_reference) assert result is not None assert "existing_key" in result assert "new_key" in result assert isinstance(result["new_key"], dict) assert "extra_key_666" in result["new_key"] assert result["new_key"]["extra_key_666"] == 666 def test_modify_key(): data = {"existing_key": "existing_value"} element_key = "existing_key" element_reference = Schema(type="object") result, new_key = modify_key(data, element_key, element_reference) assert result is not None assert "existing_key" not in result assert new_key in result assert result[new_key] == "existing_value" def test_remove_key(): data = {"key_to_remove": "value", "key_to_keep": "value"} element_key = "key_to_remove" result, removed = remove_key(data, element_key) assert result is not None assert removed is True assert "key_to_remove" not in result assert "key_to_keep" in result def test_set_value(): data = {"existing_key": "old_value"} element_key = "existing_key" element_reference = Schema(type="string") def value_generator(current, reference): return "new_value" result, new_value = set_value(data, element_key, element_reference, value_generator) assert result is not None assert result["existing_key"] == "new_value" assert new_value == "new_value" def test_add_key_nested(): data = {"level1": {"level2": {}}} element_key = "level1.level2.level3" element_reference = Schema(type="object") result, new_key, new_value = add_key(data, element_key, element_reference) assert result is not None assert "level1" in result assert "level2" in result["level1"] assert "level3" in result["level1"]["level2"] assert isinstance(result["level1"]["level2"]["level3"], dict) assert "extra_key_666" in result["level1"]["level2"]["level3"] assert result["level1"]["level2"]["level3"]["extra_key_666"] == 666 def test_modify_key_array(): data = {"array_key": [{"nested_key": "value"}]} element_key = "array_key[].nested_key" element_reference = Schema(type="string") result, new_key = modify_key(data, element_key, element_reference) assert result is not None assert "array_key" in result assert len(result["array_key"]) == 1 assert "nested_key" not in result["array_key"][0] assert new_key in result["array_key"][0] assert result["array_key"][0][new_key] == "value" def test_remove_key_not_found(): data = {"key": "value"} element_key = "non_existent_key" result, removed = remove_key(data, element_key) assert result == data assert removed is False def test_set_value_create_nested(): data = {} element_key = "level1.level2.level3" element_reference = Schema(type="string") def value_generator(current, reference): return "new_nested_value" result, new_value = set_value(data, element_key, element_reference, value_generator) assert result is not None assert "level1" in result assert "level2" in result["level1"] assert "level3" in result["level1"]["level2"] assert result["level1"]["level2"]["level3"] == "new_nested_value" assert new_value == "new_nested_value"