fix: resolve CI linting and type checking errors
Some checks failed
CI / test (push) Has been cancelled
Some checks failed
CI / test (push) Has been cancelled
This commit is contained in:
89
tests/test_extractors.py
Normal file
89
tests/test_extractors.py
Normal file
@@ -0,0 +1,89 @@
|
||||
"""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 == 'name'
|
||||
|
||||
|
||||
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'
|
||||
Reference in New Issue
Block a user