# frozen_string_literal: true

require 'rspec/matchers'
require 'rspec/graphql_matchers/be_of_type'
require 'rspec/graphql_matchers/accept_arguments'
require 'rspec/graphql_matchers/accept_argument'
require 'rspec/graphql_matchers/have_a_field'
require 'rspec/graphql_matchers/implement'

module RSpec
  module Matchers
    def be_of_type(expected)
      RSpec::GraphqlMatchers::BeOfType.new(expected)
    end

    def accept_argument(expected_argument)
      RSpec::GraphqlMatchers::AcceptArgument.new(expected_argument)
    end

    def accept_arguments(expected_args)
      RSpec::GraphqlMatchers::AcceptArguments.new(expected_args)
    end

    # rubocop:disable Naming/PredicateName
    def have_a_field(field_name)
      RSpec::GraphqlMatchers::HaveAField.new(field_name)
    end
    alias have_field have_a_field

    def have_an_input_field(field_name)
      RSpec::GraphqlMatchers::HaveAField.new(field_name, :arguments)
    end
    alias have_input_field have_an_input_field

    def have_a_return_field(field_name)
      RSpec::GraphqlMatchers::HaveAField.new(field_name)
    end
    alias have_return_field have_a_return_field
    # rubocop:enable Naming/PredicateName

    def implement(*interface_names)
      RSpec::GraphqlMatchers::Implement.new(interface_names.flatten)
    end
  end
end
