87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
"""Tests for field extraction module."""
|
|
|
|
from cmdparse.extractors import extract_array_index, extract_fields, flatten_dict, get_nested_value
|
|
|
|
|
|
class TestGetNestedValue:
|
|
def test_simple_dict_access(self):
|
|
data = {"name": "John", "age": 30}
|
|
assert get_nested_value(data, "name") == "John"
|
|
assert get_nested_value(data, "age") == 30
|
|
|
|
def test_nested_dict_access(self):
|
|
data = {"user": {"address": {"city": "NYC"}}}
|
|
assert get_nested_value(data, "user.address.city") == "NYC"
|
|
|
|
def test_list_index_access(self):
|
|
data = {"items": ["a", "b", "c"]}
|
|
assert get_nested_value(data, "items.0") == "a"
|
|
assert get_nested_value(data, "items.1") == "b"
|
|
|
|
def test_missing_key_returns_none(self):
|
|
data = {"name": "John"}
|
|
assert get_nested_value(data, "age") is None
|
|
|
|
def test_none_data_returns_none(self):
|
|
assert get_nested_value(None, "name") is None
|
|
|
|
|
|
class TestExtractArrayIndex:
|
|
def test_with_array_index(self):
|
|
base, index, rest = extract_array_index("items[0].name")
|
|
assert base == "items"
|
|
assert index == 0
|
|
assert rest == "name"
|
|
|
|
def test_without_array_index(self):
|
|
base, index, rest = extract_array_index("name")
|
|
assert base == "name"
|
|
assert index is None
|
|
assert rest is None
|
|
|
|
|
|
class TestExtractFields:
|
|
def test_extract_single_field(self):
|
|
data = [{"name": "John", "age": 30, "city": "NYC"}]
|
|
result = extract_fields(data, ["name"])
|
|
assert result == [{"name": "John"}]
|
|
|
|
def test_extract_multiple_fields(self):
|
|
data = [{"name": "John", "age": 30, "city": "NYC"}]
|
|
result = extract_fields(data, ["name", "city"])
|
|
assert result == [{"name": "John", "city": "NYC"}]
|
|
|
|
def test_extract_nested_fields(self):
|
|
data = [{"user": {"name": "John", "age": 30}}]
|
|
result = extract_fields(data, ["user.name"])
|
|
assert result == [{"user.name": "John"}]
|
|
|
|
def test_extract_from_multiple_rows(self):
|
|
data = [{"name": "John", "age": 30}, {"name": "Jane", "age": 25}]
|
|
result = extract_fields(data, ["name"])
|
|
assert result == [{"name": "John"}, {"name": "Jane"}]
|
|
|
|
def test_empty_fields_returns_original(self):
|
|
data = [{"name": "John", "age": 30}]
|
|
result = extract_fields(data, [])
|
|
assert result == data
|
|
|
|
def test_empty_data_returns_empty(self):
|
|
result = extract_fields([], ["name"])
|
|
assert result == []
|
|
|
|
|
|
class TestFlattenDict:
|
|
def test_flatten_simple_dict(self):
|
|
d = {"name": "John", "age": 30}
|
|
result = flatten_dict(d)
|
|
assert result == {"name": "John", "age": 30}
|
|
|
|
def test_flatten_nested_dict(self):
|
|
d = {"user": {"name": "John", "address": {"city": "NYC"}}}
|
|
result = flatten_dict(d)
|
|
assert "user.name" in result
|
|
assert "user.address.city" in result
|
|
assert result["user.name"] == "John"
|
|
assert result["user.address.city"] == "NYC"
|