using FluentAssertions; using SSO.Application.Roles.Commands; using SSO.Application.Roles.Validators; using Xunit; namespace BuildFlow.SSO.Tests; /// /// SSO 角色命令校验器测试:纯函数,无 DB 依赖。 /// 覆盖名称长度、空值、权限列表非空等约束。 /// public class RoleCommandValidatorsTests { // ===== CreateRoleCommandValidator ===== [Theory] [InlineData("管理员")] // 3 字 [InlineData("AB")] // 恰好 2 字符(下界) [InlineData("一二三四五六七八九十一二三四五六七八九十") // 20 字符 ] public void CreateRole_合法名称_校验通过(string name) { var validator = new CreateRoleCommandValidator(); var result = validator.Validate(new CreateRoleCommand(name, null)); result.IsValid.Should().BeTrue(); } [Theory] [InlineData("")] // 空 [InlineData("A")] // 太短 <2 [InlineData("这是一个超过五十个字符长度的角色名称这是一个超过五十个字符长度的角色名称这是一个超过五十个字符长度的角色名称X")] // 太长 >50 public void CreateRole_非法名称_校验失败(string name) { var validator = new CreateRoleCommandValidator(); var result = validator.Validate(new CreateRoleCommand(name, null)); result.IsValid.Should().BeFalse(); } // ===== AssignPermissionsCommandValidator ===== [Fact] public void AssignPermissions_空权限列表_校验失败() { var validator = new AssignPermissionsCommandValidator(); var result = validator.Validate( new AssignPermissionsCommand(Guid.NewGuid(), new())); result.IsValid.Should().BeFalse(); } [Fact] public void AssignPermissions_空RoleId_校验失败() { var validator = new AssignPermissionsCommandValidator(); var result = validator.Validate( new AssignPermissionsCommand(Guid.Empty, new() { Guid.NewGuid() })); result.IsValid.Should().BeFalse(); } [Fact] public void AssignPermissions_合法输入_校验通过() { var validator = new AssignPermissionsCommandValidator(); var result = validator.Validate( new AssignPermissionsCommand(Guid.NewGuid(), new() { Guid.NewGuid() })); result.IsValid.Should().BeTrue(); } // ===== DeleteRoleCommandValidator ===== [Fact] public void DeleteRole_空Id_校验失败() { var validator = new DeleteRoleCommandValidator(); var result = validator.Validate(new DeleteRoleCommand(Guid.Empty)); result.IsValid.Should().BeFalse(); } }