samhuri.net/pressa/spec/posts/metadata_spec.rb

69 lines
1.8 KiB
Ruby

require 'spec_helper'
RSpec.describe Pressa::Posts::PostMetadata do
describe '.parse' do
it 'parses valid YAML front-matter' do
content = <<~MARKDOWN
---
Title: Test Post
Author: Trent Reznor
Date: 5th November, 2025
Timestamp: 2025-11-05T10:00:00-08:00
Tags: Ruby, Testing
Scripts: highlight.js
Styles: code.css
Link: https://example.net/external
---
This is the post body.
MARKDOWN
metadata = described_class.parse(content)
expect(metadata.title).to eq('Test Post')
expect(metadata.author).to eq('Trent Reznor')
expect(metadata.formatted_date).to eq('5th November, 2025')
expect(metadata.date.year).to eq(2025)
expect(metadata.date.month).to eq(11)
expect(metadata.date.day).to eq(5)
expect(metadata.link).to eq('https://example.net/external')
expect(metadata.tags).to eq(['Ruby', 'Testing'])
expect(metadata.scripts.map(&:src)).to eq(['highlight.js'])
expect(metadata.styles.map(&:href)).to eq(['code.css'])
end
it 'raises error when required fields are missing' do
content = <<~MARKDOWN
---
Title: Incomplete Post
---
Body content
MARKDOWN
expect {
described_class.parse(content)
}.to raise_error(/Missing required fields/)
end
it 'handles posts without optional fields' do
content = <<~MARKDOWN
---
Title: Simple Post
Author: Fat Mike
Date: 1st January, 2025
Timestamp: 2025-01-01T12:00:00-08:00
---
Simple content
MARKDOWN
metadata = described_class.parse(content)
expect(metadata.tags).to eq([])
expect(metadata.scripts).to eq([])
expect(metadata.styles).to eq([])
expect(metadata.link).to be_nil
end
end
end