76 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|