AdoS0QualityDtosValidationTests.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System.ComponentModel.DataAnnotations;
  2. using Admin.NET.Plugin.AiDOP.Dto.S0.Quality;
  3. using Xunit;
  4. namespace Admin.NET.Plugin.AiDOP.Tests.S0.Quality;
  5. public class AdoS0QualityDtosValidationTests
  6. {
  7. private static IReadOnlyList<ValidationResult> Validate(object model)
  8. {
  9. var context = new ValidationContext(model);
  10. var results = new List<ValidationResult>();
  11. Validator.TryValidateObject(model, context, results, validateAllProperties: true);
  12. return results;
  13. }
  14. [Fact]
  15. public void RawWhitelist_WhenSupplierFieldsMissing_ReturnsRequiredErrors()
  16. {
  17. var dto = new AdoS0QmsRawWhitelistUpsertDto
  18. {
  19. SupplierCode = "",
  20. SupplierName = ""
  21. };
  22. var results = Validate(dto);
  23. Assert.Contains(results, r => r.ErrorMessage == "供应商编码不能为空");
  24. Assert.Contains(results, r => r.ErrorMessage == "供应商名称不能为空");
  25. }
  26. [Theory]
  27. [InlineData(typeof(AdoS0QmsSamplingSchemeUpsertDto))]
  28. [InlineData(typeof(AdoS0QmsInspectionInstrumentUpsertDto))]
  29. [InlineData(typeof(AdoS0QmsInspectionMethodUpsertDto))]
  30. [InlineData(typeof(AdoS0QmsInspectionItemUpsertDto))]
  31. [InlineData(typeof(AdoS0QmsInspectionFrequencyUpsertDto))]
  32. [InlineData(typeof(AdoS0QmsInspectionBasisUpsertDto))]
  33. [InlineData(typeof(AdoS0QmsInspectionStandardUpsertDto))]
  34. [InlineData(typeof(AdoS0QmsInspectionPlanUpsertDto))]
  35. public void NumberNameDtos_WhenDefaultsUsed_ReturnRequiredErrors(Type dtoType)
  36. {
  37. var dto = Activator.CreateInstance(dtoType)!;
  38. var results = Validate(dto);
  39. Assert.Contains(results, r => r.ErrorMessage == "编号不能为空");
  40. Assert.Contains(results, r => r.ErrorMessage == "名称不能为空");
  41. }
  42. /// <summary>
  43. /// 四张检规表的 UpsertDto 上不得残留任何 [Required]。
  44. /// Create 与 Update 共用同一 DTO,任何 [Required] 都会在模型绑定阶段先于
  45. /// AdoS0QmsSpecAggregateGuard 触发、把 Update 挡成 400,从而破坏「历史兼容」——
  46. /// 实测 qms_gcjygf 有 3 行 wjbh 为空,正是被遗留的 FileNumber[Required] 锁死。
  47. /// 必填一律由守卫按新增/编辑分别判定,见 AdoS0QmsSpecAggregateGuardTests。
  48. /// </summary>
  49. [Theory]
  50. [InlineData(typeof(AdoS0QmsRawInspectionSpecUpsertDto))]
  51. [InlineData(typeof(AdoS0QmsProcessInspectionSpecUpsertDto))]
  52. [InlineData(typeof(AdoS0QmsFqcInspectionSpecUpsertDto))]
  53. [InlineData(typeof(AdoS0QmsOqcInspectionSpecUpsertDto))]
  54. public void SpecUpsertDtos_CarryNoRequiredAttribute_SoUpdateReachesTheGuard(Type dtoType)
  55. {
  56. var dto = Activator.CreateInstance(dtoType)!;
  57. var results = Validate(dto);
  58. Assert.Empty(results);
  59. }
  60. }