e74b0e1e93
Add a pytest-discovered tests/conftest.py for the last30days scripts path and remove duplicate per-file sys.path.insert boilerplate from tests. Normalize affected imports to rely on the shared scripts path and remove the now-unneeded E402 suppressions.
93 lines
3.5 KiB
Python
93 lines
3.5 KiB
Python
"""Tests for the BRAVE/SERPER web-promo suppression when hosting-model-driven."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
def _engine() -> Path:
|
|
return REPO_ROOT / "skills" / "last30days" / "scripts" / "last30days.py"
|
|
|
|
|
|
class FooterNudgeSuppressionTests(unittest.TestCase):
|
|
def _run(self, *argv: str, topic: str) -> subprocess.CompletedProcess:
|
|
cmd = [
|
|
sys.executable,
|
|
str(_engine()),
|
|
topic,
|
|
"--mock",
|
|
"--emit=md",
|
|
*argv,
|
|
]
|
|
env = {
|
|
**os.environ,
|
|
"LAST30DAYS_SKIP_PREFLIGHT": "1",
|
|
# Skip ~/.config/last30days/.env so a contributor's saved
|
|
# BRAVE/EXA/SERPER/PARALLEL key doesn't make grounding "available"
|
|
# and suppress the promo we're checking for.
|
|
"LAST30DAYS_CONFIG_DIR": "",
|
|
# Pin X as available so _missing_sources_for_promo selects "web"
|
|
# (otherwise the "x" promo wins and the BRAVE_API_KEY string never
|
|
# appears).
|
|
"XAI_API_KEY": "test-stub",
|
|
}
|
|
# Strip any grounded-web keys the host might have so the promo path
|
|
# triggers deterministically in mock + no-backend. Also strip X cookie
|
|
# credentials so XAI_API_KEY is the unambiguous X backend.
|
|
for key in ("BRAVE_API_KEY", "EXA_API_KEY", "SERPER_API_KEY",
|
|
"PARALLEL_API_KEY", "OPENROUTER_API_KEY",
|
|
"AUTH_TOKEN", "CT0", "LAST30DAYS_X_BACKEND"):
|
|
env.pop(key, None)
|
|
# Run from a tmpdir so _find_project_env() can't walk up into any
|
|
# .claude/last30days.env above the repo on the contributor's machine.
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
return subprocess.run(
|
|
cmd, capture_output=True, text=True, env=env, cwd=tmp,
|
|
)
|
|
|
|
def test_bare_run_emits_web_promo(self):
|
|
result = self._run(topic="OpenAI")
|
|
combined = result.stdout + result.stderr
|
|
# Mock mode still shows the promo when nothing indicates a hosting
|
|
# model is driving. Check both streams since the UI may emit to stderr.
|
|
self.assertIn("BRAVE_API_KEY", combined)
|
|
|
|
def test_competitors_plan_suppresses_web_promo(self):
|
|
result = self._run(
|
|
"--competitors-list", "Anthropic",
|
|
"--competitors-plan",
|
|
'{"Anthropic":{"x_handle":"AnthropicAI","subreddits":["ClaudeAI"]}}',
|
|
topic="OpenAI",
|
|
)
|
|
combined = result.stdout + result.stderr
|
|
self.assertNotIn(
|
|
"unlock native grounded web search",
|
|
combined,
|
|
msg="web promo should be suppressed when --competitors-plan is passed",
|
|
)
|
|
|
|
def test_plan_suppresses_web_promo(self):
|
|
plan = (
|
|
'{"intent":"concept","freshness_mode":"balanced_recent",'
|
|
'"cluster_mode":"none","subqueries":[{"label":"primary",'
|
|
'"search_query":"OpenAI","ranking_query":"OpenAI",'
|
|
'"sources":["grounding"]}],"source_weights":{"grounding":1.0}}'
|
|
)
|
|
result = self._run("--plan", plan, topic="OpenAI")
|
|
combined = result.stdout + result.stderr
|
|
self.assertNotIn(
|
|
"unlock native grounded web search",
|
|
combined,
|
|
msg="web promo should be suppressed when --plan is passed",
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|