""" Test for the NewsAPI handler. """ import os import unittest import asyncio from dotenv import load_dotenv from execution.api_handlers.news_handler import NewsSearchHandler from config.config import get_config class TestNewsHandler(unittest.TestCase): """Test cases for the NewsAPI handler.""" def setUp(self): """Set up the test environment.""" # Load environment variables load_dotenv() # Initialize the handler self.handler = NewsSearchHandler() def test_handler_initialization(self): """Test that the handler initializes correctly.""" self.assertEqual(self.handler.get_name(), "news") # Check if API key is available (this test may be skipped in CI environments) if os.environ.get("NEWSAPI_API_KEY"): self.assertTrue(self.handler.is_available()) # Check rate limit info rate_limit_info = self.handler.get_rate_limit_info() self.assertIn("requests_per_minute", rate_limit_info) self.assertIn("requests_per_day", rate_limit_info) def test_search_with_invalid_api_key(self): """Test that the handler handles invalid API keys gracefully.""" # Temporarily set the API key to an invalid value original_api_key = self.handler.api_key self.handler.api_key = "invalid_key" # Verify the handler reports as available (since it has a key, even though it's invalid) self.assertTrue(self.handler.is_available()) # Try to search with the invalid key results = self.handler.search("test", num_results=1) # Verify that we get an empty result set self.assertEqual(len(results), 0) # Restore the original API key self.handler.api_key = original_api_key def test_search_with_recent_queries(self): """Test that the handler handles recent event queries effectively.""" # Skip this test if no API key is available if not self.handler.is_available(): self.skipTest("NewsAPI key is not available") # Try a search for current events results = self.handler.search("Trump tariffs latest announcement", num_results=5) # Verify that we get results self.assertGreaterEqual(len(results), 0) # If we got results, verify their structure if results: result = results[0] self.assertIn("title", result) self.assertIn("url", result) self.assertIn("snippet", result) self.assertIn("source", result) self.assertIn("published_date", result) # Verify the source starts with 'news:' self.assertTrue(result["source"].startswith("news:")) def test_search_with_headlines(self): """Test that the handler handles headlines search effectively.""" # Skip this test if no API key is available if not self.handler.is_available(): self.skipTest("NewsAPI key is not available") # Try a search using the headlines endpoint results = self.handler.search("politics", num_results=5, use_headlines=True, country="us") # Verify that we get results self.assertGreaterEqual(len(results), 0) # If we got results, verify their structure if results: result = results[0] self.assertIn("title", result) self.assertIn("url", result) self.assertIn("source", result) if __name__ == "__main__": unittest.main()