"""Tests for CNN Fear & Greed Index collector.""" from unittest.mock import AsyncMock, patch import pytest from news_collector.collectors.fear_greed import FearGreedCollector @pytest.fixture def collector(): return FearGreedCollector() def test_collector_name(collector): assert collector.name == "fear_greed" assert collector.poll_interval == 3600 async def test_is_available(collector): assert await collector.is_available() is True async def test_collect_parses_api_response(collector): mock_data = { "fear_and_greed": { "score": 45.0, "rating": "Fear", "timestamp": "2026-04-02T12:00:00+00:00", } } with patch.object(collector, "_fetch_index", new_callable=AsyncMock, return_value=mock_data): result = await collector.collect() assert result.fear_greed == 45 assert result.fear_greed_label == "Fear" async def test_collect_returns_none_on_failure(collector): with patch.object(collector, "_fetch_index", new_callable=AsyncMock, return_value=None): result = await collector.collect() assert result is None def test_classify_label(): c = FearGreedCollector() assert c._classify(10) == "Extreme Fear" assert c._classify(30) == "Fear" assert c._classify(50) == "Neutral" assert c._classify(70) == "Greed" assert c._classify(85) == "Extreme Greed"