require 'spec_helper' require 'fileutils' require 'tmpdir' RSpec.describe Pressa::Config::Loader do describe '#build_site' do it 'builds a site from site.toml and projects.toml' do with_temp_config do |dir| loader = described_class.new(source_path: dir) site = loader.build_site expect(site.author).to eq('Sami Samhuri') expect(site.url).to eq('https://samhuri.net') expect(site.image_url).to eq('https://samhuri.net/images/me.jpg') expect(site.styles.map(&:href)).to eq(['css/style.css']) projects_plugin = site.plugins.find { |plugin| plugin.is_a?(Pressa::Projects::Plugin) } expect(projects_plugin).not_to be_nil expect(projects_plugin.scripts.map(&:src)).to eq(['js/projects.js']) end end it 'applies url_override and rewrites relative image_url with override host' do with_temp_config do |dir| loader = described_class.new(source_path: dir) site = loader.build_site(url_override: 'https://beta.samhuri.net') expect(site.url).to eq('https://beta.samhuri.net') expect(site.image_url).to eq('https://beta.samhuri.net/images/me.jpg') end end it 'raises a validation error for missing required site keys' do Dir.mktmpdir do |dir| File.write(File.join(dir, 'site.toml'), "title = \"x\"\n") File.write(File.join(dir, 'projects.toml'), '') loader = described_class.new(source_path: dir) expect { loader.build_site }.to raise_error(Pressa::Config::ValidationError, /Missing required site\.toml keys/) end end end def with_temp_config Dir.mktmpdir do |dir| File.write(File.join(dir, 'site.toml'), <<~TOML) author = "Sami Samhuri" email = "sami@samhuri.net" title = "samhuri.net" description = "blog" url = "https://samhuri.net" image_url = "/images/me.jpg" scripts = [] styles = ["css/style.css"] [projects_plugin] scripts = ["js/projects.js"] styles = [] TOML File.write(File.join(dir, 'projects.toml'), <<~TOML) [[projects]] name = "demo" title = "demo" description = "demo project" url = "https://github.com/samsonjs/demo" TOML yield dir end end end