Files
security-game/tools/test_refcollect.py
T
zwitschi 43c17ce3c0
Full build / Import + headless tests (push) Successful in 54s
Full build / Full desktop build + optional release (push) Skipped
Add the local-only DuckDuckGo reference collector
2026-11-03 17:12:18 +01:00

52 lines
1.9 KiB
Python

"""Tests for the local-only reference collector (no network)."""
import json
import unittest
from pathlib import Path
from tempfile import TemporaryDirectory
from unittest import mock
import refcollect as rc
class SlugTests(unittest.TestCase):
def test_slug_folds_and_strips(self):
self.assertEqual(rc._slug("El Capitan Entertainment Centre"),
"el-capitan-entertainment-centre")
self.assertEqual(rc._slug(" !!! "), "block")
class ManifestTests(unittest.TestCase):
def test_manifest_rows_are_marked_local_only_and_never_licenced(self):
rows = [{"title": "t", "image": "https://x/i.jpg", "thumbnail": "",
"source": "https://x/", "width": 640, "height": 480}]
out = rc._manifest_rows(rows)
self.assertTrue(out[0]["local_only"])
self.assertEqual(out[0]["licence"], "unchecked-local")
class SheetTests(unittest.TestCase):
def test_sheet_requires_a_manifest(self):
with TemporaryDirectory() as tmp:
with mock.patch.object(rc, "RESEARCH_DIR", Path(tmp)):
with self.assertRaises(SystemExit):
rc.cmd_sheet(mock.Mock(slug="nope"))
def test_sheet_composes_from_downloaded_frames(self):
from PIL import Image
with TemporaryDirectory() as tmp:
root = Path(tmp)
slug_dir = root / "block"
slug_dir.mkdir()
for i in range(3):
Image.new("RGB", (640, 400), (i * 60, 0, 0)).save(slug_dir / f"{i:02d}.jpg")
(slug_dir / "manifest.json").write_text(json.dumps([
{"file": "00.jpg"}, {"file": "01.jpg"}, {"file": "02.jpg"}]))
with mock.patch.object(rc, "RESEARCH_DIR", root):
rc.cmd_sheet(mock.Mock(slug="block"))
self.assertTrue((slug_dir / "sheet.jpg").is_file())
if __name__ == "__main__":
unittest.main()