Sha256: 1db9201bf4d89907c69aede8261ac108c98b58c6431e32abba4d79a9a4eea4dd

Contents?: true

Size: 1.41 KB

Versions: 6

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

require 'active_support/core_ext/module/attribute_accessors'

module Artemis
  module Adapters
    class TestAdapter
      cattr_accessor :requests
      self.requests = []

      cattr_accessor :responses
      self.responses = []

      Request = Struct.new(:document, :operation_name, :variables, :context)
      Multiplex = Struct.new(:queries, :context)

      private_constant :Request, :Multiplex

      def initialize(*)
      end

      def multiplex(queries, context: {})
        self.requests << Multiplex.new(queries, context)

        queries.map do |query|
          result = responses.detect do |mock|
            query[:operationName] == mock.operation_name && (mock.arguments == :__unspecified__ || query[:variables] == mock.arguments)
          end

          result&.data || fake_response
        end
      end

      def execute(**arguments)
        self.requests << Request.new(*arguments.values_at(:document, :operation_name, :variables, :context))

        response = responses.detect do |mock|
          arguments[:operation_name] == mock.operation_name && (mock.arguments == :__unspecified__ || arguments[:variables] == mock.arguments)
        end

        response&.data || fake_response
      end

      private

      def fake_response
        {
          'data' => { 'test' => 'data' },
          'errors' => [],
          'extensions' => {}
        }
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
artemis-1.1.0 lib/artemis/adapters/test_adapter.rb
artemis-1.0.2 lib/artemis/adapters/test_adapter.rb
artemis-1.0.0 lib/artemis/adapters/test_adapter.rb
artemis-0.9.0 lib/artemis/adapters/test_adapter.rb
artemis-0.8.0 lib/artemis/adapters/test_adapter.rb
artemis-0.7.0 lib/artemis/adapters/test_adapter.rb