"""Tests for field extraction module.""" import pytest from cmdparse.extractors import ( extract_fields, get_nested_value, extract_array_index, flatten_dict ) 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'