using Omika.Core.Contracts.Common;
namespace Omika.Tests.Contracts;
///
/// Tests du contrat de pagination : bornes, calcul du nombre total de pages et
/// indicateurs de navigation.
///
public class PagedResultTests
{
[Fact]
public void PagedRequest_NormalizesPage_ToAtLeastOne()
{
var request = new PagedRequest { Page = 0, PageSize = 10 };
Assert.Equal(1, request.Page);
}
[Fact]
public void PagedRequest_ClampsPageSize()
{
var request = new PagedRequest { PageSize = PagedRequest.MaxPageSize + 1 };
Assert.Equal(PagedRequest.MaxPageSize, request.PageSize);
}
[Fact]
public void PagedRequest_ZeroPageSize_FallsBackToDefault()
{
var request = new PagedRequest { PageSize = 0 };
Assert.Equal(20, request.PageSize);
}
[Fact]
public void PagedResult_ComputesTotalPages_AndNavigation()
{
var items = new[] { "a", "b", "c", "d", "e" };
var result = new PagedResult(items, Page: 1, PageSize: 2, TotalCount: 5, TotalPages: 3);
Assert.Equal(5, result.TotalCount);
Assert.Equal(3, result.TotalPages);
Assert.False(result.HasPreviousPage);
Assert.True(result.HasNextPage);
}
[Fact]
public void PagedResult_LastPage_HasNoNextPage()
{
var result = new PagedResult([], Page: 2, PageSize: 2, TotalCount: 4, TotalPages: 2);
Assert.True(result.HasPreviousPage);
Assert.False(result.HasNextPage);
}
}