zapretgui/tests/test_diagnostics_levels.py
loop-uh cec9f58209
All checks were successful
Zapret source guards / validate (push) Successful in 15s
Windows-сборка / Dev Dev 21.1.7.135 опубликован
BlockCheck: у каждого вывода один владелец — общее окно обрыва, одно правило уровней, строки итога ссылаются на сайт и раздел данными, версия формата отчёта
- Окно обрыва «на 16 КБ» задано один раз (diagnostics/limits.py, 12–36 КБ) вместо
  трёх разных: проверка сайтов, проба объёма и подбор стратегий судят по нему.
  Подбор больше не считает рабочей стратегию, после которой сайт замирает на
  24–36 КБ, и читает ответ дальше верхней границы окна.
- diagnostics/levels.py: «сайт открывается» и порядок важности уровней — одно
  правило для движка, истории, сравнения, итога и прошлых проверок.
- Строка итога несёт site (ключ сайта) и section (раздел отчёта): экран
  открывает нужную карточку по ним, а не по первому слову русской фразы.
  Подмена DNS ведёт на «Подмену DNS», дата-центры Telegram — на карточку
  Telegram; кнопку «Telegram Proxy» ставит движок.
- Отчёт получил report_version; diagnostics/report_upgrade.py — единственное
  место, которое знает старый вид и переводит отчёты из файла и истории.
  Убрано дублирующее поле dns_poisoning_detected.
- Движок: шаги хода проверки задаёт services.progress_steps (одно место для
  движка, текста и экрана), пинг и «адрес как у браузера» — в net_access,
  шапка отчёта и сборка строк итога вынесены из run_blockcheck. Тест слоёв
  ловит любой импорт сокетов, TLS, HTTP и пинга в слое выводов.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:40:21 +03:00

33 lines
1.3 KiB
Python

"""Одно правило уровней: «открывается», порядок важности и худший уровень."""
from __future__ import annotations
import unittest
from diagnostics import levels
from diagnostics.verdict import Level
class LevelsTests(unittest.TestCase):
def test_open_means_ok_or_warn(self) -> None:
self.assertTrue(levels.is_open("ok"))
self.assertTrue(levels.is_open(Level.WARN))
self.assertFalse(levels.is_open("fail"))
self.assertFalse(levels.is_open("unknown"))
def test_rank_puts_broken_first_and_strangers_last(self) -> None:
ranked = sorted(["ok", "что-то", "unknown", "fail", Level.WARN], key=levels.level_rank)
self.assertEqual(ranked, ["fail", Level.WARN, "unknown", "ok", "что-то"])
def test_worst(self) -> None:
self.assertEqual(levels.worst(["ok", "warn", "unknown"]), "warn")
self.assertEqual(levels.worst([]), "ok")
self.assertEqual(levels.worst(["мусор"]), "ok")
def test_engine_levels_match_report_strings(self) -> None:
# Уровни отчёта — значения Level движка, и других быть не должно.
self.assertEqual(set(levels.LEVELS), {level.value for level in Level})
if __name__ == "__main__":
unittest.main()