using FluentAssertions; using SeaHaven.Services.DTOs; using Xunit; namespace SeaHaven.Services.Tests; public class PagedResultTests { [Theory] [InlineData(0, 10, 0)] [InlineData(1, 10, 1)] [InlineData(10, 10, 1)] [InlineData(11, 10, 2)] [InlineData(100, 25, 4)] public void TotalPages_IsCeilingOfCountOverPageSize(int totalCount, int pageSize, int expectedPages) { var result = new PagedResult { TotalCount = totalCount, PageSize = pageSize, Page = 1 }; result.TotalPages.Should().Be(expectedPages); } [Fact] public void HasPrevious_IsFalseOnFirstPage_TrueAfterward_OneBased() { new PagedResult { Page = 1, PageSize = 10, TotalCount = 30 }.HasPrevious.Should().BeFalse(); new PagedResult { Page = 2, PageSize = 10, TotalCount = 30 }.HasPrevious.Should().BeTrue(); } [Fact] public void HasNext_IsTrueBeforeLastPage_FalseOnLastPage_OneBased() { new PagedResult { Page = 2, PageSize = 10, TotalCount = 30 }.HasNext.Should().BeTrue(); new PagedResult { Page = 3, PageSize = 10, TotalCount = 30 }.HasNext.Should().BeFalse(); } [Fact] public void HasPrevious_And_HasNext_ZeroBased_WhenPageBaseIsZero() { var first = new PagedResult { Page = 0, PageSize = 10, TotalCount = 30, PageBase = 0 }; first.HasPrevious.Should().BeFalse(); first.HasNext.Should().BeTrue(); var middle = new PagedResult { Page = 1, PageSize = 10, TotalCount = 30, PageBase = 0 }; middle.HasPrevious.Should().BeTrue(); middle.HasNext.Should().BeTrue(); var last = new PagedResult { Page = 2, PageSize = 10, TotalCount = 30, PageBase = 0 }; last.HasPrevious.Should().BeTrue(); last.HasNext.Should().BeFalse(); } }