Extended search functionality

This commit is contained in:
2026-03-16 19:18:11 +01:00
parent d427cec8d5
commit 0083e3d896
5 changed files with 232 additions and 135 deletions

View File

@@ -12,6 +12,7 @@ import pytest
from hxbooks.search import (
ComparisonOperator,
Field,
IsOperatorValue,
QueryParser,
SearchQuery,
_convert_value, # noqa: PLC2701
@@ -87,6 +88,14 @@ class TestFieldFilters:
assert filter.field == Field.AUTHOR
assert filter.value == "tolkien"
def test_parse_is_filter(self, parser: QueryParser) -> None:
"""Test parsing 'is' operator field filter."""
result = parser.parse("is:reading")
assert len(result.field_filters) == 1
filter = result.field_filters[0]
assert filter.field == Field.IS
assert filter.value == IsOperatorValue.READING
def test_parse_negated_filter(self, parser: QueryParser) -> None:
"""Test parsing negated field filter."""
result = parser.parse("-genre:romance")
@@ -243,6 +252,21 @@ class TestTypeConversion:
assert result == "123"
assert isinstance(result, str)
def test_convert_is_operator(self, parser: QueryParser) -> None:
"""Test converting values for 'is' operator fields."""
result = _convert_value(Field.IS, "reading")
assert result == IsOperatorValue.READING
result = _convert_value(Field.IS, "dropped")
assert result == IsOperatorValue.DROPPED
result = _convert_value(Field.IS, "wished")
assert result == IsOperatorValue.WISHED
# Invalid value should return UNKNOWN
result = _convert_value(Field.IS, "invalid-status")
assert result == IsOperatorValue.UNKNOWN
class TestParsingEdgeCases:
"""Test edge cases and error handling in query parsing."""