using Service.Budget; namespace WebApi.Test.Budget; /// /// 存款计划核心公式单元测试 /// 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 } }