Replaces ambiguous shorthand references like `event` and `user` with more descriptive names such as `event_crud` and `user_crud`. Updates imports, function calls, tests, and other references across the codebase to maintain consistency. This improves code readability and reduces potential confusion.
126 lines
4.3 KiB
Python
126 lines
4.3 KiB
Python
import pytest
|
|
|
|
from app.crud.user import user_crud as user_crud
|
|
from app.models.user import User
|
|
from app.schemas.users import UserCreate, UserUpdate
|
|
|
|
|
|
def test_create_user(db_session, user_create_data):
|
|
user_in = UserCreate(**user_create_data)
|
|
user_obj = user_crud.create(db_session, obj_in=user_in)
|
|
|
|
assert user_obj.email == user_create_data["email"]
|
|
assert user_obj.first_name == user_create_data["first_name"]
|
|
assert user_obj.last_name == user_create_data["last_name"]
|
|
assert user_obj.phone_number == user_create_data["phone_number"]
|
|
assert user_obj.is_superuser == user_create_data["is_superuser"]
|
|
assert user_obj.password_hash is not None
|
|
assert user_obj.id is not None
|
|
|
|
|
|
def test_get_user(db_session, mock_user):
|
|
# Using mock_user fixture instead of creating new user
|
|
stored_user = user_crud.get(db_session, id=mock_user.id)
|
|
assert stored_user
|
|
assert stored_user.id == mock_user.id
|
|
assert stored_user.email == mock_user.email
|
|
|
|
|
|
def test_get_user_by_email(db_session, mock_user):
|
|
stored_user = user_crud.get_by_email(db_session, email=mock_user.email)
|
|
assert stored_user
|
|
assert stored_user.id == mock_user.id
|
|
assert stored_user.email == mock_user.email
|
|
|
|
|
|
def test_update_user(db_session, mock_user):
|
|
update_data = UserUpdate(
|
|
first_name="Updated",
|
|
last_name="Name",
|
|
phone_number="+9876543210"
|
|
)
|
|
|
|
updated_user = user_crud.update(db_session, db_obj=mock_user, obj_in=update_data)
|
|
|
|
assert updated_user.first_name == "Updated"
|
|
assert updated_user.last_name == "Name"
|
|
assert updated_user.phone_number == "+9876543210"
|
|
assert updated_user.email == mock_user.email
|
|
|
|
|
|
def test_delete_user(db_session, mock_user):
|
|
user_crud.remove(db_session, id=mock_user.id)
|
|
deleted_user = user_crud.get(db_session, id=mock_user.id)
|
|
assert deleted_user is None
|
|
|
|
|
|
def test_get_multi_users(db_session, mock_user, user_create_data):
|
|
# Create additional users (mock_user is already in db)
|
|
users_data = [
|
|
{**user_create_data, "email": f"test{i}@example.com"}
|
|
for i in range(2) # Creating 2 more users + mock_user = 3 total
|
|
]
|
|
|
|
for user_data in users_data:
|
|
user_in = UserCreate(**user_data)
|
|
user_crud.create(db_session, obj_in=user_in)
|
|
|
|
users = user_crud.get_multi(db_session, skip=0, limit=10)
|
|
assert len(users) == 3
|
|
assert all(isinstance(user, User) for user in users)
|
|
|
|
|
|
def test_is_active(db_session, mock_user):
|
|
assert user_crud.is_active(mock_user) is True
|
|
|
|
# Test deactivating user
|
|
update_data = UserUpdate(is_active=False)
|
|
deactivated_user = user_crud.update(db_session, db_obj=mock_user, obj_in=update_data)
|
|
assert user_crud.is_active(deactivated_user) is False
|
|
|
|
|
|
def test_is_superuser(db_session, mock_user, user_create_data):
|
|
# mock_user is regular user
|
|
assert user_crud.is_superuser(mock_user) is False
|
|
|
|
# Create superuser
|
|
super_user_data = {**user_create_data, "email": "super@example.com", "is_superuser": True}
|
|
super_user_in = UserCreate(**super_user_data)
|
|
super_user = user_crud.create(db_session, obj_in=super_user_in)
|
|
assert user_crud.is_superuser(super_user) is True
|
|
|
|
|
|
# Additional test cases
|
|
def test_create_duplicate_email(db_session, mock_user):
|
|
user_data = UserCreate(
|
|
email=mock_user.email, # Try to create user with existing email
|
|
password="TestPassword123!",
|
|
first_name="Test",
|
|
last_name="User"
|
|
)
|
|
with pytest.raises(Exception): # Should raise an integrity error
|
|
user_crud.create(db_session, obj_in=user_data)
|
|
|
|
|
|
def test_update_user_preferences(db_session, mock_user):
|
|
preferences = {"theme": "dark", "notifications": True}
|
|
update_data = UserUpdate(preferences=preferences)
|
|
|
|
updated_user = user_crud.update(db_session, db_obj=mock_user, obj_in=update_data)
|
|
assert updated_user.preferences == preferences
|
|
|
|
|
|
def test_get_multi_users_pagination(db_session, user_create_data):
|
|
# Create 5 users
|
|
for i in range(5):
|
|
user_in = UserCreate(**{**user_create_data, "email": f"test{i}@example.com"})
|
|
user_crud.create(db_session, obj_in=user_in)
|
|
|
|
# Test pagination
|
|
first_page = user_crud.get_multi(db_session, skip=0, limit=2)
|
|
second_page = user_crud.get_multi(db_session, skip=2, limit=2)
|
|
|
|
assert len(first_page) == 2
|
|
assert len(second_page) == 2
|
|
assert first_page[0].id != second_page[0].id
|