Spaces:
Runtime error
Runtime error
| """Unit tests for services.""" | |
| import pytest | |
| from unittest.mock import Mock, patch, MagicMock | |
| from datetime import datetime | |
| class TestLineService: | |
| """Test LINE service.""" | |
| def test_get_or_create_line_user(self, db_session): | |
| """Test creating a new LINE user.""" | |
| from app.services.line_service import LineUserService | |
| service = LineUserService() | |
| user = service.get_or_create_line_user(db_session, "U1234567890") | |
| assert user.line_user_id == "U1234567890" | |
| assert user.id is not None | |
| def test_get_existing_line_user(self, db_session): | |
| """Test getting existing LINE user.""" | |
| from app.services.line_service import LineUserService | |
| from app.models.line_user import LINEUser | |
| # Create user first | |
| line_user = LINEUser(line_user_id="U1234567890") | |
| db_session.add(line_user) | |
| db_session.commit() | |
| service = LineUserService() | |
| user = service.get_or_create_line_user(db_session, "U1234567890") | |
| assert user.line_user_id == "U1234567890" | |
| def test_update_line_user(self, db_session): | |
| """Test updating LINE user.""" | |
| from app.services.line_service import LineUserService | |
| from app.models.line_user import LINEUser | |
| line_user = LINEUser(line_user_id="U1234567890", display_name="Test") | |
| db_session.add(line_user) | |
| db_session.commit() | |
| service = LineUserService() | |
| updated = service.update_line_user( | |
| db_session, "U1234567890", {"display_name": "Updated"} | |
| ) | |
| assert updated.display_name == "Updated" | |
| class TestDashboardService: | |
| """Test dashboard service.""" | |
| def test_create_user(self, db_session): | |
| """Test creating a user.""" | |
| from app.services.dashboard_service import UserService | |
| service = UserService() | |
| user = service.create_user(db_session, { | |
| "email": "test@example.com", | |
| "hashed_password": "hashed", | |
| "full_name": "Test User" | |
| }) | |
| assert user.email == "test@example.com" | |
| assert user.full_name == "Test User" | |
| def test_get_user(self, db_session): | |
| """Test getting a user.""" | |
| from app.services.dashboard_service import UserService | |
| from app.models.user import User | |
| user = User(email="test@example.com", hashed_password="hashed") | |
| db_session.add(user) | |
| db_session.commit() | |
| service = UserService() | |
| found = service.get_user(db_session, user.id) | |
| assert found.email == "test@example.com" | |
| def test_delete_user(self, db_session): | |
| """Test deleting a user.""" | |
| from app.services.dashboard_service import UserService | |
| from app.models.user import User | |
| user = User(email="test@example.com", hashed_password="hashed") | |
| db_session.add(user) | |
| db_session.commit() | |
| user_id = user.id | |
| service = UserService() | |
| result = service.delete_user(db_session, user_id) | |
| assert result is True | |
| assert service.get_user(db_session, user_id) is None | |
| class TestScrapingService: | |
| """Test scraping service.""" | |
| def test_create_job(self, db_session): | |
| """Test creating a scraping job.""" | |
| from app.services.scraping_service import ScrapingJobService | |
| service = ScrapingJobService() | |
| job = service.create_job(db_session, { | |
| "url": "https://example.com", | |
| "website_type": "generic" | |
| }, user_id=1) | |
| assert job.url == "https://example.com" | |
| assert job.status == "pending" | |
| def test_get_job(self, db_session): | |
| """Test getting a scraping job.""" | |
| from app.services.scraping_service import ScrapingJobService | |
| from app.models.scraping_job import ScrapingJob | |
| job = ScrapingJob(url="https://example.com", status="pending") | |
| db_session.add(job) | |
| db_session.commit() | |
| service = ScrapingJobService() | |
| found = service.get_job(db_session, job.id) | |
| assert found.url == "https://example.com" | |
| def test_cancel_job(self, db_session): | |
| """Test canceling a job.""" | |
| from app.services.scraping_service import ScrapingJobService | |
| from app.models.scraping_job import ScrapingJob | |
| job = ScrapingJob(url="https://example.com", status="pending") | |
| db_session.add(job) | |
| db_session.commit() | |
| service = ScrapingJobService() | |
| result = service.cancel_job(db_session, job.id) | |
| assert result is True | |
| class TestAIService: | |
| """Test AI service.""" | |
| async def test_create_conversation(self): | |
| """Test creating a conversation.""" | |
| from app.services.ai_service import ConversationManagementService | |
| service = ConversationManagementService() | |
| conversation = await service.create_conversation("user123", "Test Chat") | |
| assert conversation["user_id"] == "user123" | |
| assert conversation["title"] == "Test Chat" | |
| assert conversation["is_active"] is True | |
| async def test_get_conversation(self): | |
| """Test getting a conversation.""" | |
| from app.services.ai_service import ConversationManagementService | |
| service = ConversationManagementService() | |
| conv = await service.create_conversation("user123") | |
| retrieved = await service.get_conversation(conv["id"]) | |
| assert retrieved["id"] == conv["id"] | |
| async def test_chat(self): | |
| """Test chat processing.""" | |
| from app.services.ai_service import ChatProcessingService | |
| service = ChatProcessingService() | |
| # Note: This will fail without mock, but tests structure | |
| with patch.object(service, 'openai_client'): | |
| # Mock response | |
| pass |