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(["js/highlight.js"]) expect(metadata.styles.map(&:href)).to eq(["css/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