# frozen_string_literal: true require 'rails_helper' RSpec.describe Resolvers::PokemonResolver, type: :graphql do subject { described_class.new(object: nil, context: {}) } after do # We need to make sure class instance variables are unset between runs. Resolvers::BaseResolver.instance_variable_set '@plurals', nil end it { is_expected.to have_graphql_arguments( :id, :ids, :iid, :iids, :pokedex_number, :pokedex_numbers, :nickname, :nicknames, ) } describe '#resolve' do let!(:pokemon1) { create(:pokemon, nickname: 'Bulbasaur', pokedex_number: 1) } let!(:pokemon2) { create(:pokemon, nickname: 'Bulbasaur', pokedex_number: 1) } let!(:pokemon3) { create(:pokemon, nickname: 'Charizard', pokedex_number: 6) } let!(:pokemon4) { create(:pokemon, nickname: 'Pikachu', pokedex_number: 25) } it 'selects by id' do id = GraphQL::Schema::UniqueWithinType.encode(Types::PokemonType.name, pokemon1.id) res = resolve(described_class, args: {id: id}) expect(res).to contain_exactly(pokemon1) id = GraphQL::Schema::UniqueWithinType.encode(Types::PokemonType.name, pokemon2.id) res = resolve(described_class, args: {id: id}) expect(res).to contain_exactly(pokemon2) end it 'selects by id when given iid' do iid = pokemon1.id res = resolve(described_class, args: {iid: iid}) expect(res).to contain_exactly(pokemon1) iid = pokemon2.id res = resolve(described_class, args: {iid: iid}) expect(res).to contain_exactly(pokemon2) end it 'selects by nickname' do nickname = pokemon1.nickname res = resolve(described_class, args: {nickname: nickname}) expect(res).to contain_exactly(pokemon1, pokemon2) nickname = pokemon3.nickname res = resolve(described_class, args: {nickname: nickname}) expect(res).to contain_exactly(pokemon3) end it 'selects by pokedex_number' do pkdx = pokemon1.pokedex_number res = resolve(described_class, args: {pokedex_number: pkdx}) expect(res).to contain_exactly(pokemon1, pokemon2) pkdx = pokemon4.pokedex_number res = resolve(described_class, args: {pokedex_number: pkdx}) expect(res).to contain_exactly(pokemon4) end end end