58 lines
1.7 KiB
C#
58 lines
1.7 KiB
C#
using Elternbeirat.Contracts;
|
|
using Elternbeirat.Web.Features.Posts;
|
|
|
|
namespace Elternbeirat.Web.Tests;
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
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");
|
|
}
|