68 lines
2.0 KiB
C#
68 lines
2.0 KiB
C#
using ScadaLink.CentralUI.Components.Shared;
|
|
|
|
namespace ScadaLink.CentralUI.Tests.Shared;
|
|
|
|
/// <summary>
|
|
/// Unit tests for the <see cref="PagerWindow"/> helper introduced for
|
|
/// CentralUI-016 — windowed pagination that keeps the rendered button count
|
|
/// bounded regardless of total page count.
|
|
/// </summary>
|
|
public class PagerWindowTests
|
|
{
|
|
[Fact]
|
|
public void Build_SmallPageCount_ReturnsEveryPage_NoEllipsis()
|
|
{
|
|
var pages = PagerWindow.Build(currentPage: 3, totalPages: 5);
|
|
|
|
Assert.Equal(new[] { 1, 2, 3, 4, 5 }, pages);
|
|
}
|
|
|
|
[Fact]
|
|
public void Build_LargePageCount_IsBounded_AndIncludesFirstAndLast()
|
|
{
|
|
var pages = PagerWindow.Build(currentPage: 100, totalPages: 200);
|
|
|
|
Assert.Contains(1, pages);
|
|
Assert.Contains(200, pages);
|
|
Assert.Contains(100, pages);
|
|
// First, ellipsis, window of 5, ellipsis, last — never the full 200.
|
|
Assert.True(pages.Count <= 12, $"Expected a bounded window but got {pages.Count} entries.");
|
|
}
|
|
|
|
[Fact]
|
|
public void Build_LargePageCount_InsertsEllipsisForGaps()
|
|
{
|
|
// 0 is the ellipsis sentinel.
|
|
var pages = PagerWindow.Build(currentPage: 100, totalPages: 200);
|
|
|
|
Assert.Contains(0, pages);
|
|
}
|
|
|
|
[Fact]
|
|
public void Build_CurrentNearStart_NoLeadingEllipsis()
|
|
{
|
|
var pages = PagerWindow.Build(currentPage: 1, totalPages: 200);
|
|
|
|
// Pages 1..3 are contiguous from the start, so no ellipsis before them.
|
|
Assert.Equal(1, pages[0]);
|
|
Assert.NotEqual(0, pages[1]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Build_ClampsOutOfRangeCurrentPage()
|
|
{
|
|
var pages = PagerWindow.Build(currentPage: 999, totalPages: 200);
|
|
|
|
Assert.Contains(200, pages);
|
|
Assert.True(pages.Count <= 12);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0)]
|
|
[InlineData(-3)]
|
|
public void Build_NonPositiveTotalPages_ReturnsEmpty(int totalPages)
|
|
{
|
|
Assert.Empty(PagerWindow.Build(currentPage: 1, totalPages: totalPages));
|
|
}
|
|
}
|