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
 | 
