mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-03-25 09:05:47 +00:00
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.
123 lines
3.7 KiB
Ruby
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
|