import pytest from unittest.mock import MagicMock, patch import os import sys # Add the src directory to the Python path src_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'src')) sys.path.insert(0, src_dir) from models.data import TextData def test_init(): data = TextData() assert data.url == "" assert data.text == "" assert data.result == "" assert data.is_fake_news == False assert data.provider == "" assert data.confidence is None assert data._extractor is None def test_set_url(): data = TextData() url = "https://www.example.com" data.set_url(url) assert data.url == url assert data.text == "" assert data._extractor is None def test_text_from_url_with_url(): data = TextData() url = "https://www.example.com" data.set_url(url) # Mock the WebTextExtractor mock_extractor = MagicMock() mock_extractor.get_text.return_value = "Example text" # Patch the WebTextExtractor import in the TextData module with patch('models.data.WebTextExtractor', return_value=mock_extractor): result = data.text_from_url() assert result is True assert data.text == "Example text" mock_extractor.fetch_content.assert_called_once() mock_extractor.extract_text.assert_called_once() mock_extractor.get_text.assert_called_once() def test_text_from_url_without_url(): data = TextData() assert data.text_from_url() is False def test_get_output(): data = TextData() data.result = "Fake" data.confidence = 0.95 output = data.get_output() assert output == "Prediction: Fake Confidence: 0.9500" def test_get_provider(): data = TextData() url = "https://www.example.com" data.set_url(url) assert data.get_provider() == "example.com" def test_extract_provider(): data = TextData() url = "https://www.example.com" data.set_url(url) data.extract_provider() assert data.provider == "example.com" def test_extract_provider_with_invalid_url(): data = TextData() url = "invalid_url" data.set_url(url) data.extract_provider() assert data.provider == "Unknown" def test__is_valid_url_with_valid_url(): data = TextData() url = "https://www.example.com" assert data._is_valid_url(url) is True def test__is_valid_url_with_invalid_url(): data = TextData() url = "invalid_url" assert data._is_valid_url(url) is False if __name__ == "__main__": pytest.main([__file__])