samhuri.net/test/posts/metadata_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

68 lines
1.8 KiB
Ruby

require "test_helper"
class Pressa::Posts::PostMetadataTest < Minitest::Test
def test_parse_parses_valid_yaml_front_matter
content = <<~MARKDOWN
---
Title: Test Post
Author: Trent Reznor
Date: 5th November, 2025
Timestamp: 2025-11-05T10:00:00-08:00
Tags: Ruby, Testing
Link: https://example.net/external
---
This is the post body.
MARKDOWN
metadata = Pressa::Posts::PostMetadata.parse(content)
assert_equal("Test Post", metadata.title)
assert_equal("Trent Reznor", metadata.author)
assert_equal("5th November, 2025", metadata.formatted_date)
assert_equal(2025, metadata.date.year)
assert_equal(11, metadata.date.month)
assert_equal(5, metadata.date.day)
assert_equal("https://example.net/external", metadata.link)
assert_equal(["Ruby", "Testing"], metadata.tags)
end
def test_parse_raises_error_when_required_fields_are_missing
content = <<~MARKDOWN
---
Title: Incomplete Post
---
Body content
MARKDOWN
error = assert_raises(StandardError) { Pressa::Posts::PostMetadata.parse(content) }
assert_match(/Missing required fields/, error.message)
end
def test_parse_handles_posts_without_optional_fields
content = <<~MARKDOWN
---
Title: Simple Post
Author: Fat Mike
Date: 1st January, 2025
Timestamp: 2025-01-01T12:00:00-08:00
---
Simple content
MARKDOWN
metadata = Pressa::Posts::PostMetadata.parse(content)
assert_equal([], metadata.tags)
assert_nil(metadata.link)
end
def test_parse_raises_error_when_front_matter_is_missing
error = assert_raises(StandardError) do
Pressa::Posts::PostMetadata.parse("just plain markdown")
end
assert_match(/No YAML front-matter found in post/, error.message)
end
end