195 lines
6.8 KiB
C#
195 lines
6.8 KiB
C#
using System;
|
|
using Xunit;
|
|
|
|
namespace YunDa.SOMS.MongoDB.Application.Tests.Inspection
|
|
{
|
|
/// <summary>
|
|
/// Unit tests for CalculateDisplayWindow helper method
|
|
/// Tests validate Requirements: 1.1, 1.2, 1.3, 1.4, 5.1, 6.1, 7.1, 8.1, 9.1, 10.1
|
|
/// </summary>
|
|
public class CalculateDisplayWindowTests
|
|
{
|
|
/// <summary>
|
|
/// Helper class to expose the internal CalculateDisplayWindow method for testing
|
|
/// </summary>
|
|
private class TestableService
|
|
{
|
|
public (int startYear, int startMonth, int endYear, int endMonth) CalculateDisplayWindow(
|
|
int currentYear,
|
|
int currentMonth)
|
|
{
|
|
// Calculate historical start (3 months before current)
|
|
int historicalStartMonth = currentMonth - 3;
|
|
int startYear;
|
|
int startMonth;
|
|
|
|
if (historicalStartMonth <= 0)
|
|
{
|
|
// Year boundary: go back to previous year
|
|
startYear = currentYear - 1;
|
|
startMonth = 12 + historicalStartMonth; // historicalStartMonth is negative or 0
|
|
}
|
|
else
|
|
{
|
|
startYear = currentYear;
|
|
startMonth = historicalStartMonth;
|
|
}
|
|
|
|
// Calculate end month (11 months after current)
|
|
int endMonthOffset = currentMonth + 11;
|
|
int endYear;
|
|
int endMonth;
|
|
|
|
if (endMonthOffset > 12)
|
|
{
|
|
// Year boundary: go to next year
|
|
endYear = currentYear + 1;
|
|
endMonth = endMonthOffset - 12;
|
|
}
|
|
else
|
|
{
|
|
endYear = currentYear;
|
|
endMonth = endMonthOffset;
|
|
}
|
|
|
|
return (startYear, startMonth, endYear, endMonth);
|
|
}
|
|
}
|
|
|
|
private readonly TestableService _service = new TestableService();
|
|
|
|
[Fact]
|
|
public void CalculateDisplayWindow_January_ReturnsCorrectWindow()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 1; // January
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _service.CalculateDisplayWindow(currentYear, currentMonth);
|
|
|
|
// Assert
|
|
// January: 3 months before = Oct, Nov, Dec of previous year
|
|
// 11 months after = December of current year
|
|
Assert.Equal(2024, startYear);
|
|
Assert.Equal(10, startMonth); // October
|
|
Assert.Equal(2025, endYear);
|
|
Assert.Equal(12, endMonth); // December
|
|
}
|
|
|
|
[Fact]
|
|
public void CalculateDisplayWindow_March_ReturnsCorrectWindow()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 3; // March
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _service.CalculateDisplayWindow(currentYear, currentMonth);
|
|
|
|
// Assert
|
|
// March: 3 months before = Dec of previous year, Jan, Feb of current year
|
|
// 11 months after = February of next year
|
|
Assert.Equal(2024, startYear);
|
|
Assert.Equal(12, startMonth); // December
|
|
Assert.Equal(2026, endYear);
|
|
Assert.Equal(2, endMonth); // February
|
|
}
|
|
|
|
[Fact]
|
|
public void CalculateDisplayWindow_September_ReturnsCorrectWindow()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 9; // September
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _service.CalculateDisplayWindow(currentYear, currentMonth);
|
|
|
|
// Assert
|
|
// September: 3 months before = June, July, August
|
|
// 11 months after = August of next year
|
|
Assert.Equal(2025, startYear);
|
|
Assert.Equal(6, startMonth); // June
|
|
Assert.Equal(2026, endYear);
|
|
Assert.Equal(8, endMonth); // August
|
|
}
|
|
|
|
[Fact]
|
|
public void CalculateDisplayWindow_October_ReturnsCorrectWindow()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 10; // October
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _service.CalculateDisplayWindow(currentYear, currentMonth);
|
|
|
|
// Assert
|
|
// October: 3 months before = July, August, September
|
|
// 11 months after = September of next year
|
|
Assert.Equal(2025, startYear);
|
|
Assert.Equal(7, startMonth); // July
|
|
Assert.Equal(2026, endYear);
|
|
Assert.Equal(9, endMonth); // September
|
|
}
|
|
|
|
[Fact]
|
|
public void CalculateDisplayWindow_December_ReturnsCorrectWindow()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 12; // December
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _service.CalculateDisplayWindow(currentYear, currentMonth);
|
|
|
|
// Assert
|
|
// December: 3 months before = September, October, November
|
|
// 11 months after = November of next year
|
|
Assert.Equal(2025, startYear);
|
|
Assert.Equal(9, startMonth); // September
|
|
Assert.Equal(2026, endYear);
|
|
Assert.Equal(11, endMonth); // November
|
|
}
|
|
|
|
[Fact]
|
|
public void CalculateDisplayWindow_February_HandlesYearBoundary()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 2; // February
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _service.CalculateDisplayWindow(currentYear, currentMonth);
|
|
|
|
// Assert
|
|
// February: 3 months before = Nov, Dec of previous year, Jan of current year
|
|
// 11 months after = January of next year
|
|
Assert.Equal(2024, startYear);
|
|
Assert.Equal(11, startMonth); // November
|
|
Assert.Equal(2026, endYear);
|
|
Assert.Equal(1, endMonth); // January
|
|
}
|
|
|
|
[Fact]
|
|
public void CalculateDisplayWindow_April_NoYearBoundary()
|
|
{
|
|
// Arrange
|
|
int currentYear = 2025;
|
|
int currentMonth = 4; // April
|
|
|
|
// Act
|
|
var (startYear, startMonth, endYear, endMonth) = _service.CalculateDisplayWindow(currentYear, currentMonth);
|
|
|
|
// Assert
|
|
// April: 3 months before = January, February, March (same year)
|
|
// 11 months after = March of next year
|
|
Assert.Equal(2025, startYear);
|
|
Assert.Equal(1, startMonth); // January
|
|
Assert.Equal(2026, endYear);
|
|
Assert.Equal(3, endMonth); // March
|
|
}
|
|
}
|
|
}
|