import json from datetime import datetime import pytest from pydantic import ValidationError from app.models import AdminDepartment, AdminMenu, AdminRole from app.routers.system import _dept_dict, _menu_dict, _role_dict from app.schemas import AdminMenuCreate def test_role_audit_snapshot_serializes_datetime_fields(): role = AdminRole( id="role-1", name="验收角色", code="acceptance_role", dataScope="self", description=None, isActive=True, createdAt=datetime(2026, 8, 26, 1, 0), updatedAt=datetime(2026, 8, 26, 1, 0), ) json.dumps(_role_dict(role)) def test_menu_and_department_audit_snapshots_serialize_datetime_fields(): menu = AdminMenu( id="menu-1", name="验收菜单", type="page", sortOrder=1, isVisible=True, isActive=True, createdAt=datetime(2026, 8, 26, 1, 0), updatedAt=datetime(2026, 8, 26, 1, 0), ) dept = AdminDepartment( id="dept-1", name="验收部门", sortOrder=1, isActive=True, createdAt=datetime(2026, 8, 26, 1, 0), updatedAt=datetime(2026, 8, 26, 1, 0), ) json.dumps(_menu_dict(menu)) json.dumps(_dept_dict(dept)) def test_menu_create_validates_fields_by_menu_type(): with pytest.raises(ValidationError): AdminMenuCreate(name=" ", type="page", path="/users", componentKey="SystemUsers") with pytest.raises(ValidationError): AdminMenuCreate(name="按钮", type="button") with pytest.raises(ValidationError): AdminMenuCreate(name="页面", type="page", path="/users") button = AdminMenuCreate(name="编辑用户", type="button", permissionCode="system:user:update") assert button.path is None assert button.componentKey is None page = AdminMenuCreate(name="用户管理", type="page", path="/users", componentKey="SystemUsers") assert page.path == "/users"