import pytest from unittest.mock import AsyncMock, patch, MagicMock from datetime import datetime, timezone from src.crawlers.microsoft_research_crawler import MicrosoftResearchCrawler from src.crawlers.dto import NewsItemDTO MOCK_MSR_RSS = """ Microsoft Research MSR Paper Title https://www.microsoft.com/en-us/research/publication/msr-paper/ MSR Paper Description Mon, 10 Mar 2026 10:00:00 GMT """ @pytest.mark.asyncio async def test_microsoft_research_crawler_fetch_latest(): crawler = MicrosoftResearchCrawler() with patch("aiohttp.ClientSession.get") as mock_get: mock_response = AsyncMock() mock_response.text.return_value = MOCK_MSR_RSS mock_response.status = 200 mock_response.raise_for_status = MagicMock() mock_get.return_value.__aenter__.return_value = mock_response items = await crawler.fetch_latest() assert len(items) == 1 assert items[0].title == "MSR Paper Title" assert items[0].url == "https://www.microsoft.com/en-us/research/publication/msr-paper/" assert items[0].source == "Microsoft Research" assert items[0].timestamp == datetime(2026, 3, 10, 10, 0, tzinfo=timezone.utc)