marketplace refactoring
This commit is contained in:
@@ -4,7 +4,7 @@ from datetime import datetime
|
||||
|
||||
import pytest
|
||||
|
||||
from app.exceptions.marketplace import (
|
||||
from app.exceptions.marketplace_import_job import (
|
||||
ImportJobNotFoundException,
|
||||
ImportJobNotOwnedException,
|
||||
ImportJobCannotBeCancelledException,
|
||||
@@ -12,9 +12,9 @@ from app.exceptions.marketplace import (
|
||||
)
|
||||
from app.exceptions.shop import ShopNotFoundException, UnauthorizedShopAccessException
|
||||
from app.exceptions.base import ValidationException
|
||||
from app.services.marketplace_service import MarketplaceService
|
||||
from models.schemas.marketplace import MarketplaceImportRequest
|
||||
from models.database.marketplace import MarketplaceImportJob
|
||||
from app.services.marketplace_import_job_service import MarketplaceImportJobService
|
||||
from models.schemas.marketplace_import_job import MarketplaceImportJobRequest
|
||||
from models.database.marketplace_import_job import MarketplaceImportJob
|
||||
from models.database.shop import Shop
|
||||
from models.database.user import User
|
||||
|
||||
@@ -23,7 +23,7 @@ from models.database.user import User
|
||||
@pytest.mark.marketplace
|
||||
class TestMarketplaceService:
|
||||
def setup_method(self):
|
||||
self.service = MarketplaceService()
|
||||
self.service = MarketplaceImportJobService()
|
||||
|
||||
def test_validate_shop_access_success(self, db, test_shop, test_user):
|
||||
"""Test successful shop access validation"""
|
||||
@@ -76,7 +76,7 @@ class TestMarketplaceService:
|
||||
test_shop.owner_id = test_user.id
|
||||
db.commit()
|
||||
|
||||
request = MarketplaceImportRequest(
|
||||
request = MarketplaceImportJobRequest(
|
||||
url="https://example.com/products.csv",
|
||||
marketplace="Amazon",
|
||||
shop_code=test_shop.shop_code,
|
||||
@@ -94,7 +94,7 @@ class TestMarketplaceService:
|
||||
|
||||
def test_create_import_job_invalid_shop(self, db, test_user):
|
||||
"""Test import job creation with invalid shop"""
|
||||
request = MarketplaceImportRequest(
|
||||
request = MarketplaceImportJobRequest(
|
||||
url="https://example.com/products.csv",
|
||||
marketplace="Amazon",
|
||||
shop_code="INVALID_SHOP",
|
||||
@@ -114,7 +114,7 @@ class TestMarketplaceService:
|
||||
test_shop.owner_id = other_user.id
|
||||
db.commit()
|
||||
|
||||
request = MarketplaceImportRequest(
|
||||
request = MarketplaceImportJobRequest(
|
||||
url="https://example.com/products.csv",
|
||||
marketplace="Amazon",
|
||||
shop_code=test_shop.shop_code,
|
||||
@@ -127,24 +127,24 @@ class TestMarketplaceService:
|
||||
exception = exc_info.value
|
||||
assert exception.error_code == "UNAUTHORIZED_SHOP_ACCESS"
|
||||
|
||||
def test_get_import_job_by_id_success(self, db, test_marketplace_job, test_user):
|
||||
def test_get_import_job_by_id_success(self, db, test_marketplace_import_job, test_user):
|
||||
"""Test getting import job by ID for job owner"""
|
||||
result = self.service.get_import_job_by_id(
|
||||
db, test_marketplace_job.id, test_user
|
||||
db, test_marketplace_import_job.id, test_user
|
||||
)
|
||||
|
||||
assert result.id == test_marketplace_job.id
|
||||
assert result.id == test_marketplace_import_job.id
|
||||
assert result.user_id == test_user.id
|
||||
|
||||
def test_get_import_job_by_id_admin_access(
|
||||
self, db, test_marketplace_job, test_admin
|
||||
self, db, test_marketplace_import_job, test_admin
|
||||
):
|
||||
"""Test that admin can access any import job"""
|
||||
result = self.service.get_import_job_by_id(
|
||||
db, test_marketplace_job.id, test_admin
|
||||
db, test_marketplace_import_job.id, test_admin
|
||||
)
|
||||
|
||||
assert result.id == test_marketplace_job.id
|
||||
assert result.id == test_marketplace_import_job.id
|
||||
|
||||
def test_get_import_job_by_id_not_found(self, db, test_user):
|
||||
"""Test getting non-existent import job"""
|
||||
@@ -157,42 +157,42 @@ class TestMarketplaceService:
|
||||
assert "99999" in exception.message
|
||||
|
||||
def test_get_import_job_by_id_access_denied(
|
||||
self, db, test_marketplace_job, other_user
|
||||
self, db, test_marketplace_import_job, other_user
|
||||
):
|
||||
"""Test access denied when user doesn't own the job"""
|
||||
with pytest.raises(ImportJobNotOwnedException) as exc_info:
|
||||
self.service.get_import_job_by_id(db, test_marketplace_job.id, other_user)
|
||||
self.service.get_import_job_by_id(db, test_marketplace_import_job.id, other_user)
|
||||
|
||||
exception = exc_info.value
|
||||
assert exception.error_code == "IMPORT_JOB_NOT_OWNED"
|
||||
assert exception.status_code == 403
|
||||
assert str(test_marketplace_job.id) in exception.message
|
||||
assert str(test_marketplace_import_job.id) in exception.message
|
||||
|
||||
def test_get_import_jobs_user_filter(self, db, test_marketplace_job, test_user):
|
||||
def test_get_import_jobs_user_filter(self, db, test_marketplace_import_job, test_user):
|
||||
"""Test getting import jobs filtered by user"""
|
||||
jobs = self.service.get_import_jobs(db, test_user)
|
||||
|
||||
assert len(jobs) >= 1
|
||||
assert any(job.id == test_marketplace_job.id for job in jobs)
|
||||
assert test_marketplace_job.user_id == test_user.id
|
||||
assert any(job.id == test_marketplace_import_job.id for job in jobs)
|
||||
assert test_marketplace_import_job.user_id == test_user.id
|
||||
|
||||
def test_get_import_jobs_admin_sees_all(self, db, test_marketplace_job, test_admin):
|
||||
def test_get_import_jobs_admin_sees_all(self, db, test_marketplace_import_job, test_admin):
|
||||
"""Test that admin sees all import jobs"""
|
||||
jobs = self.service.get_import_jobs(db, test_admin)
|
||||
|
||||
assert len(jobs) >= 1
|
||||
assert any(job.id == test_marketplace_job.id for job in jobs)
|
||||
assert any(job.id == test_marketplace_import_job.id for job in jobs)
|
||||
|
||||
def test_get_import_jobs_with_marketplace_filter(
|
||||
self, db, test_marketplace_job, test_user
|
||||
self, db, test_marketplace_import_job, test_user
|
||||
):
|
||||
"""Test getting import jobs with marketplace filter"""
|
||||
jobs = self.service.get_import_jobs(
|
||||
db, test_user, marketplace=test_marketplace_job.marketplace
|
||||
db, test_user, marketplace=test_marketplace_import_job.marketplace
|
||||
)
|
||||
|
||||
assert len(jobs) >= 1
|
||||
assert any(job.marketplace == test_marketplace_job.marketplace for job in jobs)
|
||||
assert any(job.marketplace == test_marketplace_import_job.marketplace for job in jobs)
|
||||
|
||||
def test_get_import_jobs_with_pagination(self, db, test_user, test_shop):
|
||||
"""Test getting import jobs with pagination"""
|
||||
@@ -228,11 +228,11 @@ class TestMarketplaceService:
|
||||
assert exception.error_code == "VALIDATION_ERROR"
|
||||
assert "Failed to retrieve import jobs" in exception.message
|
||||
|
||||
def test_update_job_status_success(self, db, test_marketplace_job):
|
||||
def test_update_job_status_success(self, db, test_marketplace_import_job):
|
||||
"""Test updating job status"""
|
||||
result = self.service.update_job_status(
|
||||
db,
|
||||
test_marketplace_job.id,
|
||||
test_marketplace_import_job.id,
|
||||
"completed",
|
||||
imported_count=100,
|
||||
total_processed=100,
|
||||
@@ -260,7 +260,7 @@ class TestMarketplaceService:
|
||||
assert exception.error_code == "VALIDATION_ERROR"
|
||||
assert "Failed to update job status" in exception.message
|
||||
|
||||
def test_get_job_stats_user(self, db, test_marketplace_job, test_user):
|
||||
def test_get_job_stats_user(self, db, test_marketplace_import_job, test_user):
|
||||
"""Test getting job statistics for user"""
|
||||
stats = self.service.get_job_stats(db, test_user)
|
||||
|
||||
@@ -271,7 +271,7 @@ class TestMarketplaceService:
|
||||
assert "failed_jobs" in stats
|
||||
assert isinstance(stats["total_jobs"], int)
|
||||
|
||||
def test_get_job_stats_admin(self, db, test_marketplace_job, test_admin):
|
||||
def test_get_job_stats_admin(self, db, test_marketplace_import_job, test_admin):
|
||||
"""Test getting job statistics for admin"""
|
||||
stats = self.service.get_job_stats(db, test_admin)
|
||||
|
||||
@@ -287,14 +287,14 @@ class TestMarketplaceService:
|
||||
assert exception.error_code == "VALIDATION_ERROR"
|
||||
assert "Failed to retrieve job statistics" in exception.message
|
||||
|
||||
def test_convert_to_response_model(self, test_marketplace_job):
|
||||
def test_convert_to_response_model(self, test_marketplace_import_job):
|
||||
"""Test converting database model to response model"""
|
||||
response = self.service.convert_to_response_model(test_marketplace_job)
|
||||
response = self.service.convert_to_response_model(test_marketplace_import_job)
|
||||
|
||||
assert response.job_id == test_marketplace_job.id
|
||||
assert response.status == test_marketplace_job.status
|
||||
assert response.marketplace == test_marketplace_job.marketplace
|
||||
assert response.imported == (test_marketplace_job.imported_count or 0)
|
||||
assert response.job_id == test_marketplace_import_job.id
|
||||
assert response.status == test_marketplace_import_job.status
|
||||
assert response.marketplace == test_marketplace_import_job.marketplace
|
||||
assert response.imported == (test_marketplace_import_job.imported_count or 0)
|
||||
|
||||
def test_cancel_import_job_success(self, db, test_user, test_shop):
|
||||
"""Test cancelling a pending import job"""
|
||||
@@ -330,24 +330,24 @@ class TestMarketplaceService:
|
||||
exception = exc_info.value
|
||||
assert exception.error_code == "IMPORT_JOB_NOT_FOUND"
|
||||
|
||||
def test_cancel_import_job_access_denied(self, db, test_marketplace_job, other_user):
|
||||
def test_cancel_import_job_access_denied(self, db, test_marketplace_import_job, other_user):
|
||||
"""Test cancelling import job without access"""
|
||||
with pytest.raises(ImportJobNotOwnedException) as exc_info:
|
||||
self.service.cancel_import_job(db, test_marketplace_job.id, other_user)
|
||||
self.service.cancel_import_job(db, test_marketplace_import_job.id, other_user)
|
||||
|
||||
exception = exc_info.value
|
||||
assert exception.error_code == "IMPORT_JOB_NOT_OWNED"
|
||||
|
||||
def test_cancel_import_job_invalid_status(
|
||||
self, db, test_marketplace_job, test_user
|
||||
self, db, test_marketplace_import_job, test_user
|
||||
):
|
||||
"""Test cancelling a job that can't be cancelled"""
|
||||
# Set job status to completed
|
||||
test_marketplace_job.status = "completed"
|
||||
test_marketplace_import_job.status = "completed"
|
||||
db.commit()
|
||||
|
||||
with pytest.raises(ImportJobCannotBeCancelledException) as exc_info:
|
||||
self.service.cancel_import_job(db, test_marketplace_job.id, test_user)
|
||||
self.service.cancel_import_job(db, test_marketplace_import_job.id, test_user)
|
||||
|
||||
exception = exc_info.value
|
||||
assert exception.error_code == "IMPORT_JOB_CANNOT_BE_CANCELLED"
|
||||
@@ -396,10 +396,10 @@ class TestMarketplaceService:
|
||||
exception = exc_info.value
|
||||
assert exception.error_code == "IMPORT_JOB_NOT_FOUND"
|
||||
|
||||
def test_delete_import_job_access_denied(self, db, test_marketplace_job, other_user):
|
||||
def test_delete_import_job_access_denied(self, db, test_marketplace_import_job, other_user):
|
||||
"""Test deleting import job without access"""
|
||||
with pytest.raises(ImportJobNotOwnedException) as exc_info:
|
||||
self.service.delete_import_job(db, test_marketplace_job.id, other_user)
|
||||
self.service.delete_import_job(db, test_marketplace_import_job.id, other_user)
|
||||
|
||||
exception = exc_info.value
|
||||
assert exception.error_code == "IMPORT_JOB_NOT_OWNED"
|
||||
@@ -449,7 +449,7 @@ class TestMarketplaceService:
|
||||
|
||||
def test_create_import_job_database_error(self, db_with_error, test_user):
|
||||
"""Test import job creation handles database errors"""
|
||||
request = MarketplaceImportRequest(
|
||||
request = MarketplaceImportJobRequest(
|
||||
url="https://example.com/products.csv",
|
||||
marketplace="Amazon",
|
||||
shop_code="TEST_SHOP",
|
||||
|
||||
Reference in New Issue
Block a user