- git mv of all existing files into version-python/ (history preserved) - version-rust/: minimal cargo scaffold (edition 2024), no deps yet - root AGENTS.md documents the transition rules and artifact/schema contract - main is untouched; the python layout there stays as-is
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Offline extraction test with a synthetic export.json (no network, no deps).
|
|
|
|
Run with: python3 tests/test_extract.py
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import base64
|
|
import json
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
|
|
from dlphelper.discord import classify, extract_urls # noqa: E402
|
|
|
|
|
|
def b64(s: str) -> str:
|
|
return base64.b64encode(s.encode()).decode()
|
|
|
|
|
|
def main() -> None:
|
|
messages = [
|
|
{
|
|
"id": "1",
|
|
"timestamp": "2026-01-01T00:00:00",
|
|
"author": {"name": "poster"},
|
|
"content": f"chaos stuff: {b64('https://gofile.io/d/abc123')}",
|
|
},
|
|
{
|
|
"id": "2",
|
|
"timestamp": "2026-01-02T00:00:00",
|
|
"author": {"name": "poster"},
|
|
"content": (
|
|
f"0807 zip: {b64('https://0807.st/6saCNie.zip')}\n"
|
|
f"dupe of 1: {b64('https://gofile.io/d/abc123')}\n"
|
|
f"plain: https://0807.st/plainLink.zip and "
|
|
f"https://discord.com/channels/1/2 (unsupported)\n"
|
|
f"junk: {b64('https://pixeldrain.com/u/xyz')} "
|
|
"and not-our-domain base64: aHR0cHM6Ly9leGFtcGxlLm9yZw=="
|
|
),
|
|
},
|
|
]
|
|
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
export = Path(tmp) / "export.json"
|
|
export.write_text(json.dumps({"messages": messages}), encoding="utf-8")
|
|
found = extract_urls(export)
|
|
|
|
urls = {f.url for f in found}
|
|
expected = {"https://gofile.io/d/abc123", "https://0807.st/6saCNie.zip",
|
|
"https://0807.st/plainLink.zip"}
|
|
assert urls == expected, f"unexpected urls: {sorted(urls)}"
|
|
|
|
by_url = {f.url: f for f in found}
|
|
g = by_url["https://gofile.io/d/abc123"]
|
|
assert g.host == "gofile" and g.message_id == "1" and g.author == "poster"
|
|
assert classify("https://0807.st/x.zip") == "0807"
|
|
assert classify("https://gofile.io/d/x") == "gofile"
|
|
assert classify("https://example.org/x") is None
|
|
|
|
print("test_extract: OK")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|