From 089f3e502afaa6856c7fe8d297cc26358c9a1bcd Mon Sep 17 00:00:00 2001 From: haoliang <821644@qq.com> Date: Wed, 6 May 2026 16:36:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20BrandFieldMappingRepositor?= =?UTF-8?q?yTests=20=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B;=20=E6=89=A9?= =?UTF-8?q?=E5=B1=95=20BrandServiceTests/BrandControllerTests=20=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=A6=86=E7=9B=96=20IsEnabled=20=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BrandFieldMappingRepositoryTests.cs | 117 ++++++++++++++++++ tests/CncService.Tests/BrandServiceTests.cs | 45 +++++++ tests/CncWebApi.Tests/BrandControllerTests.cs | 43 +++++++ 3 files changed, 205 insertions(+) create mode 100644 tests/CncRepository.Tests/BrandFieldMappingRepositoryTests.cs diff --git a/tests/CncRepository.Tests/BrandFieldMappingRepositoryTests.cs b/tests/CncRepository.Tests/BrandFieldMappingRepositoryTests.cs new file mode 100644 index 0000000..6b8d82d --- /dev/null +++ b/tests/CncRepository.Tests/BrandFieldMappingRepositoryTests.cs @@ -0,0 +1,117 @@ +using System; +using System.Linq; +using CncModels.Entity; +using CncRepository.Impl; +using Xunit; + +namespace CncRepository.Tests +{ + /// + /// 品牌字段映射仓储测试 + /// + [Collection("Database")] + public class BrandFieldMappingRepositoryTests : IDisposable + { + private readonly BrandFieldMappingRepository _repo; + + public BrandFieldMappingRepositoryTests() + { + _repo = new BrandFieldMappingRepository(TestDb.ConnectionString); + TestDb.TruncateAll(); + } + + public void Dispose() + { + TestDb.TruncateAll(); + } + + [Fact] + public void GetByBrandId_返回所有映射含禁用() + { + // 插入2条启用 + 1条禁用 + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'program_name', 'Tag5', 'id', 'string', 1, 1, NOW()), + (1, 'part_count', 'Tag8', 'id', 'number', 1, 1, NOW()), + (1, 'spindle_load', 'Tag21', 'id', 'number', 0, 0, NOW())"); + var result = _repo.GetByBrandId(1); + Assert.Equal(3, result.Count); + } + + [Fact] + public void GetEnabledByBrandId_只返回启用的映射() + { + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'program_name', 'Tag5', 'id', 'string', 1, 1, NOW()), + (1, 'part_count', 'Tag8', 'id', 'number', 1, 1, NOW()), + (1, 'spindle_load', 'Tag21', 'id', 'number', 0, 0, NOW())"); + var result = _repo.GetEnabledByBrandId(1); + Assert.Equal(2, result.Count); + Assert.All(result, m => Assert.Equal(1, m.IsEnabled)); + } + + [Fact] + public void Create_默认启用() + { + var entity = new BrandFieldMapping + { + BrandId = 1, + StandardField = "program_name", + FieldName = "Tag5", + MatchBy = "id", + DataType = "string", + IsRequired = 1, + IsEnabled = 1, + CreatedAt = DateTime.Now + }; + var id = _repo.Create(entity); + Assert.True(id > 0); + var loaded = _repo.GetById(id); + Assert.Equal(1, loaded.IsEnabled); + } + + [Fact] + public void Update_修改启用状态() + { + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'program_name', 'Tag5', 'id', 'string', 1, 1, NOW())"); + var id = TestDb.QuerySingle("SELECT MAX(id) FROM cnc_brand_field_mapping"); + var entity = _repo.GetById(id); + entity.IsEnabled = 0; + var result = _repo.Update(entity); + Assert.True(result); + Assert.Equal(0, _repo.GetById(id).IsEnabled); + } + + [Fact] + public void BatchCreate_批量插入保留启用状态() + { + var mappings = new[] + { + new BrandFieldMapping { StandardField = "f1", FieldName = "Tag1", MatchBy = "id", DataType = "string", IsRequired = 0, IsEnabled = 1, CreatedAt = DateTime.Now }, + new BrandFieldMapping { StandardField = "f2", FieldName = "Tag2", MatchBy = "id", DataType = "number", IsRequired = 0, IsEnabled = 1, CreatedAt = DateTime.Now }, + new BrandFieldMapping { StandardField = "f3", FieldName = "Tag3", MatchBy = "id", DataType = "string", IsRequired = 0, IsEnabled = 0, CreatedAt = DateTime.Now }, + }.ToList(); + var count = _repo.BatchCreate(1, mappings); + Assert.Equal(3, count); + var all = _repo.GetByBrandId(1); + Assert.Equal(3, all.Count); + var enabled = _repo.GetEnabledByBrandId(1); + Assert.Equal(2, enabled.Count); + } + + [Fact] + public void Update_修改字段名和启用状态同时生效() + { + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'program_name', 'Tag5', 'id', 'string', 1, 1, NOW())"); + var id = TestDb.QuerySingle("SELECT MAX(id) FROM cnc_brand_field_mapping"); + var entity = _repo.GetById(id); + entity.FieldName = "Tag5_New"; + entity.IsEnabled = 0; + _repo.Update(entity); + var loaded = _repo.GetById(id); + Assert.Equal("Tag5_New", loaded.FieldName); + Assert.Equal(0, loaded.IsEnabled); + } + } +} diff --git a/tests/CncService.Tests/BrandServiceTests.cs b/tests/CncService.Tests/BrandServiceTests.cs index fe64c32..7383e47 100644 --- a/tests/CncService.Tests/BrandServiceTests.cs +++ b/tests/CncService.Tests/BrandServiceTests.cs @@ -248,6 +248,51 @@ namespace CncService.Tests Assert.Equal(ErrorCode.NotFound, ex.Code); } + // ======== FieldMapping IsEnabled ======== + [Fact] + public void GetById_映射包含IsEnabled字段() + { + // 插入字段映射(含 is_enabled=0 的) + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'program_name', 'Tag5', 'id', 'string', 1, 1, NOW()), + (1, 'spindle_load', 'Tag21', 'id', 'number', 0, 0, NOW())"); + var detail = _service.GetById(1); + Assert.NotNull(detail.Mappings); + Assert.Equal(2, detail.Mappings.Count); + var disabled = detail.Mappings.FirstOrDefault(m => m.StandardField == "spindle_load"); + Assert.NotNull(disabled); + Assert.Equal(0, disabled.IsEnabled); + } + + [Fact] + public void Copy_复制品牌保留映射启用状态() + { + // 插入字段映射(1启用1禁用) + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'program_name', 'Tag5', 'id', 'string', 1, 1, NOW()), + (1, 'spindle_load', 'Tag21', 'id', 'number', 0, 0, NOW())"); + var newId = _service.Copy(1); + var copied = _service.GetById(newId); + Assert.Equal(2, copied.Mappings.Count); + var enabledMapping = copied.Mappings.First(m => m.StandardField == "program_name"); + var disabledMapping = copied.Mappings.First(m => m.StandardField == "spindle_load"); + Assert.Equal(1, enabledMapping.IsEnabled); + Assert.Equal(0, disabledMapping.IsEnabled); + } + + [Fact] + public void GetById_映射列表区分启用禁用() + { + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'f1', 'Tag1', 'id', 'string', 0, 0, NOW()), + (1, 'f2', 'Tag2', 'id', 'string', 0, 1, NOW()), + (1, 'f3', 'Tag3', 'id', 'string', 0, 1, NOW())"); + var detail = _service.GetById(1); + Assert.Equal(3, detail.Mappings.Count); + Assert.Equal(1, detail.Mappings.Count(m => m.IsEnabled == 0)); + Assert.Equal(2, detail.Mappings.Count(m => m.IsEnabled == 1)); + } + // ======== GetStandardFields ======== [Fact] diff --git a/tests/CncWebApi.Tests/BrandControllerTests.cs b/tests/CncWebApi.Tests/BrandControllerTests.cs index 97fd4eb..709cc24 100644 --- a/tests/CncWebApi.Tests/BrandControllerTests.cs +++ b/tests/CncWebApi.Tests/BrandControllerTests.cs @@ -281,6 +281,49 @@ namespace CncWebApi.Tests #endregion + // region FieldMapping IsEnabled - 字段映射启用开关 + #region FieldMapping IsEnabled - 字段映射启用开关 + + /// + /// 测试:获取品牌详情时映射响应包含IsEnabled + /// + [Fact] + public void GetById_映射响应包含IsEnabled() + { + // 插入字段映射 + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'program_name', 'Tag5', 'id', 'string', 1, 1, NOW()), + (1, 'spindle_load', 'Tag21', 'id', 'number', 0, 0, NOW())"); + var result = _controller.GetById(1); + var response = ControllerFactory.Extract(result); + ControllerFactory.AssertSuccess(response); + Assert.Equal(2, response.Data.Mappings.Count); + var disabled = response.Data.Mappings.First(m => m.StandardField == "spindle_load"); + Assert.Equal(0, disabled.IsEnabled); + } + + /// + /// 测试:复制品牌后映射启用状态一致 + /// + [Fact] + public void Copy_复制后映射启用状态一致() + { + TestDb.Execute(@"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, is_enabled, created_at) + VALUES (1, 'program_name', 'Tag5', 'id', 'string', 1, 1, NOW()), + (1, 'spindle_load', 'Tag21', 'id', 'number', 0, 0, NOW())"); + var copyResult = _controller.Copy(1); + var copyResponse = ControllerFactory.Extract(copyResult); + ControllerFactory.AssertSuccess(copyResponse); + int newId = TestDb.QuerySingle("SELECT MAX(id) FROM cnc_brand WHERE id <> 1"); + var detail = ControllerFactory.Extract(_controller.GetById(newId)); + Assert.Equal(2, detail.Data.Mappings.Count); + var enabledMapping = detail.Data.Mappings.First(m => m.StandardField == "program_name"); + var disabledMapping = detail.Data.Mappings.First(m => m.StandardField == "spindle_load"); + Assert.Equal(1, enabledMapping.IsEnabled); + Assert.Equal(0, disabledMapping.IsEnabled); + } + + #endregion #region GetStandardFields - 标准字段列表 ///