222 lines
8.2 KiB
C#
222 lines
8.2 KiB
C#
using System;
|
|
using Xunit;
|
|
|
|
namespace YunDa.SOMS.MongoDB.Application.Tests.Inspection
|
|
{
|
|
/// <summary>
|
|
/// Unit tests for September special case in GetYearlyStatisticsByMonthAsync
|
|
/// Tests validate Requirements: 5.1, 5.2, 5.3, 5.4, 5.5
|
|
/// </summary>
|
|
public class SeptemberSpecialCaseTests
|
|
{
|
|
/// <summary>
|
|
/// Helper class to simulate the September special case logic
|
|
/// </summary>
|
|
private class SeptemberLogicSimulator
|
|
{
|
|
public (int startYear, int startMonth, int endYear, int endMonth) ApplySeptemberSpecialCase(
|
|
int currentYear,
|
|
int currentMonth,
|
|
int calculatedStartYear,
|
|
int calculatedStartMonth,
|
|
int calculatedEndYear,
|
|
int calculatedEndMonth)
|
|
{
|
|
// Apply September special case
|
|
if (currentMonth == 9)
|
|
{
|
|
// For September, adjust to show only Jan-Dec of current year
|
|
return (currentYear, 1, currentYear, 12);
|
|
}
|
|
|
|
// Return original calculated values for non-September months
|
|
return (calculatedStartYear, calculatedStartMonth, calculatedEndYear, calculatedEndMonth);
|
|
}
|
|
|
|
public int CalculateMonthCount(int startYear, int startMonth, int endYear, int endMonth)
|
|
{
|
|
int count = 0;
|
|
int iterYear = startYear;
|
|
int iterMonth = startMonth;
|
|
|
|
while (iterYear < endYear || (iterYear == endYear && iterMonth <= endMonth))
|
|
{
|
|
count++;
|
|
iterMonth++;
|
|
if (iterMonth > 12)
|
|
{
|
|
iterMonth = 1;
|
|
iterYear++;
|
|
}
|
|
}
|
|
|
|
return count;
|
|
}
|
|
}
|
|
|
|
private readonly SeptemberLogicSimulator _simulator = new SeptemberLogicSimulator();
|
|
|
|
[Fact]
|
|
public void SeptemberSpecialCase_AdjustsToJanuaryThroughDecember()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 9; // September
|
|
|
|
// Simulated calculated window (June 2025 to August 2026)
|
|
int calculatedStartYear = 2025;
|
|
int calculatedStartMonth = 6;
|
|
int calculatedEndYear = 2026;
|
|
int calculatedEndMonth = 8;
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _simulator.ApplySeptemberSpecialCase(
|
|
currentYear, currentMonth,
|
|
calculatedStartYear, calculatedStartMonth,
|
|
calculatedEndYear, calculatedEndMonth);
|
|
|
|
// Assert - Requirements 5.1: Display Jan-Dec of current year
|
|
Assert.Equal(2025, startYear);
|
|
Assert.Equal(1, startMonth); // January
|
|
Assert.Equal(2025, endYear);
|
|
Assert.Equal(12, endMonth); // December
|
|
}
|
|
|
|
[Fact]
|
|
public void SeptemberSpecialCase_Returns12Months()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 9; // September
|
|
int calculatedStartYear = 2025;
|
|
int calculatedStartMonth = 6;
|
|
int calculatedEndYear = 2026;
|
|
int calculatedEndMonth = 8;
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _simulator.ApplySeptemberSpecialCase(
|
|
currentYear, currentMonth,
|
|
calculatedStartYear, calculatedStartMonth,
|
|
calculatedEndYear, calculatedEndMonth);
|
|
|
|
int monthCount = _simulator.CalculateMonthCount(startYear, startMonth, endYear, endMonth);
|
|
|
|
// Assert - Requirements 5.5: Only 12 months for September
|
|
Assert.Equal(12, monthCount);
|
|
}
|
|
|
|
[Fact]
|
|
public void SeptemberSpecialCase_DoesNotAffectOtherMonths()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 10; // October (not September)
|
|
int calculatedStartYear = 2025;
|
|
int calculatedStartMonth = 7;
|
|
int calculatedEndYear = 2026;
|
|
int calculatedEndMonth = 9;
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _simulator.ApplySeptemberSpecialCase(
|
|
currentYear, currentMonth,
|
|
calculatedStartYear, calculatedStartMonth,
|
|
calculatedEndYear, calculatedEndMonth);
|
|
|
|
// Assert - Non-September months should keep original calculated values
|
|
Assert.Equal(calculatedStartYear, startYear);
|
|
Assert.Equal(calculatedStartMonth, startMonth);
|
|
Assert.Equal(calculatedEndYear, endYear);
|
|
Assert.Equal(calculatedEndMonth, endMonth);
|
|
}
|
|
|
|
[Fact]
|
|
public void SeptemberSpecialCase_IncludesHistoricalMonths()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 9; // September
|
|
int calculatedStartYear = 2025;
|
|
int calculatedStartMonth = 6;
|
|
int calculatedEndYear = 2026;
|
|
int calculatedEndMonth = 8;
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _simulator.ApplySeptemberSpecialCase(
|
|
currentYear, currentMonth,
|
|
calculatedStartYear, calculatedStartMonth,
|
|
calculatedEndYear, calculatedEndMonth);
|
|
|
|
// Assert - Requirements 5.2: Includes June, July, August as historical
|
|
// The window starts at January, so June (month 6) is included
|
|
Assert.True(startMonth <= 6); // June is month 6
|
|
Assert.True(endMonth >= 6);
|
|
}
|
|
|
|
[Fact]
|
|
public void SeptemberSpecialCase_IncludesCurrentMonth()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 9; // September
|
|
int calculatedStartYear = 2025;
|
|
int calculatedStartMonth = 6;
|
|
int calculatedEndYear = 2026;
|
|
int calculatedEndMonth = 8;
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _simulator.ApplySeptemberSpecialCase(
|
|
currentYear, currentMonth,
|
|
calculatedStartYear, calculatedStartMonth,
|
|
calculatedEndYear, calculatedEndMonth);
|
|
|
|
// Assert - Requirements 5.3: Includes September as current month
|
|
Assert.True(startMonth <= 9); // September is month 9
|
|
Assert.True(endMonth >= 9);
|
|
}
|
|
|
|
[Fact]
|
|
public void SeptemberSpecialCase_IncludesPredictedMonths()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 9; // September
|
|
int calculatedStartYear = 2025;
|
|
int calculatedStartMonth = 6;
|
|
int calculatedEndYear = 2026;
|
|
int calculatedEndMonth = 8;
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _simulator.ApplySeptemberSpecialCase(
|
|
currentYear, currentMonth,
|
|
calculatedStartYear, calculatedStartMonth,
|
|
calculatedEndYear, calculatedEndMonth);
|
|
|
|
// Assert - Requirements 5.4: Predicts October, November, December
|
|
Assert.True(endMonth >= 12); // December is month 12
|
|
Assert.Equal(currentYear, endYear); // Same year
|
|
}
|
|
|
|
[Fact]
|
|
public void SeptemberSpecialCase_DoesNotIncludeNextYear()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 9; // September
|
|
int calculatedStartYear = 2025;
|
|
int calculatedStartMonth = 6;
|
|
int calculatedEndYear = 2026;
|
|
int calculatedEndMonth = 8;
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _simulator.ApplySeptemberSpecialCase(
|
|
currentYear, currentMonth,
|
|
calculatedStartYear, calculatedStartMonth,
|
|
calculatedEndYear, calculatedEndMonth);
|
|
|
|
// Assert - Requirements 5.5: Does not include any months from next year
|
|
Assert.Equal(currentYear, endYear);
|
|
Assert.Equal(12, endMonth); // Ends at December of current year
|
|
}
|
|
}
|
|
}
|