Static blog with front page summary
Goal: have a personal blog, and try out another point in the 'modular app design with elixir' space. Designing OTP systems with elixir had some interesting ideas.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
defmodule Blogex.Test.PostBuilder do
|
||||
@moduledoc """
|
||||
Builds `%Blogex.Post{}` structs for tests.
|
||||
|
||||
Call `build/0` for a post with sensible defaults, or `build/1`
|
||||
with a keyword list to override only the fields that matter for
|
||||
your specific test.
|
||||
|
||||
build() # generic post
|
||||
build(title: "Specific Title") # override one field
|
||||
build(tags: ~w(elixir otp), blog: :eng) # override several
|
||||
build(published: false) # draft post
|
||||
"""
|
||||
|
||||
@defaults %{
|
||||
id: "a-blog-post",
|
||||
title: "A Blog Post",
|
||||
author: "Test Author",
|
||||
body: "<p>Post body.</p>",
|
||||
description: "A test post",
|
||||
date: ~D[2026-01-15],
|
||||
tags: ["general"],
|
||||
blog: :test_blog,
|
||||
published: true
|
||||
}
|
||||
|
||||
@doc "Build a post with defaults, merging any overrides."
|
||||
def build(overrides \\ []) do
|
||||
attrs = Map.merge(@defaults, Map.new(overrides))
|
||||
struct!(Blogex.Post, attrs)
|
||||
end
|
||||
|
||||
@doc "Build a list of n posts with sequential dates (newest first)."
|
||||
def build_many(n, overrides \\ []) do
|
||||
Enum.map(1..n, fn i ->
|
||||
build(
|
||||
Keyword.merge(
|
||||
[
|
||||
id: "post-#{i}",
|
||||
title: "Post #{i}",
|
||||
date: Date.add(~D[2026-01-01], n - i)
|
||||
],
|
||||
overrides
|
||||
)
|
||||
)
|
||||
end)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user