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); } }