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/CncWebApi.Tests/DashboardControllerTests.cs

165 lines
5.3 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.Collections.Generic;
using CncModels.Dto;
using CncModels.Dto.Dashboard;
using CncWebApi.Controllers;
using Xunit;
namespace CncWebApi.Tests
{
/// <summary>
/// DashboardController单元测试
/// 8个仪表盘统计接口
/// </summary>
[Collection("Database")]
public class DashboardControllerTests
{
private readonly DashboardController _controller;
public DashboardControllerTests()
{
TestDb.TruncateAll();
_controller = ControllerFactory.CreateDashboardController();
}
#region GetSummary - 统计卡片
/// <summary>
/// 测试空数据库也能返回统计各指标为0
/// </summary>
[Fact]
public void GetSummary_EmptyDb_ShouldReturnZeros()
{
var result = _controller.GetSummary();
var response = ControllerFactory.Extract<DashboardSummaryResponse>(result);
ControllerFactory.AssertSuccess(response);
Assert.NotNull(response.Data);
}
/// <summary>
/// 测试:有数据时统计正确
/// </summary>
[Fact]
public void GetSummary_WithData_ShouldReturnStats()
{
// 预置机床+产量数据
PrepareProductionData();
var result = _controller.GetSummary();
var response = ControllerFactory.Extract<DashboardSummaryResponse>(result);
ControllerFactory.AssertSuccess(response);
Assert.NotNull(response.Data);
}
#endregion
#region GetWorkshopProduction - 车间产量
[Fact]
public void GetWorkshopProduction_ShouldReturnList()
{
var result = _controller.GetWorkshopProduction(null, null);
var response = ControllerFactory.Extract<List<WorkshopProductionResponse>>(result);
ControllerFactory.AssertSuccess(response);
Assert.NotNull(response.Data);
}
#endregion
#region GetMachineRank - 机床排行
[Fact]
public void GetMachineRank_ShouldReturnList()
{
var result = _controller.GetMachineRank(null, null, 10);
var response = ControllerFactory.Extract<List<MachineRankResponse>>(result);
ControllerFactory.AssertSuccess(response);
Assert.NotNull(response.Data);
}
#endregion
#region GetWorkerRank - 工人排行
[Fact]
public void GetWorkerRank_ShouldReturnList()
{
var result = _controller.GetWorkerRank(null, null, 10);
var response = ControllerFactory.Extract<List<WorkerRankResponse>>(result);
ControllerFactory.AssertSuccess(response);
Assert.NotNull(response.Data);
}
#endregion
#region GetProductionTrend - 产量趋势
[Fact]
public void GetProductionTrend_ShouldReturnData()
{
var result = _controller.GetProductionTrend(7);
Assert.NotNull(result);
var content = result.GetType().GetProperty("Content")?.GetValue(result);
Assert.NotNull(content);
}
#endregion
#region GetMachineStatusDistribution - 机床状态分布
[Fact]
public void GetMachineStatusDistribution_ShouldReturnData()
{
var result = _controller.GetMachineStatusDistribution();
Assert.NotNull(result);
var content = result.GetType().GetProperty("Content")?.GetValue(result);
Assert.NotNull(content);
}
#endregion
#region GetRecentAlerts - 最新告警
[Fact]
public void GetRecentAlerts_ShouldReturnList()
{
var result = _controller.GetRecentAlerts(5);
var response = ControllerFactory.Extract<List<AlertListItem>>(result);
ControllerFactory.AssertSuccess(response);
Assert.NotNull(response.Data);
}
#endregion
#region GetCollectorStatus - 采集服务状态
[Fact]
public void GetCollectorStatus_ShouldReturnData()
{
var result = _controller.GetCollectorStatus();
Assert.NotNull(result);
var content = result.GetType().GetProperty("Content")?.GetValue(result);
Assert.NotNull(content);
}
#endregion
#region 辅助方法
/// <summary>
/// 预置产量数据(机床+日产量)
/// </summary>
private void PrepareProductionData()
{
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())");
TestDb.Execute(@"INSERT INTO cnc_daily_production (machine_id, production_date, program_name, total_quantity, segment_count, created_at, updated_at)
VALUES (1, CURDATE(), 'O0001', 100, 1, NOW(), NOW())");
}
#endregion
}
}