Remove db.expunge() calls that were causing DetachedInstanceError when accessing lazy-loaded relationships in tests. Changes: - conftest.py: Add documentation about fixture best practices - auth_fixtures: Remove expunge, keep objects attached to session - customer_fixtures: Remove expunge, add proper relationship loading - vendor_fixtures: Remove expunge, add test_company and other_company fixtures for proper company-vendor relationship setup - marketplace_import_job_fixtures: Remove expunge calls - marketplace_product_fixtures: Remove expunge calls The db fixture already provides test isolation by dropping/recreating tables after each test, so expunge is unnecessary and harmful. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
71 lines
1.8 KiB
Python
71 lines
1.8 KiB
Python
# tests/fixtures/customer_fixtures.py
|
|
"""
|
|
Customer-related test fixtures.
|
|
|
|
Note: Fixtures should NOT use db.expunge() as it breaks lazy loading.
|
|
See tests/conftest.py for details on fixture best practices.
|
|
"""
|
|
import pytest
|
|
|
|
from models.database.customer import Customer, CustomerAddress
|
|
from models.database.order import Order
|
|
|
|
|
|
@pytest.fixture
|
|
def test_customer(db, test_vendor):
|
|
"""Create a test customer."""
|
|
customer = Customer(
|
|
vendor_id=test_vendor.id,
|
|
email="testcustomer@example.com",
|
|
hashed_password="hashed_password",
|
|
first_name="John",
|
|
last_name="Doe",
|
|
customer_number="TEST001",
|
|
is_active=True,
|
|
)
|
|
db.add(customer)
|
|
db.commit()
|
|
db.refresh(customer)
|
|
return customer
|
|
|
|
|
|
@pytest.fixture
|
|
def test_customer_address(db, test_vendor, test_customer):
|
|
"""Create a test customer address."""
|
|
address = CustomerAddress(
|
|
vendor_id=test_vendor.id,
|
|
customer_id=test_customer.id,
|
|
address_type="shipping",
|
|
first_name="John",
|
|
last_name="Doe",
|
|
address_line_1="123 Main St",
|
|
city="Luxembourg",
|
|
postal_code="L-1234",
|
|
country="Luxembourg",
|
|
is_default=True,
|
|
)
|
|
db.add(address)
|
|
db.commit()
|
|
db.refresh(address)
|
|
return address
|
|
|
|
|
|
@pytest.fixture
|
|
def test_order(db, test_vendor, test_customer, test_customer_address):
|
|
"""Create a test order."""
|
|
order = Order(
|
|
vendor_id=test_vendor.id,
|
|
customer_id=test_customer.id,
|
|
order_number="TEST-ORD-001",
|
|
status="pending",
|
|
subtotal=99.99,
|
|
total_amount=99.99,
|
|
currency="EUR",
|
|
shipping_address_id=test_customer_address.id,
|
|
billing_address_id=test_customer_address.id,
|
|
)
|
|
db.add(order)
|
|
db.commit()
|
|
db.refresh(order)
|
|
return order
|