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