using System;
using CncModels.Constants;
using CncService;
using CncService.Impl;
using Xunit;
namespace CncService.Tests
{
///
/// CollectDataService 采集数据查询测试
/// 测试场景:分页查询原始记录、获取最新记录、参数校验
///
[Collection("Database")]
public class CollectDataServiceTests : IDisposable
{
private readonly CollectDataService _service;
public CollectDataServiceTests()
{
TestDb.TruncateAll();
_service = ServiceFactory.CreateCollectDataService();
}
public void Dispose()
{
TestDb.TruncateAll();
}
// ======== GetRawByAddress ========
[Fact]
public void GetRawByAddress_无效地址ID_抛出BadRequest异常()
{
var ex = Assert.Throws(() => _service.GetRawByAddress(0, 1, 20));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void GetRawByAddress_负数地址ID_抛出BadRequest异常()
{
var ex = Assert.Throws(() => _service.GetRawByAddress(-1, 1, 20));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void GetRawByAddress_无效页码_抛出BadRequest异常()
{
var ex = Assert.Throws(() => _service.GetRawByAddress(1, 0, 20));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void GetRawByAddress_无效页大小_抛出BadRequest异常()
{
var ex = Assert.Throws(() => _service.GetRawByAddress(1, 1, 0));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void GetRawByAddress_无数据_返回空分页()
{
// 先插入一个采集地址
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())");
var result = _service.GetRawByAddress(1, 1, 20);
Assert.NotNull(result);
Assert.Equal(0, result.Total);
}
// ======== GetLatestRaw ========
[Fact]
public void GetLatestRaw_无效地址ID_抛出BadRequest异常()
{
var ex = Assert.Throws(() => _service.GetLatestRaw(0));
Assert.Equal(ErrorCode.BadRequest, ex.Code);
}
[Fact]
public void GetLatestRaw_无数据_返回null()
{
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())");
var result = _service.GetLatestRaw(1);
Assert.Null(result);
}
[Fact]
public void GetLatestRaw_有数据_返回最新记录()
{
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 log_collect_raw (collect_address_id, request_time, response_time, is_success, raw_json, created_at) VALUES (1, NOW(), NOW(), 1, '{\"\"test\"\":1}', NOW())");
var result = _service.GetLatestRaw(1);
Assert.NotNull(result);
}
}
}