diff --git a/src/documents/tests/search/test_acceptance.py b/src/documents/tests/search/test_acceptance.py index efbc890a2..b19e2524a 100644 --- a/src/documents/tests/search/test_acceptance.py +++ b/src/documents/tests/search/test_acceptance.py @@ -245,3 +245,19 @@ class TestMultitokenInNestedOr: backend.add_or_update(doc_b) matched = _matched_ids(backend, 'tag:"multi word tag" OR title:B') assert matched == {doc_a.pk, doc_b.pk} + + +class TestUnregisteredIdFieldFoldsToLiteralText: + """tag_id, owner_id, etc. are intentionally excluded from the + FieldRegistry - whoosh-compat parity leniency folds them into a literal + text search rather than raising a diagnostic/400 (see docs/usage.md's + advanced-search section). Prove the fold is inert against real data, not + just that parsing doesn't raise.""" + + def test_tag_id_query_matches_nothing( + self, + backend: TantivyBackend, + indexed_documents: dict[str, int], + ) -> None: + matched = _matched_ids(backend, "tag_id:5") + assert matched == set() diff --git a/src/documents/tests/search/test_query.py b/src/documents/tests/search/test_query.py index a1c63bd6e..fcb9c9286 100644 --- a/src/documents/tests/search/test_query.py +++ b/src/documents/tests/search/test_query.py @@ -152,6 +152,9 @@ class TestParseUserQuery: ) -> None: # tag_id is intentionally excluded from the FieldRegistry — whoosh-compat # parity leniency folds it into literal text, not a diagnostic/400. + # A result-level assertion that this fold actually matches nothing + # against real documents lives in + # test_acceptance.py::TestUnregisteredIdFieldFoldsToLiteralText. q = parse_user_query(query_index, "tag_id:5", UTC) assert isinstance(q, tantivy.Query)