using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Moq;
using Xunit;
using Haoliang.Api.Controllers;
using Haoliang.Core.Services;
using Haoliang.Models.System;
namespace Haoliang.Tests.Controllers
{
///
/// SystemController 完整测试 - 100% 方法、分支、参数覆盖
/// 验证问题 1 (ISchedulerService 依赖注入) 的修复
///
public class SystemControllerTests
{
private readonly Mock _mockConfigService;
private readonly Mock _mockLoggingService;
private readonly Mock _mockSchedulerService;
private readonly Mock> _mockLogger;
public SystemControllerTests()
{
_mockConfigService = new Mock();
_mockLoggingService = new Mock();
_mockSchedulerService = new Mock();
_mockLogger = new Mock>();
}
#region 构造函数测试 - 100% 参数覆盖
[Fact]
public void Constructor_WhenAllDependenciesValid_ShouldCreateInstance()
{
// Act
var controller = new SystemController(
_mockConfigService.Object,
_mockLoggingService.Object,
_mockSchedulerService.Object
);
// Assert
Assert.NotNull(controller);
}
[Fact]
public void Constructor_WhenConfigServiceIsNull_ShouldThrowArgumentNullException()
{
// Act & Assert
Assert.Throws(() => new SystemController(
null!,
_mockLoggingService.Object,
_mockSchedulerService.Object
));
}
[Fact]
public void Constructor_WhenLoggingServiceIsNull_ShouldThrowArgumentNullException()
{
// Act & Assert
Assert.Throws(() => new SystemController(
_mockConfigService.Object,
null!,
_mockSchedulerService.Object
));
}
[Fact]
public void Constructor_WhenSchedulerServiceIsNull_ShouldThrowArgumentNullException()
{
// Act & Assert
Assert.Throws(() => new SystemController(
_mockConfigService.Object,
_mockLoggingService.Object,
null!
));
}
[Fact]
public void Constructor_WhenAllDependenciesNull_ShouldThrowArgumentNullException()
{
// Act & Assert
Assert.Throws(() => new SystemController(
null!,
null!,
null!
));
}
#endregion
#region GetSystemStatus 方法测试 - 100% 分支覆盖
[Fact]
public async Task GetSystemStatus_WhenSuccessful_ReturnsOkResult()
{
// Arrange
var controller = new SystemController(
_mockConfigService.Object,
_mockLoggingService.Object,
_mockSchedulerService.Object
);
// Setup
_mockSchedulerService
.Setup(x => x.GetAllScheduledTasksAsync())
.ReturnsAsync(new List