"""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"