RSpec.describe HTTP::Response::IoBody do
  subject(:body) { described_class.new StringIO.new("Hello, World!") }

  it "has the content" do
    expect(subject.to_s).to eq "Hello, World!"
  end

  context "when body empty" do
    subject(:body) { described_class.new StringIO.new("") }

    it "returns responds to empty? with true" do
      expect(subject).to be_empty
    end
  end

  describe "#readpartial" do
    context "with size given" do
      it "returns only that amount" do
        expect(body.readpartial(4)).to eq "Hell"
      end
    end

    context "without size given" do
      it "returns parts of the content" do
        expect(body.readpartial).to eq "Hello, World!"
      end
    end
  end

  describe "#each" do
    it "yields successive parts of the content" do
      expect { |b| body.each(&b) }.to yield_with_args "Hello, World!"
    end
  end
end
