using System;
using System.Collections.Generic;
using CncModels.Dto;
using CncModels.Dto.Worker;
using CncService;
using CncWebApi.Controllers;
using Xunit;
namespace CncWebApi.Tests
{
///
/// WorkerController单元测试
/// 员工CRUD + 启停 + 绑定/解绑机床
///
[Collection("Database")]
public class WorkerControllerTests
{
private readonly WorkerController _controller;
public WorkerControllerTests()
{
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())");
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 = ControllerFactory.CreateWorkerController();
}
///
/// 辅助:创建工人请求
///
private CreateWorkerRequest CreateRequest(string name = "张三", string code = "W001") => new CreateWorkerRequest
{
Name = name,
Code = code
};
#region GetList - 工人列表
[Fact]
public void GetList_EmptyDb_ShouldReturnEmpty()
{
var result = _controller.GetList(new WorkerQuery());
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 WorkerQuery());
var response = ControllerFactory.Extract>(result);
Assert.Single(response.Data.Items);
}
#endregion
#region GetById - 工人详情
[Fact]
public void GetById_Existing_ShouldReturnDetail()
{
_controller.Create(CreateRequest());
int id = TestDb.QuerySingle("SELECT MAX(id) FROM cnc_worker");
var result = _controller.GetById(id);
var response = ControllerFactory.Extract(result);
ControllerFactory.AssertSuccess(response);
Assert.Equal("张三", response.Data.Name);
Assert.Equal("W001", response.Data.Code);
}
[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