Douglas Eichelberger 9075cbae62 brew style --fix
2023-04-21 09:58:50 -07:00

79 lines
2.1 KiB
Ruby

# frozen_string_literal: true
require "download_strategy"
describe CurlPostDownloadStrategy do
subject(:strategy) { described_class.new(url, name, version, **specs) }
let(:name) { "foo" }
let(:url) { "https://example.com/foo.tar.gz" }
let(:version) { "1.2.3" }
let(:specs) { {} }
let(:head_response) do
<<~HTTP
HTTP/1.1 200\r
Content-Disposition: attachment; filename="foo.tar.gz"
HTTP
end
describe "#fetch" do
before do
allow(strategy).to receive(:system_command)
.with(
/curl/,
hash_including(args: array_including("--head")),
)
.twice
.and_return(instance_double(
SystemCommand::Result,
success?: true,
exit_status: instance_double(Process::Status, exitstatus: 0),
stdout: head_response,
))
strategy.temporary_path.dirname.mkpath
FileUtils.touch strategy.temporary_path
end
context "with :using and :data specified" do
let(:specs) do
{
using: :post,
data: {
form: "data",
is: "good",
},
}
end
it "adds the appropriate curl args" do
expect(strategy).to receive(:system_command)
.with(
/curl/,
hash_including(args: array_including_cons("-d", "form=data").and(array_including_cons("-d", "is=good"))),
)
.at_least(:once)
.and_return(instance_double(SystemCommand::Result, success?: true, stdout: "", assert_success!: nil))
strategy.fetch
end
end
context "with :using but no :data" do
let(:specs) { { using: :post } }
it "adds the appropriate curl args" do
expect(strategy).to receive(:system_command)
.with(
/curl/,
hash_including(args: array_including_cons("-X", "POST")),
)
.at_least(:once)
.and_return(instance_double(SystemCommand::Result, success?: true, stdout: "", assert_success!: nil))
strategy.fetch
end
end
end
end