75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
|
# test_integration_username.py
|
|||
|
|
|||
|
import pytest
|
|||
|
import sys
|
|||
|
import os
|
|||
|
|
|||
|
# 获取文件所在目录的上两级目录(EnglishPal)
|
|||
|
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
|
|||
|
sys.path.append(project_root)
|
|||
|
|
|||
|
from app.Login import add_user, check_username_availability
|
|||
|
|
|||
|
|
|||
|
# 模拟数据库行为
|
|||
|
class MockUserDB:
|
|||
|
def __init__(self):
|
|||
|
self.users = {}
|
|||
|
|
|||
|
def insert_user(self, username, password, start_date, expiry_date):
|
|||
|
if username in self.users:
|
|||
|
return False
|
|||
|
self.users[username] = {
|
|||
|
'password': password,
|
|||
|
'start_date': start_date,
|
|||
|
'expiry_date': expiry_date
|
|||
|
}
|
|||
|
return True
|
|||
|
|
|||
|
def get_user_by_username(self, username):
|
|||
|
return self.users.get(username)
|
|||
|
|
|||
|
|
|||
|
original_insert_user = None
|
|||
|
original_get_user_by_username = None
|
|||
|
|
|||
|
|
|||
|
@pytest.fixture(autouse=True)
|
|||
|
def setup_and_teardown():
|
|||
|
global original_insert_user, original_get_user_by_username
|
|||
|
|
|||
|
from app.Login import insert_user as original_iu, get_user_by_username as original_gubu
|
|||
|
original_insert_user = original_iu
|
|||
|
original_get_user_by_username = original_gubu
|
|||
|
|
|||
|
mock_db = MockUserDB()
|
|||
|
|
|||
|
def mock_insert_user(**kwargs):
|
|||
|
return mock_db.insert_user(**kwargs)
|
|||
|
|
|||
|
def mock_get_user_by_username(username):
|
|||
|
return mock_db.get_user_by_username(username)
|
|||
|
|
|||
|
from app.Login import insert_user, get_user_by_username
|
|||
|
insert_user = mock_insert_user
|
|||
|
get_user_by_username = mock_get_user_by_username
|
|||
|
|
|||
|
yield
|
|||
|
|
|||
|
from app.Login import insert_user, get_user_by_username
|
|||
|
insert_user = original_insert_user
|
|||
|
get_user_by_username = original_get_user_by_username
|
|||
|
|
|||
|
|
|||
|
def test_add_user_with_empty_username_fails():
|
|||
|
with pytest.raises(ValueError) as exc_info:
|
|||
|
add_user('', 'Password123')
|
|||
|
assert "Attribute User.name is required" in str(exc_info.value)
|
|||
|
|
|||
|
|
|||
|
def test_add_user_with_valid_username_succeeds():
|
|||
|
result = add_user('validuser', 'Password123')
|
|||
|
assert result is None # 如果 add_user 不返回值,则断言无异常即可
|
|||
|
assert check_username_availability('validuser') is False # 用户已存在
|
|||
|
|