zapretgui/tests/test_quick_service_cards.py
loop-uh 0a3978de8a
All checks were successful
Zapret source guards / validate (push) Successful in 10s
Windows-сборка / Dev Dev 21.1.7.189 опубликован
YouTube проверяется целиком и по настоящему видеосерверу: подбор по трём именам, чтение страницы распаковывается, общий googlevideo.com больше не проверяется
Причина того, что видеосервер почти никогда не находился на странице YouTube: страница приходила сжатой, а libcurl её не распаковывал, поэтому в ней нельзя было найти ни одного имени rr…googlevideo.com. Теперь страница запрашивается с gzip и deflate и распаковывается в самом запросе. Без настоящего узла видеосервер не проверяется и отчёт так и говорит: общий адрес googlevideo.com не видеосервер и всегда отвечает ошибкой. Карточка YouTube в подборе ведёт на страницу, а страница, видеосервер вашей сети и превью проверяются вместе, профиль пишется на все три имени. Шаг «Передача данных» засчитывает страницу, которая больше 16 КБ и пришла целиком.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 11:41:05 -04:00

129 lines
5.3 KiB
Python
Raw Permalink 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.

"""Быстрые карточки известных сервисов: данные, логотипы, выбор одним нажатием."""
from __future__ import annotations
import os
import unittest
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
from blockcheck.quick_services import QUICK_SERVICES, companions_for, service_for_target # noqa: E402
from blockcheck.ui.brand_icons import site_brand # noqa: E402
class ModelTests(unittest.TestCase):
def test_every_card_has_a_brand_logo_and_a_unique_target(self) -> None:
for service in QUICK_SERVICES:
self.assertIsNotNone(site_brand(service.key), service.key)
targets = [item.target for item in QUICK_SERVICES]
self.assertEqual(len(targets), len(set(targets)))
self.assertEqual(len({item.key for item in QUICK_SERVICES}), len(QUICK_SERVICES))
def test_the_best_known_services_come_first(self) -> None:
self.assertEqual([item.key for item in QUICK_SERVICES[:3]], ["youtube", "discord", "telegram"])
def test_youtube_card_checks_the_page_the_previews_and_the_video_server_together(self) -> None:
youtube = QUICK_SERVICES[0]
self.assertEqual(youtube.target, "www.youtube.com")
self.assertEqual(youtube.companions, (("googlevideo.com", "googlevideo.com"), ("ytimg.com", "i.ytimg.com")))
self.assertIn("именно вашей сети", youtube.hint)
def test_companions_follow_only_the_main_address_of_the_service(self) -> None:
self.assertEqual(companions_for("https://www.YouTube.com/"), (("googlevideo.com", "googlevideo.com"), ("ytimg.com", "i.ytimg.com")))
# Кто вписал один googlevideo.com или другой сайт, проверяет именно его.
self.assertEqual(companions_for("googlevideo.com"), ())
self.assertEqual(companions_for("discord.com"), ())
def test_card_is_found_by_the_address_in_the_field(self) -> None:
self.assertEqual(service_for_target("https://Discord.com/").key, "discord")
self.assertEqual(service_for_target("www.youtube.com").key, "youtube")
self.assertIsNone(service_for_target("example.org"))
self.assertIsNone(service_for_target(""))
class WidgetTests(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
from PyQt6.QtWidgets import QApplication
cls.app = QApplication.instance() or QApplication([])
def test_click_reports_the_address_and_target_marks_one_card(self) -> None:
from blockcheck.ui.quick_service_cards import QuickServiceCards
widget = QuickServiceCards()
picked: list[str] = []
widget.picked.connect(picked.append)
discord = next(card for card in widget.cards() if card.service.key == "discord")
discord.click()
widget.set_target("discord.com")
self.assertEqual(picked, ["discord.com"])
self.assertEqual(widget.selected_key(), "discord")
widget.set_target("example.org")
self.assertEqual(widget.selected_key(), "")
def test_one_card_per_service_with_logo_and_name(self) -> None:
from blockcheck.ui.quick_service_cards import QuickServiceCards
widget = QuickServiceCards()
self.assertEqual(len(widget.cards()), len(QUICK_SERVICES))
for card in widget.cards():
self.assertTrue(card.logo.icon_name())
self.assertEqual(card.name.text(), card.service.title)
def test_card_tells_screen_readers_whether_it_is_chosen(self) -> None:
from blockcheck.ui.quick_service_cards import QuickServiceCards
widget = QuickServiceCards()
widget.set_target("telegram.org")
telegram = next(card for card in widget.cards() if card.service.key == "telegram")
self.assertIn("Telegram, выбрано", telegram.accessibleName())
self.assertIn("не выбрано", widget.cards()[0].accessibleName())
class DomainPageTests(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
from PyQt6.QtWidgets import QApplication
cls.app = QApplication.instance() or QApplication([])
def _page(self):
from unittest.mock import Mock
from dns.ui.domain_lookup_page import DomainLookupPage
page = DomainLookupPage(dns_feature=Mock(), embedded=True)
self.addCleanup(page.deleteLater)
return page
def test_card_fills_the_field_and_starts_the_check_of_the_site_page(self) -> None:
from unittest.mock import patch
page = self._page()
youtube = next(card for card in page.quick_cards.cards() if card.service.key == "youtube")
with patch.object(page, "start_lookup") as start:
youtube.click()
# Для проверки домена у YouTube берётся страница сайта: видеосерверы добавляются к ней сами.
self.assertEqual(page.target_input.text(), "www.youtube.com")
start.assert_called_once()
self.assertEqual(page.quick_cards.selected_key(), "youtube")
def test_cards_are_off_while_a_check_is_running(self) -> None:
page = self._page()
page._set_running(True)
self.assertFalse(page.quick_cards.isEnabled())
page._set_running(False)
self.assertTrue(page.quick_cards.isEnabled())
if __name__ == "__main__":
unittest.main()