Sha256: f7e4cffd9f4cfd5c0d1cc931afe36d1e8acf7959126d01152180158495b67e7d

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

class TestRunner
  include MessageDriver::Client
  include RSpec::Matchers

  attr_accessor :raised_error
  attr_accessor :current_feature_file
  attr_accessor :broker_name

  def broker_name
    @broker_name ||= MessageDriver::Broker::DEFAULT_BROKER_NAME
  end

  def run_config_code(src)
    instance_eval(src, current_feature_file)
  end

  def run_test_code(src)
    begin
      instance_eval(src, current_feature_file)
    rescue => e
      @raised_error = e
    end
  end

  def fetch_messages(destination_name)
    destination = fetch_destination(destination_name)
    pause_if_needed
    result = []
    begin
      msg = destination.pop_message
      result << msg unless msg.nil?
    end until msg.nil?
    result
  end

  def purge_destination(destination_name)
    destination = fetch_destination(destination_name)
    if destination.respond_to? :purge
      destination.purge
    else
      fetch_messages(destination)
    end
  end

  def fetch_destination(destination)
    case destination
    when String, Symbol
      MessageDriver::Client[self.broker_name].find_destination(destination)
    when MessageDriver::Destination::Base
      destination
    else
      raise "didn't understand destination #{destination.inspect}"
    end
  end

  def publish_table_to_destination(destination, table)
    table.hashes.each do |msg|
      destination.publish(msg[:body], msg[:headers]||{}, msg[:properties]||{})
    end
  end

  def pause_if_needed(seconds=0.1)
    seconds *= 10 if ENV['CI'] == 'true'
    case BrokerConfig.current_adapter
    when :in_memory
    else
      sleep seconds
    end
  end
end

module KnowsMyTestRunner
  def test_runner
    @test_runner ||= TestRunner.new
  end
end

World(KnowsMyTestRunner)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
message-driver-0.3.0 features/support/test_runner.rb