using System;
using System.Linq;
using CncModels.Dto.Alert;
using CncModels.Entity;
using CncRepository.Impl;
using Xunit;
namespace CncRepository.Tests
{
///
/// 告警仓储测试
///
[Collection("Database")]
public class AlertRepositoryTests : IDisposable
{
private readonly AlertRepository _repo;
public AlertRepositoryTests()
{
_repo = new AlertRepository(TestDb.ConnectionString);
TestDb.TruncateAll();
}
public void Dispose()
{
TestDb.TruncateAll();
}
private Alert CreateTestAlert(string alertType = "collect_fail")
{
return new Alert
{
AlertType = alertType,
Title = "测试告警",
MachineId = null,
CollectAddressId = null,
Detail = "测试详情",
IsResolved = 0,
CreatedAt = DateTime.Now
};
}
[Fact]
public void Create_新增告警_返回自增ID()
{
var id = _repo.Create(CreateTestAlert());
Assert.True(id > 0);
}
[Fact]
public void GetById_存在的ID_返回告警()
{
var id = _repo.Create(CreateTestAlert());
var result = _repo.GetById(id);
Assert.NotNull(result);
Assert.Equal("collect_fail", result.AlertType);
Assert.Equal(0, result.IsResolved);
}
[Fact]
public void GetList_分页查询_返回分页结果()
{
for (int i = 0; i < 5; i++)
_repo.Create(CreateTestAlert());
var query = new AlertQuery { Page = 1, PageSize = 3 };
var result = _repo.GetList(query);
Assert.Equal(5, result.Total);
Assert.Equal(3, result.Items.Count);
}
[Fact]
public void Resolve_处理告警_返回true()
{
var id = _repo.Create(CreateTestAlert());
var result = _repo.Resolve(id);
Assert.True(result);
var alert = _repo.GetById(id);
Assert.Equal(1, alert.IsResolved);
}
[Fact]
public void BatchResolve_批量处理_返回处理数量()
{
var id1 = _repo.Create(CreateTestAlert());
var id2 = _repo.Create(CreateTestAlert());
var id3 = _repo.Create(CreateTestAlert());
var count = _repo.BatchResolve(new System.Collections.Generic.List { id1, id2 });
Assert.Equal(2, count);
Assert.Equal(1, _repo.GetById(id1).IsResolved);
Assert.Equal(1, _repo.GetById(id2).IsResolved);
Assert.Equal(0, _repo.GetById(id3).IsResolved);
}
[Fact]
public void GetStatistics_返回未处理统计()
{
_repo.Create(CreateTestAlert("collect_fail"));
_repo.Create(CreateTestAlert("collect_fail"));
_repo.Create(CreateTestAlert("device_offline"));
var stats = _repo.GetStatistics();
Assert.True(stats.UnresolvedCount >= 3);
Assert.True(stats.UnresolvedByType.ContainsKey("collect_fail"));
Assert.True(stats.UnresolvedByType["collect_fail"] >= 2);
}
}
}