import pytest import aiohttp from datetime import datetime, timezone from unittest.mock import patch, MagicMock, AsyncMock from src.crawlers.static_crawler import StaticCrawler from src.crawlers.skolkovo_crawler import SkolkovoCrawler from src.crawlers.dto import NewsItemDTO @pytest.mark.asyncio async def test_static_crawler_addmeto(): html_content = """
Message Link Some content text about AI.
""" with patch("aiohttp.ClientSession.get") as mock_get: mock_response = MagicMock() mock_response.status = 200 mock_response.text = AsyncMock(return_value=html_content) mock_response.__aenter__.return_value = mock_response mock_get.return_value = mock_response crawler = StaticCrawler(url="https://t.me/s/addmeto", source="Telegram: Addmeto", selector=".tgme_widget_message_text") items = await crawler.fetch_latest() assert len(items) > 0 assert items[0].source == "Telegram: Addmeto" assert "t.me/addmeto/123" in items[0].url @pytest.mark.asyncio async def test_static_crawler_rsf(): html_content = """
RSF News Title Description of news.
""" with patch("aiohttp.ClientSession.get") as mock_get: mock_response = MagicMock() mock_response.status = 200 mock_response.text = AsyncMock(return_value=html_content) mock_response.__aenter__.return_value = mock_response mock_get.return_value = mock_response crawler = StaticCrawler(url="https://rscf.ru/en/news/", source="RSF", selector=".news-item") items = await crawler.fetch_latest() assert len(items) > 0 assert items[0].source == "RSF" assert "rscf.ru/en/news/123" in items[0].url @pytest.mark.asyncio async def test_skolkovo_crawler(): html_content = """
Skolkovo News
""" with patch("src.crawlers.playwright_crawler.PlaywrightCrawler.fetch_latest") as mock_fetch: mock_fetch.return_value = [ NewsItemDTO(title="Skolkovo News", url="https://sk.ru/news/123", content_text="Text", source="Skolkovo", timestamp=datetime.now(timezone.utc)) ] crawler = SkolkovoCrawler(url="https://sk.ru/news/", source="Skolkovo") items = await crawler.fetch_latest() assert len(items) > 0 assert items[0].source == "Skolkovo" assert "sk.ru" in items[0].url