lib/qeweney/mock_adapter.rb



# frozen_string_literal: true

module Qeweney
  class MockAdapter
    attr_reader :body, :headers, :calls

    def get_body_chunk(_req, _buffered_only)
      @request_body_chunks.shift
    end

    def get_body(_req)
      body = @request_body_chunks.join('')
      @request_body_chunks.clear
      body
    end

    def complete?(_req)
      @request_body_chunks.empty?
    end

    def initialize(request_body)
      case request_body
      when Array
        @request_body_chunks = request_body
      when nil
        @request_body_chunks = []
      else
        @request_body_chunks = [request_body]
      end
      @calls = []
    end

    def respond(req, body, headers)
      @calls << [:respond, req, body, headers]
      @body = body
      @headers = headers
    end

    def status
      headers[':status'] || Qeweney::Status::OK
    end

    def method_missing(sym, *args)
      calls << [sym, *args]
    end

    def self.mock(headers = {}, request_body = nil)
      headers[':method'] ||= ''
      headers[':path'] ||= ''
      Request.new(headers, new(request_body))
    end
  end
end