fix: issue #14 wrong sorting in category and tag archives

This commit is contained in:
2026-07-05 16:09:33 +02:00
parent 7dfcd78abd
commit bb82f1d4a1
5 changed files with 109 additions and 5 deletions

View File

@@ -0,0 +1,39 @@
defmodule BDS.Generation.ArchiveOrderingTest do
@moduledoc """
Category, tag and date archive listings must render newest first. The
generation post index is built by prepending, so this guards against the
regression where grouped archive lists came out in an unstable/oldest-first
order.
"""
use ExUnit.Case, async: true
alias BDS.Generation.Data
defp post(slug, created_at, categories, tags) do
%{
id: slug,
slug: slug,
created_at: created_at,
published_at: created_at,
categories: categories,
tags: tags
}
end
test "categories, tags and dates are ordered newest first regardless of input order" do
older = post("older", 1_700_000_000_000, ["article"], ["elixir"])
newest = post("newest", 1_700_000_200_000, ["article"], ["elixir"])
middle = post("middle", 1_700_000_100_000, ["article"], ["elixir"])
# Deliberately unordered input.
index = Data.build_generation_post_index([older, newest, middle])
expected = ["newest", "middle", "older"]
assert Enum.map(index.posts_by_category["article"], & &1.slug) == expected
assert Enum.map(index.posts_by_tag["elixir"], & &1.slug) == expected
{year, _month, _day} = BDS.Generation.Paths.local_date_parts!(newest.created_at)
assert Enum.map(index.posts_by_year[year], & &1.slug) == expected
end
end