style: normalize python formatting gates
This commit is contained in:
@@ -1,20 +1,23 @@
|
||||
"""
|
||||
用户注册 Use Case 测试
|
||||
"""
|
||||
import pytest
|
||||
|
||||
from unittest.mock import Mock
|
||||
|
||||
import pytest
|
||||
|
||||
from packages.application.auth import (
|
||||
RegisterUserUseCase,
|
||||
RegisterUserRequest,
|
||||
VerifyEmailUseCase,
|
||||
RegisterUserUseCase,
|
||||
VerifyEmailRequest,
|
||||
VerifyEmailUseCase,
|
||||
)
|
||||
from packages.domain.entities import User
|
||||
|
||||
|
||||
class TestRegisterUserUseCase:
|
||||
"""注册用例测试"""
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_user_repo(self):
|
||||
"""Mock 用户仓储"""
|
||||
@@ -24,7 +27,7 @@ class TestRegisterUserUseCase:
|
||||
repo.find_by_verification_token = Mock(return_value=None)
|
||||
repo.save = Mock()
|
||||
return repo
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def use_case(self, mock_user_repo):
|
||||
"""创建注册用例"""
|
||||
@@ -35,26 +38,26 @@ class TestRegisterUserUseCase:
|
||||
base_url="https://test.com",
|
||||
email_service=email_service,
|
||||
)
|
||||
|
||||
|
||||
def test_register_user_success(self, use_case, mock_user_repo):
|
||||
"""测试注册成功"""
|
||||
|
||||
|
||||
request = RegisterUserRequest(
|
||||
email="test@example.com",
|
||||
password="SecurePass123",
|
||||
username="testuser",
|
||||
display_name="Test User",
|
||||
)
|
||||
|
||||
|
||||
response, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert error is None
|
||||
assert response is not None
|
||||
assert response.email == "test@example.com"
|
||||
assert response.username == "testuser"
|
||||
assert response.display_name == "Test User"
|
||||
assert response.email_verification_sent is True
|
||||
|
||||
|
||||
# 验证保存了用户
|
||||
mock_user_repo.save.assert_called_once()
|
||||
saved_user = mock_user_repo.save.call_args[0][0]
|
||||
@@ -62,7 +65,7 @@ class TestRegisterUserUseCase:
|
||||
assert saved_user.password_hash != ""
|
||||
assert saved_user.email_verified is False
|
||||
assert saved_user.email_verification_token is not None
|
||||
|
||||
|
||||
def test_register_user_weak_password(self, use_case):
|
||||
"""测试弱密码"""
|
||||
request = RegisterUserRequest(
|
||||
@@ -71,13 +74,13 @@ class TestRegisterUserUseCase:
|
||||
username="testuser",
|
||||
display_name="Test User",
|
||||
)
|
||||
|
||||
|
||||
response, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert response is None
|
||||
assert error is not None
|
||||
assert "at least 8 characters" in error
|
||||
|
||||
|
||||
def test_register_user_email_exists(self, use_case, mock_user_repo):
|
||||
"""测试邮箱已存在"""
|
||||
# Mock 返回已存在的用户
|
||||
@@ -88,19 +91,19 @@ class TestRegisterUserUseCase:
|
||||
display_name="Existing",
|
||||
)
|
||||
mock_user_repo.find_by_email.return_value = existing_user
|
||||
|
||||
|
||||
request = RegisterUserRequest(
|
||||
email="test@example.com",
|
||||
password="SecurePass123",
|
||||
username="testuser",
|
||||
display_name="Test User",
|
||||
)
|
||||
|
||||
|
||||
response, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert response is None
|
||||
assert error == "Email already registered"
|
||||
|
||||
|
||||
def test_register_user_username_taken(self, use_case, mock_user_repo):
|
||||
"""测试用户名已被占用"""
|
||||
existing_user = User(
|
||||
@@ -110,19 +113,19 @@ class TestRegisterUserUseCase:
|
||||
display_name="Other",
|
||||
)
|
||||
mock_user_repo.find_by_username.return_value = existing_user
|
||||
|
||||
|
||||
request = RegisterUserRequest(
|
||||
email="test@example.com",
|
||||
password="SecurePass123",
|
||||
username="testuser",
|
||||
display_name="Test User",
|
||||
)
|
||||
|
||||
|
||||
response, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert response is None
|
||||
assert error == "Username already taken"
|
||||
|
||||
|
||||
def test_register_user_missing_email(self, use_case):
|
||||
"""测试缺少邮箱"""
|
||||
request = RegisterUserRequest(
|
||||
@@ -131,25 +134,28 @@ class TestRegisterUserUseCase:
|
||||
username="testuser",
|
||||
display_name="Test User",
|
||||
)
|
||||
|
||||
|
||||
response, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert response is None
|
||||
assert error == "Email is required"
|
||||
|
||||
|
||||
def test_register_user_email_send_failure(self, use_case, mock_user_repo):
|
||||
"""测试邮件发送失败(用户仍然创建)"""
|
||||
use_case.email_service.send_verification_email.return_value = (False, "SMTP error")
|
||||
|
||||
use_case.email_service.send_verification_email.return_value = (
|
||||
False,
|
||||
"SMTP error",
|
||||
)
|
||||
|
||||
request = RegisterUserRequest(
|
||||
email="test@example.com",
|
||||
password="SecurePass123",
|
||||
username="testuser",
|
||||
display_name="Test User",
|
||||
)
|
||||
|
||||
|
||||
response, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert error is None # 用户创建成功
|
||||
assert response is not None
|
||||
assert response.email_verification_sent is False # 但邮件发送失败
|
||||
@@ -157,18 +163,18 @@ class TestRegisterUserUseCase:
|
||||
|
||||
class TestVerifyEmailUseCase:
|
||||
"""邮箱验证用例测试"""
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_user_repo(self):
|
||||
repo = Mock()
|
||||
repo.find_by_verification_token = Mock(return_value=None)
|
||||
repo.save = Mock()
|
||||
return repo
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def use_case(self, mock_user_repo):
|
||||
return VerifyEmailUseCase(user_repository=mock_user_repo)
|
||||
|
||||
|
||||
def test_verify_email_success(self, use_case, mock_user_repo):
|
||||
"""测试验证成功"""
|
||||
user = User(
|
||||
@@ -180,28 +186,28 @@ class TestVerifyEmailUseCase:
|
||||
email_verification_token="valid-token",
|
||||
)
|
||||
mock_user_repo.find_by_verification_token.return_value = user
|
||||
|
||||
|
||||
request = VerifyEmailRequest(token="valid-token")
|
||||
success, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert success is True
|
||||
assert error is None
|
||||
|
||||
|
||||
# 验证用户状态已更新
|
||||
assert user.email_verified is True
|
||||
assert user.email_verification_token is None
|
||||
mock_user_repo.save.assert_called_once()
|
||||
|
||||
|
||||
def test_verify_email_invalid_token(self, use_case, mock_user_repo):
|
||||
"""测试无效令牌"""
|
||||
mock_user_repo.find_by_verification_token.return_value = None
|
||||
|
||||
|
||||
request = VerifyEmailRequest(token="invalid-token")
|
||||
success, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert success is False
|
||||
assert error == "Invalid or expired verification token"
|
||||
|
||||
|
||||
def test_verify_email_already_verified(self, use_case, mock_user_repo):
|
||||
"""测试已验证的邮箱"""
|
||||
user = User(
|
||||
@@ -213,9 +219,9 @@ class TestVerifyEmailUseCase:
|
||||
email_verification_token="old-token",
|
||||
)
|
||||
mock_user_repo.find_by_verification_token.return_value = user
|
||||
|
||||
|
||||
request = VerifyEmailRequest(token="old-token")
|
||||
success, error = use_case.execute(request)
|
||||
|
||||
|
||||
assert success is True # 已验证也返回成功
|
||||
assert error is None
|
||||
|
||||
Reference in New Issue
Block a user