Files
omni-parse/tests/test_post_digest.py
Vlad Gothbreach f263d3ffff
Some checks failed
ci / test (3.10) (push) Has been cancelled
ci / test (3.11) (push) Has been cancelled
ci / test (3.12) (push) Has been cancelled
post_digest: заголовок = самая информативная фраза, чистка CAPS/гомоглифов/markdown, кликабельный сервис, тесты формата
2026-10-27 19:16:46 +03:00

83 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Формат дайджеста: чистка заголовков, объёмов, условий и группировка."""
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "tools"))
import post_digest as d # noqa: E402
def test_homoglyph_fix():
assert d.dehomoglyph("Cовет") == "Совет"
assert d.dehomoglyph("GitHub") == "GitHub"
def test_shout_to_sentence():
out = d.smart_case("DEEPSEEK ПРОДОЛЖАЕТ РАЗДАВАТЬ ТОКЕНЫ")
assert out.startswith("Deepseek")
assert not any(w.isupper() and len(w) > 4 for w in out.split())
def test_abbr_kept():
out = d.smart_case("FREE ДОСТУП К ТОПОВЫМ LLM ЧЕРЕЗ GITHUB-OAUTH")
assert "LLM" in out
def test_headline_drops_lead_and_caps():
out = d.headline("Cовет: не обязательно тратить большие деньги на инструменты ИИ")
assert not out.lower().startswith("cовет")
assert len(out) <= 80
def test_headline_no_dangling_preposition():
out = d.headline("RU 200 000 000 бесплатных токенов и тариф PRO на", n=40)
assert not out.rstrip("…").endswith(" на")
def test_gain_prefers_volume_over_price():
assert d.gain("подписка $10, дают 5 млн токенов") == "5 млн токенов"
def test_gain_skips_small_money():
assert d.gain("подписка за $10 на неделю") == ""
def test_period_and_conds():
txt = "90 дней PRO бесплатно, без карты и без KYC"
assert d.period(txt) == "90 дней"
assert d.conds(txt) == "без карты, без KYC"
def test_kind_grouping():
assert d.kind({"tags": "keys,trial"}) == "keys"
assert d.kind({"tags": ["accs"]}) == "accs"
assert d.kind({"tags": ""}) == "tools"
def test_card_render_offline():
it = {
"title": "**1 млн бесплатных токенов** на QWEN3.8-OMNI-FLASH",
"text": "дают 1 млн токенов на 90 дней, без карты и без KYC, ключ по ссылке",
"url": "https://example.com/post/1",
"source": "demo_channel",
"tags": "keys,trial",
}
html = chr(10).join(d.card(1, it))
assert "<b>1." in html
assert "1 млн" in html and "токенов" in html
assert "на 90 дней" in html
assert "без карты" in html
assert "<a href=" in html and "пост" in html
assert "**" not in html
def test_build_renders():
try:
text = d.build(3)
except Exception as exc: # sandbox без наполненной базы
import pytest
pytest.skip(str(exc))
assert "OMNI" in text and "КЛЮЧИ" in text.upper()
assert len(text) <= 4000