using Elternbeirat.Contracts; using Elternbeirat.Web.Features.Posts; namespace Elternbeirat.Web.Tests; /// /// Unit tests for the older/newer post next to a post. The list comes newest /// first, as from PocketBase; "previous" is the older post. Pure logic, no /// PocketBase needed. /// public class PostNeighborsTests { // Newest first, like PocketBaseClient.GetPostsAsync. private static readonly Post[] Posts = [Post("march"), Post("february"), Post("january")]; private static Post Post(string slug) => new() { Id = slug, Title = slug, Slug = slug }; [Fact] public void Middle_post_has_the_older_as_previous_and_the_newer_as_next() { var neighbors = PostNeighbors.Of(Posts, "february"); neighbors.Previous?.Slug.ShouldBe("january"); neighbors.Next?.Slug.ShouldBe("march"); } [Fact] public void Newest_post_has_no_next() { var neighbors = PostNeighbors.Of(Posts, "march"); neighbors.Previous?.Slug.ShouldBe("february"); neighbors.Next.ShouldBeNull(); } [Fact] public void Oldest_post_has_no_previous() { var neighbors = PostNeighbors.Of(Posts, "january"); neighbors.Previous.ShouldBeNull(); neighbors.Next?.Slug.ShouldBe("february"); } [Fact] public void Only_post_has_no_neighbors() => PostNeighbors.Of([Post("only")], "only").ShouldBe(new PostNeighbors(null, null)); [Fact] public void Unknown_slug_has_no_neighbors() => PostNeighbors.Of(Posts, "december").ShouldBe(new PostNeighbors(null, null)); [Fact] public void Slug_is_compared_case_insensitively() => PostNeighbors.Of(Posts, "February").Next?.Slug.ShouldBe("march"); }