Sha256: faac936316444bcefdf5957157d41299034136fdbc816842f2e9b7eff2f65d1c

Contents?: true

Size: 2 KB

Versions: 2

Compression:

Stored size: 2 KB

Contents

require_relative 'test_case'

module Tochtli
  module Test
    module Controller
      module ControllerClassSupport
        def included(base)
          super
          base.class_eval do
            extend Uber::InheritableAttr
            inheritable_attr :controller_class

            def self.tests(controller_class)
              self.controller_class = controller_class
            end
          end
        end
      end

      extend UnitTestSupport if defined?(::Test::Unit)
      extend ControllerClassSupport
      include Tochtli::Test::Helpers

      class RoutingNotFound < StandardError
      end


      def before_setup
        super
        @cache  = Object.const_defined?(:ActiveSupport) ? ActiveSupport::Cache::MemoryStore.new : Tochtli::Test::MemoryCache.new
        @logger = Tochtli.logger
        self.class.controller_class.setup(@connection, @cache, @logger)
        @dispatcher = self.class.controller_class.dispatcher
        @message_index = 0
      end

      def after_teardown
        self.class.controller_class.stop
        super
      end

      def publish(message)
        @message_index += 1
        delivery_info  = TestDeliveryInfo.new(message.routing_key)
        properties     = TestMessageProperties.new("test.reply", @message_index)
        payload        = message.to_json

        @message, @reply = nil

        unless @dispatcher.process_message(delivery_info, properties, payload, {})
          if (reply = @connection.publications.first) && reply[:message].is_a?(Tochtli::ErrorMessage)
            raise "Process error: #{reply[:message].message}"
          else
            raise RoutingNotFound, "Message #{message.class.name} not processed by #{self.class.controller_class} - #{message.inspect}."
          end
        end

        reply = @connection.publications.first
        if reply && reply[:routing_key] == "test.reply" && reply[:correlation_id] == @message_index
          @connection.publications.shift
          @reply = reply[:message]
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tochtli-0.5.1 lib/tochtli/test/controller.rb
tochtli-0.5.0 lib/tochtli/test/controller.rb