This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# frozen_string_literal: true
|
||||
require 'spec_helper'
|
||||
|
||||
describe Ethon::Easy::ResponseCallbacks do
|
||||
let(:easy) { Ethon::Easy.new }
|
||||
|
||||
[:on_complete, :on_headers, :on_body, :on_progress].each do |callback_type|
|
||||
describe "##{callback_type}" do
|
||||
it "responds" do
|
||||
expect(easy).to respond_to("#{callback_type}")
|
||||
end
|
||||
|
||||
context "when no block given" do
|
||||
it "returns @#{callback_type}" do
|
||||
expect(easy.send("#{callback_type}")).to eq([])
|
||||
end
|
||||
end
|
||||
|
||||
context "when block given" do
|
||||
it "stores" do
|
||||
easy.send(callback_type) { p 1 }
|
||||
expect(easy.instance_variable_get("@#{callback_type}").size).to eq(1)
|
||||
end
|
||||
end
|
||||
|
||||
context "when multiple blocks given" do
|
||||
it "stores" do
|
||||
easy.send(callback_type) { p 1 }
|
||||
easy.send(callback_type) { p 2 }
|
||||
expect(easy.instance_variable_get("@#{callback_type}").size).to eq(2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#complete" do
|
||||
before do
|
||||
easy.on_complete {|r| String.new(r.url) }
|
||||
end
|
||||
|
||||
it "executes blocks and passes self" do
|
||||
expect(String).to receive(:new).with(easy.url)
|
||||
easy.complete
|
||||
end
|
||||
|
||||
context "when @on_complete nil" do
|
||||
it "doesn't raise" do
|
||||
easy.instance_variable_set(:@on_complete, nil)
|
||||
expect{ easy.complete }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#headers" do
|
||||
before do
|
||||
easy.on_headers {|r| String.new(r.url) }
|
||||
end
|
||||
|
||||
it "executes blocks and passes self" do
|
||||
expect(String).to receive(:new).with(easy.url)
|
||||
easy.headers
|
||||
end
|
||||
|
||||
context "when @on_headers nil" do
|
||||
it "doesn't raise" do
|
||||
easy.instance_variable_set(:@on_headers, nil)
|
||||
expect{ easy.headers }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#progress" do
|
||||
context "when requesting for realz" do
|
||||
it "executes callback" do
|
||||
post = Ethon::Easy::Http::Post.new("http://localhost:3001", {:body => "bar=fu"})
|
||||
post.setup(easy)
|
||||
@called = false
|
||||
@has_dltotal = false
|
||||
@has_ultotal = false
|
||||
easy.on_progress { @called = true }
|
||||
easy.on_progress { |dltotal, _, _, _| @has_dltotal ||= true }
|
||||
easy.on_progress { |_, _, ultotal, _| @has_ultotal ||= true }
|
||||
easy.perform
|
||||
expect(@called).to be true
|
||||
expect(@has_dltotal).to be true
|
||||
expect(@has_ultotal).to be true
|
||||
end
|
||||
end
|
||||
|
||||
context "when pretending" do
|
||||
before do
|
||||
@dltotal = nil
|
||||
@dlnow = nil
|
||||
@ultotal = nil
|
||||
@ulnow = nil
|
||||
easy.on_progress { |dltotal, dlnow, ultotal, ulnow| @dltotal = dltotal ; @dlnow = dlnow; @ultotal = ultotal; @ulnow = ulnow }
|
||||
end
|
||||
|
||||
it "executes blocks and passes dltotal" do
|
||||
easy.progress(1, 2, 3, 4)
|
||||
expect(@dltotal).to eq(1)
|
||||
end
|
||||
|
||||
it "executes blocks and passes dlnow" do
|
||||
easy.progress(1, 2, 3, 4)
|
||||
expect(@dlnow).to eq(2)
|
||||
end
|
||||
|
||||
it "executes blocks and passes ultotal" do
|
||||
easy.progress(1, 2, 3, 4)
|
||||
expect(@ultotal).to eq(3)
|
||||
end
|
||||
|
||||
it "executes blocks and passes ulnow" do
|
||||
easy.progress(1, 2, 3, 4)
|
||||
expect(@ulnow).to eq(4)
|
||||
end
|
||||
|
||||
context "when @on_progress nil" do
|
||||
it "doesn't raise" do
|
||||
easy.instance_variable_set(:@on_progress, nil)
|
||||
expect{ easy.progress(1, 2, 3, 4) }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#body" do
|
||||
before do
|
||||
@chunk = nil
|
||||
@r = nil
|
||||
easy.on_body { |chunk, r| @chunk = chunk ; @r = r }
|
||||
end
|
||||
|
||||
it "executes blocks and passes self" do
|
||||
easy.body("the chunk")
|
||||
expect(@r).to be(easy)
|
||||
end
|
||||
|
||||
it "executes blocks and passes chunk" do
|
||||
easy.body("the chunk")
|
||||
expect(@chunk).to eq("the chunk")
|
||||
end
|
||||
|
||||
context "when @on_body nil" do
|
||||
it "doesn't raise" do
|
||||
easy.instance_variable_set(:@on_body, nil)
|
||||
expect{ easy.body("the chunk") }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user