# 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!(:pkmn1) { create(:pokemon, nickname: 'Bulbasaur', pokedex_number: 1) } let!(:pkmn2) { create(:pokemon, nickname: 'Bulbasaur', pokedex_number: 1) } let!(:pkmn3) { create(:pokemon, nickname: 'Charizard', pokedex_number: 6) } let!(:pkmn4) { create(:pokemon, nickname: 'Pikachu', pokedex_number: 25) } it 'selects by id' do id = GraphQL::Schema::UniqueWithinType .encode(Types::PokemonType.name, pkmn1.id) res = resolve(described_class, args: {id: id}) expect(res).to contain_exactly(pkmn1) id = GraphQL::Schema::UniqueWithinType .encode(Types::PokemonType.name, pkmn2.id) res = resolve(described_class, args: {id: id}) expect(res).to contain_exactly(pkmn2) end it 'selects by id when given iid' do iid = pkmn1.id res = resolve(described_class, args: {iid: iid}) expect(res).to contain_exactly(pkmn1) iid = pkmn2.id res = resolve(described_class, args: {iid: iid}) expect(res).to contain_exactly(pkmn2) end it 'selects by nickname' do nickname = pkmn1.nickname res = resolve(described_class, args: {nickname: nickname}) expect(res).to contain_exactly(pkmn1, pkmn2) nickname = pkmn3.nickname res = resolve(described_class, args: {nickname: nickname}) expect(res).to contain_exactly(pkmn3) end it 'selects by pokedex_number' do pkdx = pkmn1.pokedex_number res = resolve(described_class, args: {pokedex_number: pkdx}) expect(res).to contain_exactly(pkmn1, pkmn2) pkdx = pkmn4.pokedex_number res = resolve(described_class, args: {pokedex_number: pkdx}) expect(res).to contain_exactly(pkmn4) end end end