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