using System.Collections.Generic; using System.Linq; using CncModels.Dto; using CncModels.Dto.Common; using CncWebApi.Controllers; using Xunit; namespace CncWebApi.Tests { /// /// OptionController单元测试 /// 公共下拉选项接口(车间/品牌/机床/工人/采集地址) /// [Collection("Database")] public class OptionControllerTests { private readonly OptionController _controller; public OptionControllerTests() { TestDb.TruncateAll(); _controller = ControllerFactory.CreateOptionController(); } #region WorkshopList - 车间下拉 /// /// 测试:车间下拉返回种子数据 /// [Fact] public void WorkshopList_ShouldReturnSeedData() { var result = _controller.WorkshopList(); var response = ControllerFactory.Extract>(result); ControllerFactory.AssertSuccess(response); Assert.Equal(2, response.Data.Count); // A栋、B栋 } #endregion #region BrandList - 品牌下拉 /// /// 测试:品牌下拉返回种子数据 /// [Fact] public void BrandList_ShouldReturnSeedData() { var result = _controller.BrandList(); var response = ControllerFactory.Extract>(result); ControllerFactory.AssertSuccess(response); Assert.Single(response.Data); // FANUC Assert.Equal("FANUC", response.Data[0].Label); } #endregion #region MachineList - 机床下拉 /// /// 测试:空数据库返回空列表 /// [Fact] public void MachineList_EmptyDb_ShouldReturnEmpty() { var result = _controller.MachineList(); var response = ControllerFactory.Extract>(result); ControllerFactory.AssertSuccess(response); Assert.Empty(response.Data); } /// /// 测试:有机床时返回选项 /// [Fact] public void MachineList_WithData_ShouldReturnOptions() { TestDb.Execute(@"INSERT INTO cnc_collect_address (name, url, brand_id, collect_interval, is_enabled, created_at, updated_at) VALUES ('测试地址', 'http://192.168.1.1', 1, 5, 1, NOW(), NOW())"); TestDb.Execute(@"INSERT INTO cnc_machine (device_code, name, workshop_id, collect_address_id, ip_address, brand_id, is_enabled, created_at, updated_at) VALUES ('CNC001', '机床1', 1, 1, '192.168.1.100', 1, 1, NOW(), NOW())"); // 重新创建Controller以获取最新数据 var controller = ControllerFactory.CreateOptionController(); var result = controller.MachineList(); var response = ControllerFactory.Extract>(result); Assert.Single(response.Data); } #endregion #region WorkerList - 工人下拉 /// /// 测试:空数据库返回空列表 /// [Fact] public void WorkerList_EmptyDb_ShouldReturnEmpty() { var result = _controller.WorkerList(); var response = ControllerFactory.Extract>(result); ControllerFactory.AssertSuccess(response); Assert.Empty(response.Data); } /// /// 测试:有工人时返回选项(格式:姓名(工号)) /// [Fact] public void WorkerList_WithData_ShouldReturnFormattedOptions() { TestDb.Execute(@"INSERT INTO cnc_worker (name, code, is_enabled, created_at, updated_at) VALUES ('张三', 'W001', 1, NOW(), NOW())"); var controller = ControllerFactory.CreateOptionController(); var result = controller.WorkerList(); var response = ControllerFactory.Extract>(result); Assert.Single(response.Data); Assert.Equal("张三(W001)", response.Data[0].Label); } #endregion #region CollectAddressList - 采集地址下拉 /// /// 测试:空数据库返回空列表 /// [Fact] public void CollectAddressList_EmptyDb_ShouldReturnEmpty() { var result = _controller.CollectAddressList(); var response = ControllerFactory.Extract>(result); ControllerFactory.AssertSuccess(response); Assert.Empty(response.Data); } /// /// 测试:有地址时返回选项 /// [Fact] public void CollectAddressList_WithData_ShouldReturnOptions() { TestDb.Execute(@"INSERT INTO cnc_collect_address (name, url, brand_id, collect_interval, is_enabled, created_at, updated_at) VALUES ('测试地址', 'http://192.168.1.1', 1, 5, 1, NOW(), NOW())"); var controller = ControllerFactory.CreateOptionController(); var result = controller.CollectAddressList(); var response = ControllerFactory.Extract>(result); Assert.Single(response.Data); Assert.Equal("测试地址", response.Data[0].Label); } #endregion } }