Rework post page (lead, pager), add skip link, unified focus ring, reduced motion and keyboard-accessible menu

This commit is contained in:
tleininger committed 2026-10-01 16:48:52 +02:00
1 parent ae362639e3
commit ba65b18d29
14 files changed
+544 -69

No files matched your search

@@ -0,0 +1,57 @@
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");
}