Files
wehub-resource-sync 7a0da7932b
OSV-Scanner (Scheduled) / scan-scheduled (push) Failing after 0s
Create Release / test-gate (push) Has been cancelled
Create Release / release-gate (push) Has been cancelled
Create Release / ci-gate (push) Has been cancelled
Create Release / version-check (push) Has been cancelled
Create Release / e2e-test-gate (push) Has been cancelled
Create Release / responsive-test-gate (push) Has been cancelled
Create Release / compat-test-gate (push) Has been cancelled
Create Release / compose-integration-gate (push) Has been cancelled
Create Release / vulture-gate (push) Has been cancelled
Create Release / build (push) Has been cancelled
Create Release / provenance (push) Has been cancelled
Create Release / prerelease-docker (push) Has been cancelled
Create Release / publish-docker (push) Has been cancelled
Create Release / create-release (push) Has been cancelled
Create Release / cleanup-changelog (push) Has been cancelled
Create Release / trigger-pypi (push) Has been cancelled
Create Release / monitor-pypi (push) Has been cancelled
Create Release / Clean up orphan prerelease tags and signatures (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-form] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-metrics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-workflow] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-core] (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [history-news] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [library] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [link-analytics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-core] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-lifecycle] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [error-benchmark] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) (push) Has been cancelled
Docker Tests (Consolidated) / Accessibility Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Unit Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Example Tests (push) Has been cancelled
Docker Tests (Consolidated) / Production Image Smoke Test (push) Has been cancelled
Docker Tests (Consolidated) / Infrastructure Tests (push) Has been cancelled
OSSF Scorecard / OSSF Security Scorecard Analysis (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [mobile] (push) Has been cancelled
Backwards Compatibility / Verify Encryption Constants (push) Has been cancelled
Backwards Compatibility / PyPI Version Compatibility (push) Has been cancelled
Backwards Compatibility / Database Migration Tests (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Docker Tests (Consolidated) / detect-changes (push) Has been cancelled
Docker Tests (Consolidated) / Build Test Image (push) Has been cancelled
Docker Tests (Consolidated) / All Pytest Tests + Coverage (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [accessibility] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [api-crud] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-login] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-register] (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:08:55 +08:00

362 lines
11 KiB
Python

"""
Tests for utilities/search_utilities.py
Tests cover:
- remove_think_tags function
- extract_links_from_search_results function
- format_links_to_markdown function
- format_findings function
"""
class TestRemoveThinkTags:
"""Tests for remove_think_tags function."""
def test_removes_paired_think_tags(self):
"""Test that paired think tags are removed."""
from local_deep_research.utilities.search_utilities import (
remove_think_tags,
)
text = "Hello <think>This is internal</think> World"
result = remove_think_tags(text)
assert result == "Hello World"
def test_removes_multiline_think_tags(self):
"""Test that multiline think tags are removed."""
from local_deep_research.utilities.search_utilities import (
remove_think_tags,
)
text = "Start <think>\nLine 1\nLine 2\n</think> End"
result = remove_think_tags(text)
assert result == "Start End"
def test_removes_orphaned_opening_tag(self):
"""Test that orphaned opening think tags are removed."""
from local_deep_research.utilities.search_utilities import (
remove_think_tags,
)
text = "Hello <think>world"
result = remove_think_tags(text)
assert result == "Hello world"
def test_removes_orphaned_closing_tag(self):
"""Test that orphaned closing think tags are removed."""
from local_deep_research.utilities.search_utilities import (
remove_think_tags,
)
text = "Hello</think> world"
result = remove_think_tags(text)
assert result == "Hello world"
def test_strips_whitespace(self):
"""Test that result is stripped."""
from local_deep_research.utilities.search_utilities import (
remove_think_tags,
)
text = " Hello "
result = remove_think_tags(text)
assert result == "Hello"
def test_text_without_tags_unchanged(self):
"""Test that text without think tags is unchanged."""
from local_deep_research.utilities.search_utilities import (
remove_think_tags,
)
text = "Hello World"
result = remove_think_tags(text)
assert result == "Hello World"
class TestExtractLinksFromSearchResults:
"""Tests for extract_links_from_search_results function."""
def test_extracts_links_from_results(self):
"""Test extracting links from search results."""
from local_deep_research.utilities.search_utilities import (
extract_links_from_search_results,
)
results = [
{
"title": "Result 1",
"link": "https://example.com/1",
"index": "1",
},
{
"title": "Result 2",
"link": "https://example.com/2",
"index": "2",
},
]
links = extract_links_from_search_results(results)
assert len(links) == 2
assert links[0]["title"] == "Result 1"
assert links[0]["url"] == "https://example.com/1"
assert links[0]["index"] == "1"
def test_returns_empty_for_empty_input(self):
"""Test returns empty list for empty input."""
from local_deep_research.utilities.search_utilities import (
extract_links_from_search_results,
)
assert extract_links_from_search_results([]) == []
assert extract_links_from_search_results(None) == []
def test_handles_missing_title(self):
"""Test handles results without title."""
from local_deep_research.utilities.search_utilities import (
extract_links_from_search_results,
)
results = [{"link": "https://example.com"}]
links = extract_links_from_search_results(results)
# Should not include results without title
assert len(links) == 0
def test_handles_missing_link(self):
"""Test handles results without link."""
from local_deep_research.utilities.search_utilities import (
extract_links_from_search_results,
)
results = [{"title": "No Link Result"}]
links = extract_links_from_search_results(results)
# Should not include results without link
assert len(links) == 0
def test_strips_whitespace_from_values(self):
"""Test that whitespace is stripped from values."""
from local_deep_research.utilities.search_utilities import (
extract_links_from_search_results,
)
results = [
{
"title": " Padded Title ",
"link": " https://example.com ",
"index": " 1 ",
}
]
links = extract_links_from_search_results(results)
assert links[0]["title"] == "Padded Title"
assert links[0]["url"] == "https://example.com"
assert links[0]["index"] == "1"
def test_handles_none_values(self):
"""Test handles None values gracefully."""
from local_deep_research.utilities.search_utilities import (
extract_links_from_search_results,
)
results = [{"title": None, "link": None}]
links = extract_links_from_search_results(results)
assert len(links) == 0
class TestFormatLinksToMarkdown:
"""Tests for format_links_to_markdown function."""
def test_formats_single_link(self):
"""Test formatting a single link."""
from local_deep_research.utilities.search_utilities import (
format_links_to_markdown,
)
links = [
{"title": "Example", "url": "https://example.com", "index": "1"}
]
result = format_links_to_markdown(links)
assert "Example" in result
assert "https://example.com" in result
def test_formats_multiple_links(self):
"""Test formatting multiple links."""
from local_deep_research.utilities.search_utilities import (
format_links_to_markdown,
)
links = [
{"title": "First", "url": "https://first.com", "index": "1"},
{"title": "Second", "url": "https://second.com", "index": "2"},
]
result = format_links_to_markdown(links)
assert "First" in result
assert "Second" in result
def test_deduplicates_urls(self):
"""Test that duplicate URLs are deduplicated."""
from local_deep_research.utilities.search_utilities import (
format_links_to_markdown,
)
links = [
{"title": "First", "url": "https://same.com", "index": "1"},
{"title": "Duplicate", "url": "https://same.com", "index": "2"},
]
result = format_links_to_markdown(links)
# Should only appear once
assert result.count("https://same.com") == 1
def test_returns_empty_for_empty_input(self):
"""Test returns empty for no links."""
from local_deep_research.utilities.search_utilities import (
format_links_to_markdown,
)
result = format_links_to_markdown([])
assert result == ""
def test_handles_link_key_fallback(self):
"""Test handles 'link' key as fallback for 'url'."""
from local_deep_research.utilities.search_utilities import (
format_links_to_markdown,
)
links = [{"title": "Test", "link": "https://example.com", "index": "1"}]
result = format_links_to_markdown(links)
assert "https://example.com" in result
class TestFormatFindings:
"""Tests for format_findings function."""
def test_formats_empty_findings(self):
"""Test formatting with empty findings."""
from local_deep_research.utilities.search_utilities import (
format_findings,
)
result = format_findings([], "Synthesized content", {})
assert "Synthesized content" in result
def test_includes_synthesized_content(self):
"""Test that synthesized content is included."""
from local_deep_research.utilities.search_utilities import (
format_findings,
)
result = format_findings([], "My analysis of the data", {})
assert "My analysis of the data" in result
def test_includes_questions_by_iteration(self):
"""Test that questions are included by iteration."""
from local_deep_research.utilities.search_utilities import (
format_findings,
)
questions = {1: ["Question 1", "Question 2"], 2: ["Question 3"]}
result = format_findings([], "Content", questions)
assert "SEARCH QUESTIONS BY ITERATION" in result
assert "Question 1" in result
assert "Question 2" in result
assert "Question 3" in result
assert "Iteration 1" in result
assert "Iteration 2" in result
def test_includes_detailed_findings(self):
"""Test that detailed findings are included."""
from local_deep_research.utilities.search_utilities import (
format_findings,
)
findings = [
{
"phase": "Initial Search",
"content": "Found relevant information.",
"search_results": [],
}
]
result = format_findings(findings, "Summary", {})
assert "DETAILED FINDINGS" in result
assert "Initial Search" in result
assert "Found relevant information" in result
def test_formats_follow_up_phase_with_question(self):
"""Test formatting follow-up phase shows question."""
from local_deep_research.utilities.search_utilities import (
format_findings,
)
findings = [
{
"phase": "Follow-up Iteration 1.1",
"content": "Follow-up content",
"search_results": [],
}
]
questions = {1: ["First follow-up question"]}
result = format_findings(findings, "Summary", questions)
assert "First follow-up question" in result
def test_includes_sources_in_findings(self):
"""Test that sources are included in findings."""
from local_deep_research.utilities.search_utilities import (
format_findings,
)
findings = [
{
"phase": "Search",
"content": "Content",
"search_results": [
{
"title": "Source 1",
"link": "https://source1.com",
"index": "1",
}
],
}
]
result = format_findings(findings, "Summary", {})
assert "ALL SOURCES" in result or "source1.com" in result
class TestLanguageCodeMap:
"""Tests for LANGUAGE_CODE_MAP constant."""
def test_contains_common_languages(self):
"""Test that map contains common languages."""
from local_deep_research.utilities.search_utilities import (
LANGUAGE_CODE_MAP,
)
assert LANGUAGE_CODE_MAP["english"] == "en"
assert LANGUAGE_CODE_MAP["french"] == "fr"
assert LANGUAGE_CODE_MAP["german"] == "de"
assert LANGUAGE_CODE_MAP["spanish"] == "es"
assert LANGUAGE_CODE_MAP["italian"] == "it"
assert LANGUAGE_CODE_MAP["japanese"] == "ja"
assert LANGUAGE_CODE_MAP["chinese"] == "zh"