85 lines
3.7 KiB
Python
85 lines
3.7 KiB
Python
class TestSearchTextBasic:
|
|
def test_unique_marker_on_two_pages(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="UNIQUE_MARKER_ALPHA")
|
|
pages = [h["page"] for h in hits]
|
|
assert pages == [1, 3]
|
|
|
|
def test_unique_marker_single_page(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="UNIQUE_MARKER_BETA")
|
|
assert len(hits) == 1
|
|
assert hits[0]["page"] == 2
|
|
|
|
def test_no_results(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="NONEXISTENT_TEXT_XYZ")
|
|
assert hits == []
|
|
|
|
def test_multi_page_hits(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="resistance")
|
|
pages = [h["page"] for h in hits]
|
|
assert 1 in pages
|
|
assert 2 in pages
|
|
|
|
|
|
class TestSearchTextCaseInsensitive:
|
|
def test_lowercase_query(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="unique_marker_alpha")
|
|
assert len(hits) == 2
|
|
|
|
def test_mixed_case_query(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="Unique_Marker_Alpha")
|
|
assert len(hits) == 2
|
|
|
|
def test_case_insensitive_content(self, search_pdf, call_tool):
|
|
lower = call_tool("search_text", filename=search_pdf, query="resistance")
|
|
upper = call_tool("search_text", filename=search_pdf, query="RESISTANCE")
|
|
assert len(lower) == len(upper)
|
|
|
|
|
|
class TestSearchTextContext:
|
|
def test_context_contains_query(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="UNIQUE_MARKER_BETA")
|
|
assert "UNIQUE_MARKER_BETA" in hits[0]["context"]
|
|
|
|
def test_context_has_surrounding_text(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="UNIQUE_MARKER_BETA")
|
|
assert len(hits[0]["context"]) > len("UNIQUE_MARKER_BETA")
|
|
|
|
def test_custom_context_chars(self, search_pdf, call_tool):
|
|
short = call_tool("search_text", filename=search_pdf, query="UNIQUE_MARKER_BETA", context_chars=10)
|
|
long = call_tool("search_text", filename=search_pdf, query="UNIQUE_MARKER_BETA", context_chars=200)
|
|
assert len(short[0]["context"]) <= len(long[0]["context"])
|
|
|
|
def test_zero_context(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="UNIQUE_MARKER_BETA", context_chars=0)
|
|
assert hits[0]["context"] == "UNIQUE_MARKER_BETA"
|
|
|
|
|
|
class TestSearchTextHitStructure:
|
|
def test_hit_has_page(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="resistance")
|
|
for hit in hits:
|
|
assert "page" in hit
|
|
assert isinstance(hit["page"], int)
|
|
|
|
def test_hit_has_context(self, search_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=search_pdf, query="resistance")
|
|
for hit in hits:
|
|
assert "context" in hit
|
|
assert isinstance(hit["context"], str)
|
|
|
|
|
|
class TestSearchTextOnOtherPdfs:
|
|
def test_search_basic_pdf(self, basic_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=basic_pdf, query="introductory")
|
|
assert len(hits) == 1
|
|
assert hits[0]["page"] == 1
|
|
|
|
def test_search_diagrams_pdf(self, diagrams_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=diagrams_pdf, query="Component A")
|
|
assert len(hits) == 1
|
|
assert hits[0]["page"] == 1
|
|
|
|
def test_search_nested_toc_pdf(self, nested_toc_pdf, call_tool):
|
|
hits = call_tool("search_text", filename=nested_toc_pdf, query="Kubernetes")
|
|
assert len(hits) >= 1
|