You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
haoliang-net/tests/CncService.Tests/WorkerServiceTests.cs

326 lines
10 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Linq;
using CncModels.Constants;
using CncModels.Dto;
using CncModels.Dto.Worker;
using CncService;
using CncService.Impl;
using Xunit;
namespace CncService.Tests
{
/// <summary>
/// WorkerService 员工管理测试
/// 测试场景CRUD、唯一性校验工号、绑定/解绑机床、参数校验
/// </summary>
[Collection("Database")]
public class WorkerServiceTests : IDisposable
{
private readonly WorkerService _service;
public WorkerServiceTests()
{
TestDb.TruncateAll();
_service = ServiceFactory.CreateWorkerService();
}
public void Dispose()
{
TestDb.TruncateAll();
}
/// <summary>辅助方法:插入测试工人</summary>
private int InsertTestWorker(string code = "W001", string name = "工人1")
{
return _service.Create(new CreateWorkerRequest
{
Code = code,
Name = name
});
}
/// <summary>辅助方法:插入测试机床</summary>
private int InsertTestMachine(string deviceCode = "M001")
{
TestDb.Execute(@"INSERT INTO cnc_collect_address (name, url, brand_id, collect_interval, is_enabled, created_at, updated_at)
VALUES ('测试地址', 'http://test', 1, 30, 1, NOW(), NOW())");
TestDb.Execute(@"INSERT INTO cnc_machine (device_code, name, workshop_id, collect_address_id, ip_address, brand_id, is_enabled, is_online, created_at, updated_at)
VALUES (@code, '测试机床', 1, 1, '0.0.0.0', 1, 1, 0, NOW(), NOW())",
new { code = deviceCode });
return TestDb.QuerySingle<int>("SELECT MAX(id) FROM cnc_machine");
}
// ======== GetList ========
[Fact]
public void GetList__()
{
var result = _service.GetList(new WorkerQuery { Page = 1, PageSize = 20 });
Assert.NotNull(result);
Assert.Equal(0, result.Total);
}
[Fact]
public void GetList__()
{
InsertTestWorker("W001", "工人1");
InsertTestWorker("W002", "工人2");
var result = _service.GetList(new WorkerQuery { Page = 1, PageSize = 20 });
Assert.Equal(2, result.Total);
}
[Fact]
public void GetList_null_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.GetList(null));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
// ======== GetById ========
[Fact]
public void GetById_ID_()
{
var id = InsertTestWorker();
var detail = _service.GetById(id);
Assert.NotNull(detail);
Assert.Equal("W001", detail.Code);
Assert.Equal("工人1", detail.Name);
Assert.True(detail.IsEnabled);
}
[Fact]
public void GetById__()
{
var workerId = InsertTestWorker();
var machineId = InsertTestMachine();
_service.BindMachine(workerId, machineId);
var detail = _service.GetById(workerId);
Assert.Equal(1, detail.MachineCount);
Assert.Contains("测试机床", detail.MachineNames);
}
[Fact]
public void GetById_ID_NotFound()
{
var ex = Assert.Throws<BusinessException>(() => _service.GetById(99999));
Assert.Equal(ErrorCode.NotFound, ex.Code);
}
[Fact]
public void GetById_ID_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.GetById(0));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
// ======== Create ========
[Fact]
public void Create__ID()
{
var id = InsertTestWorker();
Assert.True(id > 0);
}
[Fact]
public void Create_null_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.Create(null));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void Create__BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.Create(new CreateWorkerRequest
{
Code = "",
Name = "工人"
}));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void Create__BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.Create(new CreateWorkerRequest
{
Code = " ",
Name = "工人"
}));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void Create__Conflict()
{
InsertTestWorker("W001");
var ex = Assert.Throws<BusinessException>(() => _service.Create(new CreateWorkerRequest
{
Code = "W001",
Name = "工人2"
}));
Assert.Equal(ErrorCode.Conflict, ex.Code);
}
// ======== Update ========
[Fact]
public void Update__true()
{
var id = InsertTestWorker();
var result = _service.Update(id, new UpdateWorkerRequest { Name = "修改后工人" });
Assert.True(result);
var updated = _service.GetById(id);
Assert.Equal("修改后工人", updated.Name);
}
[Fact]
public void Update_ID_NotFound()
{
var ex = Assert.Throws<BusinessException>(() => _service.Update(99999, new UpdateWorkerRequest { Name = "测试" }));
Assert.Equal(ErrorCode.NotFound, ex.Code);
}
[Fact]
public void Update_null_BadRequest()
{
var id = InsertTestWorker();
var ex = Assert.Throws<BusinessException>(() => _service.Update(id, null));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void Update_ID_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.Update(0, new UpdateWorkerRequest { Name = "测试" }));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
// ======== Delete ========
[Fact]
public void Delete_ID_true()
{
var id = InsertTestWorker();
var result = _service.Delete(id);
Assert.True(result);
}
[Fact]
public void Delete_()
{
var id = InsertTestWorker();
_service.Delete(id);
Assert.Throws<BusinessException>(() => _service.GetById(id));
}
[Fact]
public void Delete_()
{
var workerId = InsertTestWorker();
var machineId = InsertTestMachine();
_service.BindMachine(workerId, machineId);
_service.Delete(workerId);
var count = TestDb.QuerySingle<int>(
"SELECT COUNT(*) FROM cnc_worker_machine WHERE worker_id = @workerId",
new { workerId });
Assert.Equal(0, count);
}
[Fact]
public void Delete_ID_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.Delete(0));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
// ======== ToggleEnabled ========
[Fact]
public void ToggleEnabled_()
{
var id = InsertTestWorker();
var before = _service.GetById(id);
var beforeState = before.IsEnabled;
_service.ToggleEnabled(id);
var after = _service.GetById(id);
Assert.NotEqual(beforeState, after.IsEnabled);
}
[Fact]
public void ToggleEnabled_ID_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.ToggleEnabled(0));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
// ======== BindMachine ========
[Fact]
public void BindMachine__true()
{
var workerId = InsertTestWorker();
var machineId = InsertTestMachine();
var result = _service.BindMachine(workerId, machineId);
Assert.True(result);
}
[Fact]
public void BindMachine__Conflict()
{
var worker1 = InsertTestWorker("W001", "工人1");
var worker2 = InsertTestWorker("W002", "工人2");
var machineId = InsertTestMachine();
_service.BindMachine(worker1, machineId);
var ex = Assert.Throws<BusinessException>(() => _service.BindMachine(worker2, machineId));
Assert.Equal(ErrorCode.Conflict, ex.Code);
}
[Fact]
public void BindMachine__BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.BindMachine(0, 1));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void BindMachine__BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.BindMachine(-1, -1));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
// ======== UnbindMachine ========
[Fact]
public void UnbindMachine__true()
{
var workerId = InsertTestWorker();
var machineId = InsertTestMachine();
_service.BindMachine(workerId, machineId);
var result = _service.UnbindMachine(workerId, machineId);
Assert.True(result);
}
[Fact]
public void UnbindMachine__BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.UnbindMachine(0, 1));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
}
}