Files
prefab-page-detail/Prefab.Tests/Unit/Web/Url/UrlPolicyShould.cs
2025-10-27 17:39:18 -04:00

76 lines
2.1 KiB
C#

using Prefab.Tests;
using Prefab.Web.UrlPolicy;
using Shouldly;
namespace Prefab.Tests.Unit.Web.Url;
[Trait(TraitName.Category, TraitCategory.Unit)]
public sealed class UrlPolicyShould
{
[Fact]
public void BuildAndParseCategoryRoundTrip()
{
var url = UrlPolicy.Category(
slug: "ceiling-supports",
page: 2,
pageSize: 48,
sort: "price:desc",
view: "list");
var uri = new Uri("https://prefab.test" + url);
UrlPolicy.TryParseCategory(uri, out var slug, out var page, out var pageSize, out var sort, out var view)
.ShouldBeTrue();
slug.ShouldBe("ceiling-supports");
page.ShouldBe(2);
pageSize.ShouldBe(48);
sort.ShouldBe("price:desc");
view.ShouldBe("list");
UrlPolicy.Category(slug, page, pageSize, sort, view).ShouldBe(url);
}
[Fact]
public void ParseCategoryDefaultsWhenMissingOrInvalid()
{
var url = UrlPolicy.Category(
slug: "boxes-and-covers",
page: 0,
pageSize: 500,
sort: null,
view: string.Empty);
UrlPolicy.TryParseCategory(new Uri(url, UriKind.Relative), out var slug, out var page, out var pageSize, out var sort, out var view)
.ShouldBeTrue();
slug.ShouldBe("boxes-and-covers");
page.ShouldBe(UrlPolicy.DefaultPage);
pageSize.ShouldBe(UrlPolicy.DefaultPageSize);
sort.ShouldBe(UrlPolicy.DefaultSort);
view.ShouldBe(UrlPolicy.DefaultView);
}
[Fact]
public void BuildAndParseProductsRoundTrip()
{
var url = UrlPolicy.Products(
page: 3,
pageSize: 12,
sort: "name:desc",
view: "grid");
var uri = new Uri("https://prefab.test" + url);
UrlPolicy.TryParseProducts(uri, out var page, out var pageSize, out var sort, out var view)
.ShouldBeTrue();
page.ShouldBe(3);
pageSize.ShouldBe(12);
sort.ShouldBe("name:desc");
view.ShouldBe("grid");
UrlPolicy.Products(page, pageSize, sort, view).ShouldBe(url);
}
}