spec/cc/config/prepare_spec.rb (71 lines of code) (raw):
require "spec_helper"
describe CC::Config::Prepare do
describe ".from_data" do
it "returns a null object for no data" do
nil_prepare = described_class.from_data(nil)
empty_prepare = described_class.from_data({})
expect(nil_prepare.fetch.each.to_a).to eq([])
expect(empty_prepare.fetch.each.to_a).to eq([])
end
it "supports fetches declared as strings" do
prepare = described_class.from_data(
"fetch" => [
"https://example-1.com/foo.rb",
"https://example-2.com/foo/bar.rb",
],
)
expect(prepare.fetch.each.to_a).to match_array(
[
described_class::Fetch::Entry.new(
"https://example-1.com/foo.rb", "foo.rb",
),
described_class::Fetch::Entry.new(
"https://example-2.com/foo/bar.rb", "bar.rb",
),
],
)
end
it "supports fetches declared as objects" do
prepare = described_class.from_data(
"fetch" => [
{
"url" => "https://example-1.com/baz.rb",
"path" => "bat.rb",
},
{
"url" => "https://example-2.com/foo/quix.rb",
# no "path"
},
],
)
expect(prepare.fetch.each.to_a).to match_array(
[
described_class::Fetch::Entry.new(
"https://example-1.com/baz.rb", "bat.rb",
),
described_class::Fetch::Entry.new(
"https://example-2.com/foo/quix.rb", "quix.rb",
),
],
)
end
end
describe CC::Config::Prepare::Fetch::Entry do
it "prevents unsafe paths" do
expect { described_class.new("", nil) }.to raise_error(
ArgumentError, /blank/,
)
expect { described_class.new("", "") }.to raise_error(
ArgumentError, /blank/,
)
expect { described_class.new("", "/etc/password") }.to raise_error(
ArgumentError, /absolute/,
)
expect { described_class.new("", "./../etc/password") }.to raise_error(
ArgumentError, /outside/,
)
expect { described_class.new("http://google.com/.%2F..%2Fetc%2Fpassword") }.to raise_error(
ArgumentError, /outside/,
)
end
end
end