# import pytest
# from unittest.mock import AsyncMock, MagicMock, patch
# from src.apps.auth.services import auth_service
# from src.apps.auth.schemas.auth_schemas import RegisterRequest, LoginRequest
# from src.core.exceptions import APIException

# @pytest.mark.asyncio
# async def test_register_user_password_mismatch():
#     db = MagicMock()
#     user_data = RegisterRequest(
#         email="test@example.com",
#         username="testuser",
#         first_name="Test",
#         last_name="User",
#         password="password1",
#         confirm_password="password2"
#     )
#     with pytest.raises(APIException) as exc:
#         await auth_service.register_user(db, user_data)
#     assert exc.value.status_code == 400

# @pytest.mark.asyncio
# @patch("src.apps.users.services.user_service.create_user", new_callable=AsyncMock)
# async def test_register_user_success(mock_create_user):
#     db = MagicMock()
#     user_data = RegisterRequest(
#         email="test@example.com",
#         username="testuser",
#         first_name="Test",
#         last_name="User",
#         password="password",
#         confirm_password="password"
#     )
#     mock_create_user.return_value = "user_response"
#     result = await auth_service.register_user(db, user_data)
#     assert result == "user_response"

# @pytest.mark.asyncio
# @patch("src.apps.users.services.user_service.get_user_by_username", new_callable=AsyncMock)
# @patch("src.apps.users.services.user_service.get_user_by_email", new_callable=AsyncMock)
# @patch("src.utils.guard.verify_password", return_value=True)
# @patch("src.utils.jwt.create_access_token", return_value="access")
# @patch("src.utils.jwt.create_refresh_token", return_value="refresh")
# async def test_login_user_success(mock_create_refresh, mock_create_access, mock_verify, mock_get_email, mock_get_username):
#     db = MagicMock()
#     login_data = LoginRequest(username="testuser", password="password")
#     user = MagicMock()
#     user.id = 1
#     user.password = "hashed"
#     mock_get_username.return_value = user
#     result = await auth_service.login_user(db, login_data)
#     assert result == {"access_token": "access", "refresh_token": "refresh"}

# @pytest.mark.asyncio
# @patch("src.apps.users.services.user_service.get_user_by_username", new_callable=AsyncMock)
# @patch("src.apps.users.services.user_service.get_user_by_email", new_callable=AsyncMock)
# @patch("src.utils.guard.verify_password", return_value=False)
# async def test_login_user_invalid_credentials(mock_verify, mock_get_email, mock_get_username):
#     db = MagicMock()
#     login_data = LoginRequest(username="testuser", password="wrong")
#     mock_get_username.return_value = None
#     mock_get_email.return_value = None
#     with pytest.raises(APIException) as exc:
#         await auth_service.login_user(db, login_data)
#     assert exc.value.status_code == 401

# @pytest.mark.asyncio
# @patch("src.apps.users.services.user_service.get_user_by_email", new_callable=AsyncMock)
# async def test_forgot_password_email_not_found(mock_get_user_by_email):
#     db = MagicMock()
#     mock_get_user_by_email.return_value = None
#     with pytest.raises(APIException) as exc:
#         await auth_service.forgot_password(db, "notfound@example.com")
#     assert exc.value.status_code == 404

# @pytest.mark.asyncio
# @patch("src.apps.users.services.user_service.get_user_by_email", new_callable=AsyncMock)
# async def test_forgot_password_success(mock_get_user_by_email):
#     db = MagicMock()
#     user = MagicMock()
#     mock_get_user_by_email.return_value = user
#     result = await auth_service.forgot_password(db, "test@example.com")
#     assert result == {"detail": "Password reset email sent."}
