using System.Collections.Generic;
using CncModels.Constants;
using CncModels.Dto;
using CncModels.Dto.CollectAddress;
using CncModels.Dto.Machine;
using CncService;
using CncWebApi.Controllers;
using Xunit;
namespace CncWebApi.Tests
{
///
/// MachineController单元测试
/// 机床CRUD + 启停
///
[Collection("Database")]
public class MachineControllerTests
{
private readonly MachineController _controller;
public MachineControllerTests()
{
TestDb.TruncateAll();
// 预置一个采集地址(机床外键依赖)
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())");
_controller = ControllerFactory.CreateMachineController();
}
///
/// 辅助:创建机床请求
///
private CreateMachineRequest CreateRequest(string code = "CNC001", string name = "机床1") => new CreateMachineRequest
{
DeviceCode = code,
Name = name,
WorkshopId = 1,
CollectAddressId = 1,
IpAddress = "192.168.1.100",
BrandId = 1
};
#region GetList - 机床列表
///
/// 测试:空数据库返回空列表
///
[Fact]
public void GetList_EmptyDb_ShouldReturnEmpty()
{
var result = _controller.GetList(new MachineQuery());
var response = ControllerFactory.Extract>(result);
ControllerFactory.AssertSuccess(response);
Assert.Empty(response.Data.Items);
}
///
/// 测试:新增机床后列表有数据
///
[Fact]
public void GetList_AfterCreate_ShouldReturnOne()
{
_controller.Create(CreateRequest());
var result = _controller.GetList(new MachineQuery());
var response = ControllerFactory.Extract>(result);
Assert.Single(response.Data.Items);
}
///
/// 测试:分页参数生效
///
[Fact]
public void GetList_Pagination_ShouldWork()
{
// 新增3台机床
for (int i = 1; i <= 3; i++)
_controller.Create(CreateRequest($"C{i:00}", $"机床{i}"));
var result = _controller.GetList(new MachineQuery { Page = 1, PageSize = 2 });
var response = ControllerFactory.Extract>(result);
Assert.Equal(2, response.Data.Items.Count);
Assert.Equal(3, response.Data.Total);
}
#endregion
#region GetById - 机床详情
///
/// 测试:获取机床详情成功
///
[Fact]
public void GetById_Existing_ShouldReturnDetail()
{
_controller.Create(CreateRequest());
int id = TestDb.QuerySingle("SELECT MAX(id) FROM cnc_machine");
var result = _controller.GetById(id);
var response = ControllerFactory.Extract(result);
ControllerFactory.AssertSuccess(response);
Assert.Equal("CNC001", response.Data.DeviceCode);
}
///
/// 测试:获取不存在的机床抛出异常
///
[Fact]
public void GetById_NotExisting_ShouldThrow()
{
Assert.Throws(() => _controller.GetById(999));
}
#endregion
#region Create - 新增机床
///
/// 测试:新增机床成功
///
[Fact]
public void Create_ValidRequest_ShouldReturnId()
{
var result = _controller.Create(CreateRequest());
var response = ControllerFactory.Extract