package user import ( "testing" "perms-system-server/internal/consts" "perms-system-server/internal/svc" "perms-system-server/internal/testutil" "perms-system-server/internal/testutil/ctxhelper" "perms-system-server/internal/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // --------------------------------------------------------------------------- // 覆盖目标:审计 L-1 修复 —— 管理员代填初始密码创建的用户必须把 MustChangePassword 默认为 Yes。 // 修复前默认 No,使得"管理员口头下发 + 长期不改 + 口令库泄露即广义失陷"成为系统性弱点。 // 本用例锚定:"req 未显式传入 mustChangePassword 时,落盘必须是 Yes"。 // 因为 CreateUserReq 并不暴露 MustChangePassword 字段(没有 override 入口),该契约既是安全下限也是产品基线。 // --------------------------------------------------------------------------- // TC-0818: L-1 —— 超管创建用户时,MustChangePassword 默认落盘为 Yes。 func TestCreateUser_DefaultsMustChangePasswordToYes(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() username := "lcp_" + testutil.UniqueId() resp, err := NewCreateUserLogic(ctx, svcCtx).CreateUser(&types.CreateUserReq{ Username: username, Password: "InitPass@123", Nickname: "初始口令校验", }) require.NoError(t, err) require.NotNil(t, resp) t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", resp.Id) }) u, err := svcCtx.SysUserModel.FindOne(ctx, resp.Id) require.NoError(t, err) assert.Equal(t, int64(consts.MustChangePasswordYes), u.MustChangePassword, "L-1 基线:管理员代填初始密码的用户必须被强制下次登录改密,落盘为 Yes") }