40 lines
1.3 KiB
Elixir
40 lines
1.3 KiB
Elixir
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
|