fix(central-ui): resolve CentralUI-015..019 — pager windowing, logout CSRF, narrowed catch blocks, coverage; CentralUI-015 re-triaged Won't Fix
This commit is contained in:
67
tests/ScadaLink.CentralUI.Tests/Shared/PagerWindowTests.cs
Normal file
67
tests/ScadaLink.CentralUI.Tests/Shared/PagerWindowTests.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user