136 lines
4.0 KiB
C#
136 lines
4.0 KiB
C#
|
|
using Service.Budget;
|
|||
|
|
|
|||
|
|
namespace WebApi.Test.Budget;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 存款计划核心公式单元测试
|
|||
|
|
/// </summary>
|
|||
|
|
public class BudgetSavingsCalculationTest : BaseTest
|
|||
|
|
{
|
|||
|
|
[Fact]
|
|||
|
|
public void 月度计划存款公式_纯月度预算场景()
|
|||
|
|
{
|
|||
|
|
// Arrange
|
|||
|
|
var monthlyIncomeBudget = 15000m; // 工资10000 + 奖金5000
|
|||
|
|
var yearlyIncomeInThisMonth = 0m;
|
|||
|
|
var monthlyExpenseBudget = 5000m; // 房租3000 + 餐饮2000
|
|||
|
|
var yearlyExpenseInThisMonth = 0m;
|
|||
|
|
|
|||
|
|
// Act
|
|||
|
|
var result = BudgetSavingsService.CalculateMonthlyPlannedSavings(
|
|||
|
|
monthlyIncomeBudget,
|
|||
|
|
yearlyIncomeInThisMonth,
|
|||
|
|
monthlyExpenseBudget,
|
|||
|
|
yearlyExpenseInThisMonth
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// Assert
|
|||
|
|
result.Should().Be(10000m); // 15000 - 5000
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[Fact]
|
|||
|
|
public void 月度计划存款公式_月度预算加本月发生的年度预算()
|
|||
|
|
{
|
|||
|
|
// Arrange
|
|||
|
|
var monthlyIncomeBudget = 10000m; // 工资
|
|||
|
|
var yearlyIncomeInThisMonth = 0m;
|
|||
|
|
var monthlyExpenseBudget = 3000m; // 房租
|
|||
|
|
var yearlyExpenseInThisMonth = 3000m; // 旅游实际发生
|
|||
|
|
|
|||
|
|
// Act
|
|||
|
|
var result = BudgetSavingsService.CalculateMonthlyPlannedSavings(
|
|||
|
|
monthlyIncomeBudget,
|
|||
|
|
yearlyIncomeInThisMonth,
|
|||
|
|
monthlyExpenseBudget,
|
|||
|
|
yearlyExpenseInThisMonth
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// Assert
|
|||
|
|
result.Should().Be(4000m); // 10000 - 3000 - 3000
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[Fact]
|
|||
|
|
public void 月度计划存款公式_年度预算未在本月发生应不计入()
|
|||
|
|
{
|
|||
|
|
// Arrange
|
|||
|
|
var monthlyIncomeBudget = 10000m;
|
|||
|
|
var yearlyIncomeInThisMonth = 0m; // 年终奖未发生
|
|||
|
|
var monthlyExpenseBudget = 3000m;
|
|||
|
|
var yearlyExpenseInThisMonth = 0m; // 旅游未发生
|
|||
|
|
|
|||
|
|
// Act
|
|||
|
|
var result = BudgetSavingsService.CalculateMonthlyPlannedSavings(
|
|||
|
|
monthlyIncomeBudget,
|
|||
|
|
yearlyIncomeInThisMonth,
|
|||
|
|
monthlyExpenseBudget,
|
|||
|
|
yearlyExpenseInThisMonth
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// Assert
|
|||
|
|
result.Should().Be(7000m); // 10000 - 3000
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[Fact]
|
|||
|
|
public void 年度计划存款公式_年初无归档数据场景()
|
|||
|
|
{
|
|||
|
|
// Arrange
|
|||
|
|
var archivedIncome = 0m;
|
|||
|
|
var futureIncomeBudget = 120000m; // 10000×12
|
|||
|
|
var archivedExpense = 0m;
|
|||
|
|
var futureExpenseBudget = 36000m; // 3000×12
|
|||
|
|
|
|||
|
|
// Act
|
|||
|
|
var result = BudgetSavingsService.CalculateYearlyPlannedSavings(
|
|||
|
|
archivedIncome,
|
|||
|
|
futureIncomeBudget,
|
|||
|
|
archivedExpense,
|
|||
|
|
futureExpenseBudget
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// Assert
|
|||
|
|
result.Should().Be(84000m); // 120000 - 36000
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[Fact]
|
|||
|
|
public void 年度计划存款公式_年中有归档数据场景()
|
|||
|
|
{
|
|||
|
|
// Arrange
|
|||
|
|
var archivedIncome = 29000m; // 1月15000 + 2月14000
|
|||
|
|
var futureIncomeBudget = 100000m; // 10000×10月
|
|||
|
|
var archivedExpense = 10000m; // 1月4800 + 2月5200
|
|||
|
|
var futureExpenseBudget = 30000m; // 3000×10月
|
|||
|
|
|
|||
|
|
// Act
|
|||
|
|
var result = BudgetSavingsService.CalculateYearlyPlannedSavings(
|
|||
|
|
archivedIncome,
|
|||
|
|
futureIncomeBudget,
|
|||
|
|
archivedExpense,
|
|||
|
|
futureExpenseBudget
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// Assert
|
|||
|
|
result.Should().Be(89000m); // 29000 + 100000 - 10000 - 30000
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[Fact]
|
|||
|
|
public void 年度计划存款公式_归档数据包含年度预算()
|
|||
|
|
{
|
|||
|
|
// Arrange
|
|||
|
|
var archivedIncome = 15000m;
|
|||
|
|
var futureIncomeBudget = 110000m;
|
|||
|
|
var archivedExpense = 7800m; // 包含1月旅游3000的年度支出
|
|||
|
|
var futureExpenseBudget = 30000m;
|
|||
|
|
|
|||
|
|
// Act
|
|||
|
|
var result = BudgetSavingsService.CalculateYearlyPlannedSavings(
|
|||
|
|
archivedIncome,
|
|||
|
|
futureIncomeBudget,
|
|||
|
|
archivedExpense,
|
|||
|
|
futureExpenseBudget
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// Assert
|
|||
|
|
result.Should().Be(87200m); // 15000 + 110000 - 7800 - 30000
|
|||
|
|
}
|
|||
|
|
}
|