84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
# 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
|