make blog slug tests content-independent

Commit 1709cb7 deleted the pinned hello-world post and ten tests
silently rotted with it - invisible until now because the suite could
not run in this clone (incomplete deps, then the broken frontmatter).
The slug, banner, og-meta and tag tests now derive slug and title from
the compiled posts at runtime (newest live post, newest draft), matching
the existing latest_post_with_links pattern, so content churn no longer
breaks them.
This commit is contained in:
Firehose Bot
2026-10-29 18:05:29 +00:00
parent 84539ec40f
commit 0d344a4f57
3 changed files with 64 additions and 16 deletions
@@ -9,6 +9,14 @@ defmodule FirehoseWeb.BlogTest do
body
end
# Content churns; the behavior under test does not. The newest live post is
# a deterministic stand-in - the pinned "hello-world" post was deleted in
# 1709cb7 and the slug tests silently rotted with it.
defp a_live_post do
Enum.find(Firehose.EngineeringBlog.all_posts(), &(Blogex.Post.visibility(&1) == :live)) ||
raise "no live engineering post to exercise the post pages"
end
describe "engineering blog (HTML)" do
test "GET /blog/engineering returns HTML index with layout", %{conn: conn} do
body = visit_blog_page(conn, "engineering")
@@ -17,8 +25,9 @@ defmodule FirehoseWeb.BlogTest do
end
test "GET /blog/engineering/:slug returns HTML post with layout", %{conn: conn} do
body = visit_blog_page(conn, "engineering", "/hello-world")
assert body =~ "Hello World"
post = a_live_post()
body = visit_blog_page(conn, "engineering", "/#{post.id}")
assert body =~ post.title
end
test "GET /blog/engineering?page=2 shows the next page of older posts", %{conn: conn} do
@@ -191,11 +200,16 @@ defmodule FirehoseWeb.BlogTest do
end
test "GET /api/blog/engineering/:slug returns a post", %{conn: conn} do
assert %{"id" => "hello-world", "title" => "Hello World"} =
post = a_live_post()
assert %{"id" => id, "title" => title} =
conn
|> put_req_header("accept", "application/json")
|> get("/api/blog/engineering/hello-world")
|> get("/api/blog/engineering/#{post.id}")
|> json_response(200)
assert id == post.id
assert title == post.title
end
test "GET /api/blog/engineering/:slug returns 404 for missing post", %{conn: conn} do