mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
79 lines
2.1 KiB
Ruby
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
|