204 lines
5.2 KiB
Ruby
204 lines
5.2 KiB
Ruby
# frozen_string_literal: true
|
|
require 'spec_helper'
|
|
|
|
describe Ethon::Easy do
|
|
let(:easy) { Ethon::Easy.new }
|
|
|
|
describe ".new" do
|
|
it "inits curl" do
|
|
expect(Ethon::Curl).to receive(:init)
|
|
easy
|
|
end
|
|
|
|
context "when options are empty" do
|
|
it "sets only callbacks" do
|
|
expect_any_instance_of(Ethon::Easy).to receive(:set_callbacks)
|
|
expect(Ethon::Easy).to receive(:set_option).never
|
|
easy
|
|
end
|
|
end
|
|
|
|
context "when options not empty" do
|
|
context "when followlocation is set" do
|
|
let(:options) { { :followlocation => true } }
|
|
let(:easy) { Ethon::Easy.new(options) }
|
|
|
|
it "sets followlocation" do
|
|
expect_any_instance_of(Ethon::Easy).to receive(:set_callbacks)
|
|
expect(Ethon::Curl).to receive(:set_option).with(:followlocation, true, anything)
|
|
easy
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#set_attributes" do
|
|
context "when options are empty" do
|
|
it "sets only callbacks" do
|
|
expect_any_instance_of(Ethon::Easy).to receive(:set_callbacks)
|
|
expect(Ethon::Easy).to receive(:set_option).never
|
|
easy
|
|
end
|
|
end
|
|
|
|
context "when options aren't empty" do
|
|
context "when valid key" do
|
|
it "sets" do
|
|
expect(easy).to receive(:verbose=).with(true)
|
|
easy.set_attributes({:verbose => true})
|
|
end
|
|
end
|
|
|
|
context "when invalid key" do
|
|
it "raises invalid option error" do
|
|
expect{ easy.set_attributes({:fubar => 1}) }.to raise_error(Ethon::Errors::InvalidOption)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#reset" do
|
|
before { easy.url = "www.example.com" }
|
|
|
|
it "resets url" do
|
|
easy.reset
|
|
expect(easy.url).to be_nil
|
|
end
|
|
|
|
it "resets escape?" do
|
|
easy.escape = false
|
|
easy.reset
|
|
expect(easy.escape?).to be_truthy
|
|
end
|
|
|
|
it "resets hash" do
|
|
easy.reset
|
|
expect(easy.instance_variable_get(:@hash)).to be_nil
|
|
end
|
|
|
|
it "resets easy handle" do
|
|
expect(Ethon::Curl).to receive(:easy_reset)
|
|
easy.reset
|
|
end
|
|
|
|
it "resets on_complete" do
|
|
easy.on_complete { p 1 }
|
|
easy.reset
|
|
expect(easy.on_complete).to be_empty
|
|
end
|
|
|
|
it "resets on_headers" do
|
|
easy.on_headers { p 1 }
|
|
easy.reset
|
|
expect(easy.on_headers).to be_empty
|
|
end
|
|
|
|
it "resets on_body" do
|
|
easy.on_body { p 1 }
|
|
easy.reset
|
|
expect(easy.on_body).to be_empty
|
|
end
|
|
end
|
|
|
|
describe "#dup" do
|
|
let!(:easy) do
|
|
easy = Ethon::Easy.new
|
|
easy.url = "http://localhost:3001/"
|
|
easy.on_complete { 'on_complete' }
|
|
easy.on_headers { 'on_headers' }
|
|
easy.on_progress { 'on_progress' }
|
|
easy.response_body = String.new('test_body')
|
|
easy.response_headers = String.new('test_headers')
|
|
easy
|
|
end
|
|
let!(:e) { easy.dup }
|
|
|
|
it "sets a new handle" do
|
|
expect(e.handle).not_to eq(easy.handle)
|
|
end
|
|
|
|
it "preserves url" do
|
|
expect(e.url).to eq(easy.url)
|
|
end
|
|
|
|
it "preserves on_complete callback" do
|
|
expect(e.on_complete).to be(easy.on_complete)
|
|
end
|
|
|
|
it "preserves on_headers callback" do
|
|
expect(e.on_headers).to be(easy.on_headers)
|
|
end
|
|
|
|
it 'preserves body_write_callback of original handle' do
|
|
expect { easy.perform }.to change { easy.response_body }
|
|
expect { easy.perform }.not_to change { e.response_body }
|
|
end
|
|
|
|
it "preserves on_progress callback" do
|
|
expect(e.on_progress).to be(easy.on_progress)
|
|
end
|
|
|
|
it 'sets new body_write_callback of duplicated handle' do
|
|
expect { e.perform }.to change { e.response_body }
|
|
expect { e.perform }.not_to change { easy.response_body }
|
|
end
|
|
|
|
it 'preserves headers_write_callback of original handle' do
|
|
expect { easy.perform }.to change { easy.response_headers }
|
|
expect { easy.perform }.not_to change { e.response_headers }
|
|
end
|
|
|
|
it 'sets new headers_write_callback of duplicated handle' do
|
|
expect { e.perform }.to change { e.response_headers }
|
|
expect { e.perform }.not_to change { easy.response_headers }
|
|
end
|
|
|
|
it "resets response_body" do
|
|
expect(e.response_body).to be_empty
|
|
end
|
|
|
|
it "resets response_headers" do
|
|
expect(e.response_headers).to be_empty
|
|
end
|
|
|
|
it "sets response_body for duplicated Easy" do
|
|
e.perform
|
|
expect(e.response_body).not_to be_empty
|
|
end
|
|
|
|
it "sets response_headers for duplicated Easy" do
|
|
e.perform
|
|
expect(e.response_headers).not_to be_empty
|
|
end
|
|
|
|
it "preserves response_body for original Easy" do
|
|
e.perform
|
|
expect(easy.response_body).to eq('test_body')
|
|
end
|
|
|
|
it "preserves response_headers for original Easy" do
|
|
e.perform
|
|
expect(easy.response_headers).to eq('test_headers')
|
|
end
|
|
end
|
|
|
|
describe "#mirror" do
|
|
it "returns a Mirror" do
|
|
expect(easy.mirror).to be_a(Ethon::Easy::Mirror)
|
|
end
|
|
|
|
it "builds from easy" do
|
|
expect(Ethon::Easy::Mirror).to receive(:from_easy).with(easy)
|
|
easy.mirror
|
|
end
|
|
end
|
|
|
|
describe "#log_inspect" do
|
|
[ :url, :response_code, :return_code, :total_time ].each do |name|
|
|
it "contains #{name}" do
|
|
expect(easy.log_inspect).to match name.to_s
|
|
end
|
|
end
|
|
end
|
|
end
|