Enhance test fixtures and user registration logic to ensure plan existence and correct role assignment

This commit is contained in:
JSC
2025-07-25 18:43:29 +02:00
parent 45ba28af52
commit 52ebc59293
5 changed files with 247 additions and 238 deletions

View File

@@ -106,12 +106,25 @@ class TestUserRepository:
async def test_create_user(
self,
user_repository: UserRepository,
test_plan: Plan,
ensure_plans: tuple[Plan, Plan],
test_session: AsyncSession,
) -> None:
"""Test creating a new user."""
plan_id = test_plan.id
plan_credits = test_plan.credits
free_plan, pro_plan = ensure_plans
plan_id = free_plan.id
plan_credits = free_plan.credits
# Create a first user to ensure subsequent users get free plan
first_user_data = {
"email": "firstuser@example.com",
"name": "First User",
"password_hash": PasswordUtils.hash_password("password123"),
"is_active": True,
}
first_user = await user_repository.create(first_user_data)
assert first_user.role == "admin" # Verify first user is admin
# Now create the test user (should get free plan)
user_data = {
"email": "newuser@example.com",
"name": "New User",
@@ -121,13 +134,14 @@ class TestUserRepository:
}
user = await user_repository.create(user_data)
await test_session.refresh(user, ["plan"])
assert user.id is not None
assert user.email == user_data["email"]
assert user.name == user_data["name"]
assert user.role == user_data["role"]
assert user.role == "user" # Should be user role (not admin)
assert user.is_active == user_data["is_active"]
assert user.plan_id == plan_id
assert user.plan_id == plan_id # Should get free plan
assert user.credits == plan_credits
@pytest.mark.asyncio
@@ -137,11 +151,10 @@ class TestUserRepository:
test_session: AsyncSession,
) -> None:
"""Test creating user when no default plan exists."""
# Remove all plans
# Remove all plans but don't commit to avoid transaction issues
stmt = delete(Plan)
# Use exec for delete statements
await test_session.exec(stmt)
await test_session.commit()
# Don't commit here - let the exception handling work normally
user_data = {
"email": "newuser@example.com",
@@ -178,7 +191,8 @@ class TestUserRepository:
async def test_delete_user(
self,
user_repository: UserRepository,
test_plan: Plan, # noqa: ARG002
ensure_plans: tuple[Plan, Plan], # noqa: ARG002
test_session: AsyncSession,
) -> None:
"""Test deleting a user."""
# Create a user to delete
@@ -190,6 +204,8 @@ class TestUserRepository:
"is_active": True,
}
user = await user_repository.create(user_data)
await test_session.refresh(user, ["plan"])
assert user.id is not None
user_id = user.id
@@ -265,6 +281,7 @@ class TestUserRepository:
}
user = await user_repository.create(user_data)
await test_session.refresh(user, ["plan"])
assert user.id is not None
assert user.email == user_data["email"]
@@ -314,6 +331,7 @@ class TestUserRepository:
"is_active": True,
}
second_user = await user_repository.create(second_user_data)
await test_session.refresh(second_user, ["plan"])
assert second_user.id is not None
assert second_user.email == second_user_data["email"]
@@ -331,6 +349,7 @@ class TestUserRepository:
"is_active": True,
}
third_user = await user_repository.create(third_user_data)
await test_session.refresh(third_user, ["plan"])
assert third_user.role == "user" # Third user should also be regular user
assert third_user.plan_id == free_plan.id # Should get free plan