1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
# frozen_string_literal: true
RSpec.describe HTTP::Features::Instrumentation do
subject(:feature) { HTTP::Features::Instrumentation.new(:instrumenter => instrumenter) }
let(:instrumenter) { TestInstrumenter.new }
describe "logging the request" do
let(:request) do
HTTP::Request.new(
:verb => :post,
:uri => "https://example.com/",
:headers => {:accept => "application/json"},
:body => '{"hello": "world!"}'
)
end
it "should log the request" do
feature.wrap_request(request)
expect(instrumenter.output[:start]).to eq(:request => request)
end
end
describe "logging the response" do
let(:response) do
HTTP::Response.new(
:version => "1.1",
:uri => "https://example.com",
:status => 200,
:headers => {:content_type => "application/json"},
:body => '{"success": true}'
)
end
it "should log the response" do
feature.wrap_response(response)
expect(instrumenter.output[:finish]).to eq(:response => response)
end
end
class TestInstrumenter < HTTP::Features::Instrumentation::NullInstrumenter
attr_reader :output
def initialize
@output = {}
end
def start(_name, payload)
output[:start] = payload
end
def finish(_name, payload)
output[:finish] = payload
end
end
end
|