samhuri.net/test/posts/writer_test.rb
Sami Samhuri 007b1058b6
Migrate from Swift to Ruby (#33)
Replace the Swift site generator with a Ruby and Phlex implementation.
Loads site and projects from TOML, derive site metadata from posts.

Migrate from make to bake and add standardrb and code coverage tasks.

Update CI and docs to match the new workflow, and remove unused
assets/dependencies plus obsolete tooling.
2026-02-07 21:19:03 -08:00

123 lines
3.7 KiB
Ruby

require "test_helper"
require "tmpdir"
class Pressa::Posts::PostWriterTest < Minitest::Test
def site
@site ||= Pressa::Site.new(
author: "Sami Samhuri",
email: "sami@samhuri.net",
title: "samhuri.net",
description: "blog",
url: "https://samhuri.net"
)
end
def posts_by_year
@posts_by_year ||= begin
link_post = Pressa::Posts::Post.new(
slug: "link-post",
title: "Linked",
author: "Sami Samhuri",
date: DateTime.parse("2025-11-05T10:00:00-08:00"),
formatted_date: "5th November, 2025",
link: "https://example.net/linked",
body: "<p>linked body</p>",
excerpt: "linked body...",
path: "/posts/2025/11/link-post"
)
regular_post = Pressa::Posts::Post.new(
slug: "regular-post",
title: "Regular",
author: "Sami Samhuri",
date: DateTime.parse("2024-10-01T10:00:00-07:00"),
formatted_date: "1st October, 2024",
body: "<p>regular body</p>",
excerpt: "regular body...",
path: "/posts/2024/10/regular-post"
)
nov_posts = Pressa::Posts::MonthPosts.new(
month: Pressa::Posts::Month.new(name: "November", number: 11, padded: "11"),
posts: [link_post]
)
oct_posts = Pressa::Posts::MonthPosts.new(
month: Pressa::Posts::Month.new(name: "October", number: 10, padded: "10"),
posts: [regular_post]
)
Pressa::Posts::PostsByYear.new(
by_year: {
2025 => Pressa::Posts::YearPosts.new(year: 2025, by_month: {11 => nov_posts}),
2024 => Pressa::Posts::YearPosts.new(year: 2024, by_month: {10 => oct_posts})
}
)
end
end
def writer
@writer ||= Pressa::Posts::PostWriter.new(site:, posts_by_year:)
end
def test_write_posts_writes_each_post_page
Dir.mktmpdir do |dir|
writer.write_posts(target_path: dir)
regular = File.join(dir, "posts/2024/10/regular-post/index.html")
linked = File.join(dir, "posts/2025/11/link-post/index.html")
assert(File.exist?(regular))
assert(File.exist?(linked))
assert_includes(File.read(regular), "Regular")
assert_includes(File.read(linked), "→ Linked")
end
end
def test_write_recent_posts_writes_index_page
Dir.mktmpdir do |dir|
writer.write_recent_posts(target_path: dir, limit: 1)
index_path = File.join(dir, "index.html")
assert(File.exist?(index_path))
html = File.read(index_path)
assert_includes(html, "Linked")
refute_includes(html, "Regular")
end
end
def test_write_archive_writes_archive_index
Dir.mktmpdir do |dir|
writer.write_archive(target_path: dir)
archive_path = File.join(dir, "posts/index.html")
assert(File.exist?(archive_path))
html = File.read(archive_path)
assert_includes(html, "Archive")
assert_includes(html, "https://samhuri.net/posts/2025/")
end
end
def test_write_year_indexes_writes_each_year_index
Dir.mktmpdir do |dir|
writer.write_year_indexes(target_path: dir)
path_2025 = File.join(dir, "posts/2025/index.html")
path_2024 = File.join(dir, "posts/2024/index.html")
assert(File.exist?(path_2025))
assert(File.exist?(path_2024))
assert_includes(File.read(path_2025), "November")
end
end
def test_write_month_rollups_writes_each_month_index
Dir.mktmpdir do |dir|
writer.write_month_rollups(target_path: dir)
nov = File.join(dir, "posts/2025/11/index.html")
oct = File.join(dir, "posts/2024/10/index.html")
assert(File.exist?(nov))
assert(File.exist?(oct))
assert_includes(File.read(nov), "November 2025")
assert_includes(File.read(oct), "October 2024")
end
end
end