Files
news.gitea.happylizard.me/bin/gems/ethon-0.16.0/spec/ethon/easy_spec.rb
T
pizza2d1 4cee170d66
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 9s
Add bin and edit workflow
2026-09-16 13:11:16 -06:00

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