251 lines
6.8 KiB
Ruby
251 lines
6.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "helper"
|
|
|
|
class TestFrontMatterDefaults < JekyllUnitTest
|
|
context "A site with full front matter defaults" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"defaults" => [{
|
|
"scope" => {
|
|
"path" => "contacts",
|
|
"type" => "page",
|
|
},
|
|
"values" => {
|
|
"key" => "val",
|
|
},
|
|
}]
|
|
)
|
|
@output = capture_output { @site.process }
|
|
@affected = @site.pages.find { |page| page.relative_path == "contacts/bar.html" }
|
|
@not_affected = @site.pages.find { |page| page.relative_path == "about.html" }
|
|
end
|
|
|
|
should "affect only the specified path and type" do
|
|
assert_equal "val", @affected.data["key"]
|
|
assert_nil @not_affected.data["key"]
|
|
end
|
|
end
|
|
|
|
context "A site with full front matter defaults (glob)" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"defaults" => [{
|
|
"scope" => {
|
|
"path" => "contacts/*.html",
|
|
"type" => "page",
|
|
},
|
|
"values" => {
|
|
"key" => "val",
|
|
},
|
|
}]
|
|
)
|
|
@output = capture_output { @site.process }
|
|
@affected = @site.pages.find { |page| page.relative_path == "contacts/bar.html" }
|
|
@not_affected = @site.pages.find { |page| page.relative_path == "about.html" }
|
|
end
|
|
|
|
should "affect only the specified path and type" do
|
|
assert_equal "val", @affected.data["key"]
|
|
assert_nil @not_affected.data["key"]
|
|
end
|
|
end
|
|
|
|
context "A site with collections and front matter defaults with glob patterns" do
|
|
setup do
|
|
site = fixture_site(
|
|
"collections_dir" => "gathering",
|
|
"collections" => { "staff" => { "output" => true } },
|
|
"defaults" => [
|
|
{
|
|
"scope" => { "path" => "_staff/**/*.md", "type" => "staff" },
|
|
"values" => { "layout" => "simple" },
|
|
},
|
|
{
|
|
"scope" => { "path" => "_staff/**/*.svg" },
|
|
"values" => { "css_class" => "epilson" },
|
|
},
|
|
]
|
|
)
|
|
site.read
|
|
@staff = site.collections["staff"]
|
|
end
|
|
|
|
should "affect the appropriate items only" do
|
|
@staff.docs.each do |item|
|
|
assert_equal "simple", item.data["layout"]
|
|
assert_nil item.data["css_class"]
|
|
end
|
|
|
|
@staff.files.each do |item|
|
|
assert_equal "epilson", item.data["css_class"]
|
|
assert_nil item.data["layout"]
|
|
end
|
|
end
|
|
end
|
|
|
|
context "A site with front matter type pages and an extension" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"defaults" => [{
|
|
"scope" => {
|
|
"path" => "index.html",
|
|
},
|
|
"values" => {
|
|
"key" => "val",
|
|
},
|
|
}]
|
|
)
|
|
|
|
@site.process
|
|
@affected = @site.pages.find { |page| page.relative_path == "index.html" }
|
|
@not_affected = @site.pages.find { |page| page.relative_path == "about.html" }
|
|
end
|
|
|
|
should "affect only the specified path" do
|
|
assert_equal "val", @affected.data["key"]
|
|
assert_nil @not_affected.data["key"]
|
|
end
|
|
end
|
|
|
|
context "A site with front matter defaults with no type" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"defaults" => [{
|
|
"scope" => {
|
|
"path" => "win",
|
|
},
|
|
"values" => {
|
|
"key" => "val",
|
|
},
|
|
}]
|
|
)
|
|
|
|
@site.process
|
|
@affected = @site.posts.docs.find { |page| page.relative_path.include?("win") }
|
|
@not_affected = @site.pages.find { |page| page.relative_path == "about.html" }
|
|
end
|
|
|
|
should "affect only the specified path and all types" do
|
|
assert_equal "val", @affected.data["key"]
|
|
assert_nil @not_affected.data["key"]
|
|
end
|
|
end
|
|
|
|
context "A site with front matter defaults with no path and a deprecated type" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"defaults" => [{
|
|
"scope" => {
|
|
"type" => "page",
|
|
},
|
|
"values" => {
|
|
"key" => "val",
|
|
},
|
|
}]
|
|
)
|
|
|
|
@site.process
|
|
@affected = @site.pages
|
|
@not_affected = @site.posts.docs
|
|
end
|
|
|
|
should "affect only the specified type and all paths" do
|
|
assert_equal([], @affected.reject { |page| page.data["key"] == "val" })
|
|
assert_equal @not_affected.reject { |page| page.data["key"] == "val" },
|
|
@not_affected
|
|
end
|
|
end
|
|
|
|
context "A site with front matter defaults with no path" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"defaults" => [{
|
|
"scope" => {
|
|
"type" => "pages",
|
|
},
|
|
"values" => {
|
|
"key" => "val",
|
|
},
|
|
}]
|
|
)
|
|
@site.process
|
|
@affected = @site.pages
|
|
@not_affected = @site.posts.docs
|
|
end
|
|
|
|
should "affect only the specified type and all paths" do
|
|
assert_equal([], @affected.reject { |page| page.data["key"] == "val" })
|
|
assert_equal @not_affected.reject { |page| page.data["key"] == "val" },
|
|
@not_affected
|
|
end
|
|
end
|
|
|
|
context "A site with front matter defaults with no path or type" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"defaults" => [{
|
|
"scope" => {
|
|
},
|
|
"values" => {
|
|
"key" => "val",
|
|
},
|
|
}]
|
|
)
|
|
@site.process
|
|
@affected = @site.pages
|
|
@not_affected = @site.posts
|
|
end
|
|
|
|
should "affect all types and paths" do
|
|
assert_equal([], @affected.reject { |page| page.data["key"] == "val" })
|
|
assert_equal([], @not_affected.reject { |page| page.data["key"] == "val" })
|
|
end
|
|
end
|
|
|
|
context "A site with front matter defaults with no scope" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"defaults" => [{
|
|
"values" => {
|
|
"key" => "val",
|
|
},
|
|
}]
|
|
)
|
|
@site.process
|
|
@affected = @site.pages
|
|
@not_affected = @site.posts
|
|
end
|
|
|
|
should "affect all types and paths" do
|
|
assert_equal([], @affected.reject { |page| page.data["key"] == "val" })
|
|
assert_equal([], @not_affected.reject { |page| page.data["key"] == "val" })
|
|
end
|
|
end
|
|
|
|
context "A site with front matter defaults with quoted date" do
|
|
setup do
|
|
@site = Site.new(Jekyll.configuration(
|
|
"source" => source_dir,
|
|
"destination" => dest_dir,
|
|
"defaults" => [{
|
|
"values" => {
|
|
"date" => "2015-01-01 00:00:01",
|
|
},
|
|
}]
|
|
))
|
|
end
|
|
|
|
should "not raise error" do
|
|
@site.process
|
|
end
|
|
|
|
should "parse date" do
|
|
@site.process
|
|
date = Time.parse("2015-01-01 00:00:01")
|
|
assert(@site.pages.find { |page| page.data["date"] == date })
|
|
assert(@site.posts.find { |page| page.data["date"] == date })
|
|
end
|
|
end
|
|
end
|