Refactoring code for modular approach
This commit is contained in:
@@ -12,6 +12,7 @@ from app.core.database import get_db, Base
|
||||
# Import all models to ensure they're registered with Base metadata
|
||||
from models.database_models import User, Product, Stock, Shop, MarketplaceImportJob, ShopProduct
|
||||
from middleware.auth import AuthManager
|
||||
import uuid
|
||||
|
||||
# Use in-memory SQLite database for tests
|
||||
SQLALCHEMY_TEST_DATABASE_URL = "sqlite:///:memory:"
|
||||
@@ -81,11 +82,12 @@ def auth_manager():
|
||||
|
||||
@pytest.fixture
|
||||
def test_user(db, auth_manager):
|
||||
"""Create a test user"""
|
||||
"""Create a test user with unique username"""
|
||||
unique_id = str(uuid.uuid4())[:8] # Short unique identifier
|
||||
hashed_password = auth_manager.hash_password("testpass123")
|
||||
user = User(
|
||||
email="test@example.com",
|
||||
username="testuser",
|
||||
email=f"test_{unique_id}@example.com",
|
||||
username=f"testuser_{unique_id}",
|
||||
hashed_password=hashed_password,
|
||||
role="user",
|
||||
is_active=True
|
||||
@@ -98,11 +100,12 @@ def test_user(db, auth_manager):
|
||||
|
||||
@pytest.fixture
|
||||
def test_admin(db, auth_manager):
|
||||
"""Create a test admin user"""
|
||||
"""Create a test admin user with unique username"""
|
||||
unique_id = str(uuid.uuid4())[:8] # Short unique identifier
|
||||
hashed_password = auth_manager.hash_password("adminpass123")
|
||||
admin = User(
|
||||
email="admin@example.com",
|
||||
username="admin",
|
||||
email=f"admin_{unique_id}@example.com",
|
||||
username=f"admin_{unique_id}",
|
||||
hashed_password=hashed_password,
|
||||
role="admin",
|
||||
is_active=True
|
||||
@@ -117,7 +120,7 @@ def test_admin(db, auth_manager):
|
||||
def auth_headers(client, test_user):
|
||||
"""Get authentication headers for test user"""
|
||||
response = client.post("/api/v1/auth/login", json={
|
||||
"username": "testuser",
|
||||
"username": test_user.username,
|
||||
"password": "testpass123"
|
||||
})
|
||||
assert response.status_code == 200, f"Login failed: {response.text}"
|
||||
@@ -129,7 +132,7 @@ def auth_headers(client, test_user):
|
||||
def admin_headers(client, test_admin):
|
||||
"""Get authentication headers for admin user"""
|
||||
response = client.post("/api/v1/auth/login", json={
|
||||
"username": "admin",
|
||||
"username": test_admin.username,
|
||||
"password": "adminpass123"
|
||||
})
|
||||
assert response.status_code == 200, f"Admin login failed: {response.text}"
|
||||
@@ -160,10 +163,11 @@ def test_product(db):
|
||||
|
||||
@pytest.fixture
|
||||
def test_shop(db, test_user):
|
||||
"""Create a test shop"""
|
||||
"""Create a test shop with unique shop code"""
|
||||
unique_id = str(uuid.uuid4())[:8] # Short unique identifier
|
||||
shop = Shop(
|
||||
shop_code="TESTSHOP",
|
||||
shop_name="Test Shop",
|
||||
shop_code=f"TESTSHOP_{unique_id}",
|
||||
shop_name=f"Test Shop {unique_id}",
|
||||
owner_id=test_user.id,
|
||||
is_active=True,
|
||||
is_verified=True
|
||||
@@ -190,6 +194,50 @@ def test_stock(db, test_product, test_shop):
|
||||
return stock
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def test_marketplace_job(db, test_shop): # Add test_shop dependency
|
||||
"""Create a test marketplace import job"""
|
||||
job = MarketplaceImportJob(
|
||||
marketplace="amazon",
|
||||
shop_name="Test Import Shop",
|
||||
status="completed",
|
||||
source_url="https://test-marketplace.example.com/import",
|
||||
shop_id=test_shop.id, # Add required shop_id
|
||||
imported_count=5,
|
||||
updated_count=3,
|
||||
total_processed=8,
|
||||
error_count=0,
|
||||
error_message=None
|
||||
)
|
||||
db.add(job)
|
||||
db.commit()
|
||||
db.refresh(job)
|
||||
return job
|
||||
|
||||
|
||||
def create_test_import_job(db, shop_id, **kwargs): # Add shop_id parameter
|
||||
"""Helper function to create MarketplaceImportJob with defaults"""
|
||||
defaults = {
|
||||
'marketplace': 'test',
|
||||
'shop_name': 'Test Shop',
|
||||
'status': 'pending',
|
||||
'source_url': 'https://test.example.com/import',
|
||||
'shop_id': shop_id, # Add required shop_id
|
||||
'imported_count': 0,
|
||||
'updated_count': 0,
|
||||
'total_processed': 0,
|
||||
'error_count': 0,
|
||||
'error_message': None
|
||||
}
|
||||
defaults.update(kwargs)
|
||||
|
||||
job = MarketplaceImportJob(**defaults)
|
||||
db.add(job)
|
||||
db.commit()
|
||||
db.refresh(job)
|
||||
return job
|
||||
|
||||
|
||||
# Cleanup fixture to ensure clean state
|
||||
@pytest.fixture(autouse=True)
|
||||
def cleanup():
|
||||
|
||||
Reference in New Issue
Block a user