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:
2025-12-07 18:28:59 +01:00
parent ddc419353e
commit e98a3efe57
3 changed files with 13 additions and 6 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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):