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/WorkshopServiceTests.cs

311 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.Settings;
using CncService;
using CncService.Impl;
using Xunit;
namespace CncService.Tests
{
/// <summary>
/// WorkshopService 车间管理测试
/// 测试场景CRUD、唯一性校验、启停、删除约束、参数校验、边界值
/// </summary>
[Collection("Database")]
public class WorkshopServiceTests : IDisposable
{
private readonly WorkshopService _service;
public WorkshopServiceTests()
{
TestDb.TruncateAll();
_service = ServiceFactory.CreateWorkshopService();
}
public void Dispose()
{
TestDb.TruncateAll();
}
// ======== GetList ========
[Fact]
public void GetList_()
{
var list = _service.GetList(null);
Assert.NotNull(list);
Assert.True(list.Count >= 2, "种子数据至少有2个车间");
Assert.Contains(list, w => w.Name == "A栋");
Assert.Contains(list, w => w.Name == "B栋");
}
[Fact]
public void GetList__()
{
var list = _service.GetList("A");
Assert.NotNull(list);
Assert.All(list, w => Assert.Contains("A", w.Name));
}
[Fact]
public void GetList__()
{
var list = _service.GetList("不存在的车间");
Assert.Empty(list);
}
// ======== GetById ========
[Fact]
public void GetById_ID_()
{
var w = _service.GetById(1);
Assert.NotNull(w);
Assert.Equal("A栋", w.Name);
Assert.Equal(1, w.SortOrder);
Assert.Equal(1, w.IsEnabled);
}
[Fact]
public void GetById_ID_NotFound()
{
var ex = Assert.Throws<BusinessException>(() => _service.GetById(99999));
Assert.Equal(ErrorCode.NotFound, ex.Code);
}
[Fact]
public void GetById_ID0_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.GetById(0));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void GetById_ID_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.GetById(-1));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
// ======== Create ========
[Fact]
public void Create__ID()
{
var id = _service.Create(new CreateWorkshopRequest
{
Name = "C栋",
SortOrder = 3
});
Assert.True(id > 0);
var created = _service.GetById(id);
Assert.Equal("C栋", created.Name);
Assert.Equal(3, created.SortOrder);
Assert.Equal(1, created.IsEnabled); // 默认启用
}
[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 CreateWorkshopRequest
{
Name = "",
SortOrder = 1
}));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void Create__BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.Create(new CreateWorkshopRequest
{
Name = " ",
SortOrder = 1
}));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void Create__Conflict()
{
var ex = Assert.Throws<BusinessException>(() => _service.Create(new CreateWorkshopRequest
{
Name = "A栋",
SortOrder = 3
}));
Assert.Equal(ErrorCode.Conflict, ex.Code);
}
[Fact]
public void Create__Conflict()
{
var ex = Assert.Throws<BusinessException>(() => _service.Create(new CreateWorkshopRequest
{
Name = "a栋",
SortOrder = 3
}));
Assert.Equal(ErrorCode.Conflict, ex.Code);
}
// ======== Update ========
[Fact]
public void Update__true()
{
var result = _service.Update(1, new UpdateWorkshopRequest
{
Name = "A栋-修改",
SortOrder = 10
});
Assert.True(result);
var updated = _service.GetById(1);
Assert.Equal("A栋-修改", updated.Name);
Assert.Equal(10, updated.SortOrder);
}
[Fact]
public void Update_null_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.Update(1, null));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void Update_ID_NotFound()
{
var ex = Assert.Throws<BusinessException>(() => _service.Update(99999, new UpdateWorkshopRequest
{
Name = "测试",
SortOrder = 1
}));
Assert.Equal(ErrorCode.NotFound, ex.Code);
}
[Fact]
public void Update_ID_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.Update(0, new UpdateWorkshopRequest
{
Name = "测试",
SortOrder = 1
}));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void Update_Namenull_()
{
var before = _service.GetById(1);
_service.Update(1, new UpdateWorkshopRequest
{
Name = null,
SortOrder = 5
});
var after = _service.GetById(1);
Assert.Equal(before.Name, after.Name);
Assert.Equal(5, after.SortOrder);
}
// ======== Delete ========
[Fact]
public void Delete__true()
{
// 先新增一个空车间
var id = _service.Create(new CreateWorkshopRequest { Name = "待删除", SortOrder = 99 });
var result = _service.Delete(id);
Assert.True(result);
}
[Fact]
public void Delete_()
{
var id = _service.Create(new CreateWorkshopRequest { Name = "临时车间", SortOrder = 99 });
_service.Delete(id);
Assert.Throws<BusinessException>(() => _service.GetById(id));
}
[Fact]
public void Delete__DataReferenced()
{
// 先插入有效的采集地址
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, created_at, updated_at)
VALUES ('M001', '机床1', 1, 1, '0.0.0.0', 1, 1, NOW(), NOW())");
var ex = Assert.Throws<BusinessException>(() => _service.Delete(1));
Assert.Equal(ErrorCode.DataReferenced, ex.Code);
}
[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 before = _service.GetById(1);
var beforeState = before.IsEnabled;
_service.ToggleEnabled(1);
var after = _service.GetById(1);
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);
}
// ======== GetMachineCount ========
[Fact]
public void GetMachineCount__0()
{
var count = _service.GetMachineCount(1);
Assert.Equal(0, count);
}
[Fact]
public void GetMachineCount__()
{
// 先插入一个有效的采集地址满足cnc_machine的外键约束
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, created_at, updated_at)
VALUES ('M001', '机床1', 1, 1, '0.0.0.0', 1, 1, NOW(), NOW()),
('M002', '机床2', 1, 1, '0.0.0.0', 1, 1, NOW(), NOW())");
var count = _service.GetMachineCount(1);
Assert.Equal(2, count);
}
[Fact]
public void GetMachineCount_ID_BadRequest()
{
var ex = Assert.Throws<BusinessException>(() => _service.GetMachineCount(0));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
}
}