Enhance test fixtures and user registration logic to ensure plan existence and correct role assignment
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user