# tests/test_background_tasks.py import pytest from unittest.mock import patch, AsyncMock from app.tasks.background_tasks import process_marketplace_import from models.database_models import MarketplaceImportJob class TestBackgroundTasks: @pytest.mark.asyncio async def test_marketplace_import_success(self, db): """Test successful marketplace import background task""" # Create import job job = MarketplaceImportJob( status="pending", source_url="http://example.com/test.csv", marketplace="TestMarket", shop_code="TESTSHOP", user_id=1 ) db.add(job) db.commit() db.refresh(job) # Mock CSV processor with patch('app.tasks.background_tasks.CSVProcessor') as mock_processor: mock_instance = mock_processor.return_value mock_instance.process_marketplace_csv_from_url = AsyncMock(return_value={ "imported": 10, "updated": 5, "total_processed": 15, "errors": 0 }) # Run background task await process_marketplace_import( job.id, "http://example.com/test.csv", "TestMarket", "TESTSHOP", 1000 ) # Verify job was updated db.refresh(job) assert job.status == "completed" assert job.imported_count == 10 assert job.updated_count == 5 @pytest.mark.asyncio async def test_marketplace_import_failure(self, db): """Test marketplace import failure handling""" # Create import job job = MarketplaceImportJob( status="pending", source_url="http://example.com/test.csv", marketplace="TestMarket", shop_code="TESTSHOP", user_id=1 ) db.add(job) db.commit() db.refresh(job) # Mock CSV processor to raise exception with patch('app.tasks.background_tasks.CSVProcessor') as mock_processor: mock_instance = mock_processor.return_value mock_instance.process_marketplace_csv_from_url = AsyncMock( side_effect=Exception("Import failed") ) # Run background task await process_marketplace_import( job.id, "http://example.com/test.csv", "TestMarket", "TESTSHOP", 1000 ) # Verify job failure was recorded db.refresh(job) assert job.status == "failed" assert "Import failed" in job.error_message