Sha256: 108327053addd0bae576c67597c61d855c5cdc95ba4271a8a5a1fbd8ae00b313

Contents?: true

Size: 1.71 KB

Versions: 7

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

require 'hermes_messenger_of_the_gods/testing/array_endpoint'
require 'timeout'

module HermesMessengerOfTheGods
  module Testing
    module RSpecHelpers
      def mock_endpoints
        @mock_endpoints ||= Hash.new { |h, k| h[k] = {} }
      end

      def reset_all_mock_endpoints
        mock_endpoints.values.map(&:values).flatten.map(&:teardown)
        @mock_endpoints = nil
      end

      def fake_endpoint(type, endpoint, *args)
        klass = "HermesMessengerOfTheGods::Endpoints::#{type.to_s.camelize}".constantize

        allow(HermesMessengerOfTheGods::EndpointBuilder).to receive(:build)
          .with(anything, klass, endpoint, any_args) do |_, _, _, *new_args|
          build_fake_endpoint(klass, endpoint, *new_args)
        end

        build_fake_endpoint(klass, endpoint, *args)
      end

      def build_fake_endpoint(klass, endpoint, *args)
        endpoint = endpoint.to_s
        raise 'Endpoint required' if endpoint == ''

        mock_endpoints[klass][endpoint]&.options&.merge!(*args)
        mock_endpoints[klass][endpoint] ||= Endpoints::Local.new(endpoint, "#{klass}::#{endpoint}", *args)
        mock_endpoints[klass][endpoint]
      end

      def setup_for_fake_endpoints!
        allow(HermesMessengerOfTheGods::EndpointBuilder).to receive(:build)
          .and_call_original
      end

      def fake_all_endpoints!
        allow(HermesMessengerOfTheGods::EndpointBuilder).to receive(:build) do |_, klass, endpoint, *args|
          build_fake_endpoint(klass, endpoint, *args)
        end
      end
    end
  end
end

if defined?(RSpec)
  RSpec.configure do |config|
    config.before(:each) do
      setup_for_fake_endpoints!
      reset_all_mock_endpoints
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
hermes_messenger_of_the_gods-3.0.1 lib/hermes_messenger_of_the_gods/testing/rspec_helpers.rb
hermes_messenger_of_the_gods-3.0.0 lib/hermes_messenger_of_the_gods/testing/rspec_helpers.rb
hermes_messenger_of_the_gods-3.0.0.rc5 lib/hermes_messenger_of_the_gods/testing/rspec_helpers.rb
hermes_messenger_of_the_gods-3.0.0.rc4 lib/hermes_messenger_of_the_gods/testing/rspec_helpers.rb
hermes_messenger_of_the_gods-3.0.0.rc3 lib/hermes_messenger_of_the_gods/testing/rspec_helpers.rb
hermes_messenger_of_the_gods-3.0.0.rc2 lib/hermes_messenger_of_the_gods/testing/rspec_helpers.rb
hermes_messenger_of_the_gods-3.0.0.rc1 lib/hermes_messenger_of_the_gods/testing/rspec_helpers.rb