Sha256: 8348d439d5a5945c03db1a27237e2dcf9dd45aa4bb9d18477d16a773b7902bea

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

require 'ostruct'

module ResourceSet
  module Testing
    class ActionHandlerMatchers
      ResponseStub = Class.new(OpenStruct)

      attr_reader :action, :response_stub, :failure_message

      def initialize(action)
        @action = action
      end

      def with(options, &block)
        @response_stub = ResponseStub.new(options)
        @handled_block = block

        self
      end

      def matches?(subject, &block)
        @handled_block ||= block
        action = subject.resources.find_action(self.action)
        unless action
          @failure_message = "expected :#{self.action} to be handled by the class."
          return false
        end

        status_code = response_stub.status || 200
        unless action.handlers[status_code]
          @failure_message = "expected the #{status_code} status code to be handled by the class."
          return false
        end

        handled_response = action.handlers[status_code].call(response_stub)
        @handled_block.call(handled_response)

        true
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
resource_set-1.0.2 lib/resource_set/testing/action_handler_matchers.rb
resource_set-1.0.1 lib/resource_set/testing/action_handler_matchers.rb
resource_set-1.0.0 lib/resource_set/testing/action_handler_matchers.rb