Files
disknext/tests/fixtures/groups.py
于小丘 f93cb3eedb Add unit tests for models and services
- Implemented unit tests for Object model including folder and file creation, properties, and path retrieval.
- Added unit tests for Setting model covering creation, unique constraints, and type enumeration.
- Created unit tests for User model focusing on user creation, uniqueness, and group relationships.
- Developed unit tests for Login service to validate login functionality, including 2FA and token generation.
- Added utility tests for JWT creation and verification, ensuring token integrity and expiration handling.
- Implemented password utility tests for password generation, hashing, and TOTP verification.
2025-12-19 19:48:05 +08:00

203 lines
5.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
用户组测试数据工厂
提供创建测试用户组的便捷方法。
"""
from sqlmodel.ext.asyncio.session import AsyncSession
from models.group import Group, GroupOptions
class GroupFactory:
"""用户组工厂类,用于创建各种类型的测试用户组"""
@staticmethod
async def create(
session: AsyncSession,
name: str | None = None,
**kwargs
) -> Group:
"""
创建用户组
参数:
session: 数据库会话
name: 用户组名称(默认: test_group_{随机}
**kwargs: 其他用户组字段
返回:
Group: 创建的用户组实例
"""
import uuid
if name is None:
name = f"test_group_{uuid.uuid4().hex[:8]}"
group = Group(
name=name,
max_storage=kwargs.get("max_storage", 1024 * 1024 * 1024 * 10), # 默认 10GB
share_enabled=kwargs.get("share_enabled", True),
web_dav_enabled=kwargs.get("web_dav_enabled", True),
admin=kwargs.get("admin", False),
speed_limit=kwargs.get("speed_limit", 0),
)
group = await group.save(session)
# 如果提供了选项参数,创建 GroupOptions
if kwargs.get("create_options", False):
options = GroupOptions(
group_id=group.id,
share_download=kwargs.get("share_download", True),
share_free=kwargs.get("share_free", False),
relocate=kwargs.get("relocate", True),
source_batch=kwargs.get("source_batch", 10),
select_node=kwargs.get("select_node", False),
advance_delete=kwargs.get("advance_delete", False),
)
await options.save(session)
return group
@staticmethod
async def create_admin_group(
session: AsyncSession,
name: str | None = None
) -> Group:
"""
创建管理员组
参数:
session: 数据库会话
name: 用户组名称(默认: admin_group_{随机}
返回:
Group: 创建的管理员组实例
"""
import uuid
if name is None:
name = f"admin_group_{uuid.uuid4().hex[:8]}"
admin_group = Group(
name=name,
max_storage=0, # 无限制
share_enabled=True,
web_dav_enabled=True,
admin=True,
speed_limit=0,
)
admin_group = await admin_group.save(session)
# 创建管理员组选项
admin_options = GroupOptions(
group_id=admin_group.id,
share_download=True,
share_free=True,
relocate=True,
source_batch=100,
select_node=True,
advance_delete=True,
archive_download=True,
archive_task=True,
webdav_proxy=True,
aria2=True,
redirected_source=True,
)
await admin_options.save(session)
return admin_group
@staticmethod
async def create_limited_group(
session: AsyncSession,
max_storage: int,
name: str | None = None
) -> Group:
"""
创建有存储限制的用户组
参数:
session: 数据库会话
max_storage: 最大存储空间(字节)
name: 用户组名称(默认: limited_group_{随机}
返回:
Group: 创建的用户组实例
"""
import uuid
if name is None:
name = f"limited_group_{uuid.uuid4().hex[:8]}"
limited_group = Group(
name=name,
max_storage=max_storage,
share_enabled=True,
web_dav_enabled=False,
admin=False,
speed_limit=1024, # 1MB/s
)
limited_group = await limited_group.save(session)
# 创建限制组选项
limited_options = GroupOptions(
group_id=limited_group.id,
share_download=False,
share_free=False,
relocate=False,
source_batch=0,
select_node=False,
advance_delete=False,
)
await limited_options.save(session)
return limited_group
@staticmethod
async def create_free_group(
session: AsyncSession,
name: str | None = None
) -> Group:
"""
创建免费用户组(无特殊权限)
参数:
session: 数据库会话
name: 用户组名称(默认: free_group_{随机}
返回:
Group: 创建的用户组实例
"""
import uuid
if name is None:
name = f"free_group_{uuid.uuid4().hex[:8]}"
free_group = Group(
name=name,
max_storage=1024 * 1024 * 1024, # 1GB
share_enabled=False,
web_dav_enabled=False,
admin=False,
speed_limit=512, # 512KB/s
)
free_group = await free_group.save(session)
# 创建免费组选项
free_options = GroupOptions(
group_id=free_group.id,
share_download=False,
share_free=False,
relocate=False,
source_batch=0,
select_node=False,
advance_delete=False,
)
await free_options.save(session)
return free_group