测试覆盖率
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 27s
Docker Build & Deploy / Deploy to Production (push) Successful in 9s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 2s
Docker Build & Deploy / WeChat Notification (push) Successful in 2s
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 27s
Docker Build & Deploy / Deploy to Production (push) Successful in 9s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 2s
Docker Build & Deploy / WeChat Notification (push) Successful in 2s
This commit is contained in:
108
WebApi.Test/Repository/TransactionRecordRepositoryTest.cs
Normal file
108
WebApi.Test/Repository/TransactionRecordRepositoryTest.cs
Normal file
@@ -0,0 +1,108 @@
|
||||
using FluentAssertions;
|
||||
|
||||
namespace WebApi.Test.Repository;
|
||||
|
||||
public class TransactionRecordRepositoryTest : TransactionTestBase
|
||||
{
|
||||
private readonly ITransactionRecordRepository _repository;
|
||||
|
||||
public TransactionRecordRepositoryTest()
|
||||
{
|
||||
_repository = new TransactionRecordRepository(FreeSql);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task AddAsync_添加记录_Test()
|
||||
{
|
||||
var record = CreateTestRecord(-100);
|
||||
var result = await _repository.AddAsync(record);
|
||||
result.Should().BeTrue();
|
||||
|
||||
var dbRecord = await _repository.GetByIdAsync(record.Id);
|
||||
dbRecord.Should().NotBeNull();
|
||||
dbRecord!.Amount.Should().Be(-100);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task QueryAsync_按类型筛选_Test()
|
||||
{
|
||||
await _repository.AddAsync(CreateExpense(100));
|
||||
await _repository.AddAsync(CreateIncome(200));
|
||||
|
||||
var expenses = await _repository.QueryAsync(type: TransactionType.Expense);
|
||||
expenses.Should().HaveCount(1);
|
||||
expenses.First().Amount.Should().Be(-100);
|
||||
|
||||
var incomes = await _repository.QueryAsync(type: TransactionType.Income);
|
||||
incomes.Should().HaveCount(1);
|
||||
incomes.First().Amount.Should().Be(200);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task QueryAsync_按通过时间范围筛选_Test()
|
||||
{
|
||||
await _repository.AddAsync(CreateExpense(100, new DateTime(2023, 1, 1)));
|
||||
await _repository.AddAsync(CreateExpense(100, new DateTime(2023, 2, 1)));
|
||||
await _repository.AddAsync(CreateExpense(100, new DateTime(2023, 3, 1)));
|
||||
|
||||
// 查询 1月到2月
|
||||
var results = await _repository.QueryAsync(
|
||||
startDate: new DateTime(2023, 1, 1),
|
||||
endDate: new DateTime(2023, 2, 28)); // Include Feb
|
||||
|
||||
results.Should().HaveCount(2);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task QueryAsync_按年月筛选_Test()
|
||||
{
|
||||
await _repository.AddAsync(CreateExpense(100, new DateTime(2023, 1, 15)));
|
||||
await _repository.AddAsync(CreateExpense(100, new DateTime(2023, 2, 15)));
|
||||
|
||||
var results = await _repository.QueryAsync(year: 2023, month: 1);
|
||||
results.Should().HaveCount(1);
|
||||
results.First().OccurredAt.Month.Should().Be(1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CountAsync_统计数量_Test()
|
||||
{
|
||||
await _repository.AddAsync(CreateExpense(100));
|
||||
await _repository.AddAsync(CreateExpense(200));
|
||||
await _repository.AddAsync(CreateIncome(3000));
|
||||
|
||||
var count = await _repository.CountAsync(type: TransactionType.Expense);
|
||||
count.Should().Be(2);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetDistinctClassifyAsync_获取去重分类_Test()
|
||||
{
|
||||
await _repository.AddAsync(CreateExpense(100, classify: "餐饮"));
|
||||
await _repository.AddAsync(CreateExpense(100, classify: "餐饮"));
|
||||
await _repository.AddAsync(CreateExpense(100, classify: "交通"));
|
||||
|
||||
var classifies = await _repository.GetDistinctClassifyAsync();
|
||||
classifies.Should().HaveCount(2);
|
||||
classifies.Should().Contain("餐饮");
|
||||
classifies.Should().Contain("交通");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task BatchUpdateByReasonAsync_批量更新_Test()
|
||||
{
|
||||
await _repository.AddAsync(CreateExpense(100, reason: "麦当劳", classify: "餐饮"));
|
||||
await _repository.AddAsync(CreateExpense(100, reason: "麦当劳", classify: "餐饮"));
|
||||
await _repository.AddAsync(CreateExpense(100, reason: "肯德基", classify: "餐饮"));
|
||||
|
||||
// 将所有"麦当劳"改为"快餐"分类,类型保持支出
|
||||
var count = await _repository.BatchUpdateByReasonAsync("麦当劳", TransactionType.Expense, "快餐");
|
||||
count.Should().Be(2);
|
||||
|
||||
var records = await _repository.QueryAsync(reason: "麦当劳");
|
||||
records.All(r => r.Classify == "快餐").Should().BeTrue();
|
||||
|
||||
var kfc = await _repository.QueryAsync(reason: "肯德基");
|
||||
kfc.First().Classify.Should().Be("餐饮");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user