test_url.rb
# frozen_string_literal: true
require "helper"
class TestURL < JekyllUnitTest
context "The URL class" do
should "throw an exception if neither permalink or template is specified" do
assert_raises ArgumentError do
URL.new(:placeholders => {})
end
end
should "replace placeholders in templates" do
assert_equal "/foo/bar", URL.new(
:template => "/:x/:y",
:placeholders => { :x => "foo", :y => "bar" }
).to_s
end
should "handle multiple of the same key in the template" do
assert_equal "/foo/bar/foo/", URL.new(
:template => "/:x/:y/:x/",
:placeholders => { :x => "foo", :y => "bar" }
).to_s
end
should "use permalink if given" do
assert_equal "/le/perma/link", URL.new(
:template => "/:x/:y",
:placeholders => { :x => "foo", :y => "bar" },
:permalink => "/le/perma/link"
).to_s
end
should "replace placeholders in permalinks" do
assert_equal "/foo/bar", URL.new(
:template => "/baz",
:permalink => "/:x/:y",
:placeholders => { :x => "foo", :y => "bar" }
).to_s
end
should "handle multiple of the same key in the permalink" do
assert_equal "/foo/bar/foo/", URL.new(
:template => "/baz",
:permalink => "/:x/:y/:x/",
:placeholders => { :x => "foo", :y => "bar" }
).to_s
end
should "handle nil values for keys in the template" do
assert_equal "/foo/bar/", URL.new(
:template => "/:x/:y/:z/",
:placeholders => { :x => "foo", :y => "bar", :z => nil }
).to_s
end
should "handle UrlDrop as a placeholder in addition to a hash" do
_, matching_doc = fixture_document("_methods/escape-+ #%20[].md")
assert_equal "/methods/escape-+-20/escape-20.html", URL.new(
:template => "/methods/:title/:name:output_ext",
:placeholders => matching_doc.url_placeholders
).to_s
end
should "check for key without trailing underscore" do
_, matching_doc = fixture_document("_methods/configuration.md")
assert_equal "/methods/configuration-configuration_methods_configuration", URL.new(
:template => "/methods/:name-:slug_:collection_:title",
:placeholders => matching_doc.url_placeholders
).to_s
end
should "raise custom error when URL placeholder doesn't have key" do
_, matching_doc = fixture_document("_methods/escape-+ #%20[].md")
assert_raises NoMethodError do
URL.new(
:template => "/methods/:headline",
:placeholders => matching_doc.url_placeholders
).to_s
end
end
end
end