fix: correct failing unit tests for product and import job services
- test_create_import_job_database_error: Monkeypatch db.flush instead of db.commit since service uses flush() per architecture rules - test_create_product_already_exists: Store product_id before exception and rollback session to clear PendingRollbackError state - test_delete_product_success: Add db.flush() to delete_product service method to ensure deletion is applied before verification 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -306,6 +306,7 @@ class MarketplaceProductService:
|
|||||||
db.query(Inventory).filter(Inventory.gtin == product.gtin).delete()
|
db.query(Inventory).filter(Inventory.gtin == product.gtin).delete()
|
||||||
|
|
||||||
db.delete(product)
|
db.delete(product)
|
||||||
|
db.flush()
|
||||||
|
|
||||||
logger.info(f"Deleted product {marketplace_product_id}")
|
logger.info(f"Deleted product {marketplace_product_id}")
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -59,10 +59,10 @@ class TestMarketplaceImportJobService:
|
|||||||
marketplace="Amazon",
|
marketplace="Amazon",
|
||||||
)
|
)
|
||||||
|
|
||||||
def mock_commit():
|
def mock_flush():
|
||||||
raise Exception("Database commit failed")
|
raise Exception("Database flush failed")
|
||||||
|
|
||||||
monkeypatch.setattr(db, "commit", mock_commit)
|
monkeypatch.setattr(db, "flush", mock_flush)
|
||||||
|
|
||||||
with pytest.raises(ValidationException) as exc_info:
|
with pytest.raises(ValidationException) as exc_info:
|
||||||
self.service.create_import_job(db, request, test_vendor, test_user)
|
self.service.create_import_job(db, request, test_vendor, test_user)
|
||||||
|
|||||||
@@ -87,8 +87,11 @@ class TestProductService:
|
|||||||
|
|
||||||
def test_create_product_already_exists(self, db, test_marketplace_product):
|
def test_create_product_already_exists(self, db, test_marketplace_product):
|
||||||
"""Test creating product with existing ID raises MarketplaceProductAlreadyExistsException"""
|
"""Test creating product with existing ID raises MarketplaceProductAlreadyExistsException"""
|
||||||
|
# Store the product ID before the exception (session may be invalid after)
|
||||||
|
existing_product_id = test_marketplace_product.marketplace_product_id
|
||||||
|
|
||||||
product_data = MarketplaceProductCreate(
|
product_data = MarketplaceProductCreate(
|
||||||
marketplace_product_id=test_marketplace_product.marketplace_product_id, # Use existing product ID
|
marketplace_product_id=existing_product_id, # Use existing product ID
|
||||||
title="Duplicate MarketplaceProduct",
|
title="Duplicate MarketplaceProduct",
|
||||||
price="29.99",
|
price="29.99",
|
||||||
)
|
)
|
||||||
@@ -96,12 +99,15 @@ class TestProductService:
|
|||||||
with pytest.raises(MarketplaceProductAlreadyExistsException) as exc_info:
|
with pytest.raises(MarketplaceProductAlreadyExistsException) as exc_info:
|
||||||
self.service.create_product(db, product_data)
|
self.service.create_product(db, product_data)
|
||||||
|
|
||||||
|
# Rollback to clear the session's invalid state from IntegrityError
|
||||||
|
db.rollback()
|
||||||
|
|
||||||
assert exc_info.value.error_code == "PRODUCT_ALREADY_EXISTS"
|
assert exc_info.value.error_code == "PRODUCT_ALREADY_EXISTS"
|
||||||
assert test_marketplace_product.marketplace_product_id in str(exc_info.value)
|
assert existing_product_id in str(exc_info.value)
|
||||||
assert exc_info.value.status_code == 409
|
assert exc_info.value.status_code == 409
|
||||||
assert (
|
assert (
|
||||||
exc_info.value.details.get("marketplace_product_id")
|
exc_info.value.details.get("marketplace_product_id")
|
||||||
== test_marketplace_product.marketplace_product_id
|
== existing_product_id
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_create_product_invalid_price(self, db):
|
def test_create_product_invalid_price(self, db):
|
||||||
|
|||||||
Reference in New Issue
Block a user