pokemon_resolver_spec.rb 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # frozen_string_literal: true
  2. require 'rails_helper'
  3. RSpec.describe Resolvers::PokemonResolver, type: :graphql do
  4. subject { described_class.new(object: nil, context: {}) }
  5. after do
  6. # We need to make sure class instance variables are unset between runs.
  7. Resolvers::BaseResolver.instance_variable_set '@plurals', nil
  8. end
  9. it {
  10. is_expected.to have_graphql_arguments(
  11. :id,
  12. :ids,
  13. :iid,
  14. :iids,
  15. :pokedex_number,
  16. :pokedex_numbers,
  17. :nickname,
  18. :nicknames,
  19. )
  20. }
  21. describe '#resolve' do
  22. let!(:pkmn1) { create(:pokemon, nickname: 'Bulbasaur', pokedex_number: 1) }
  23. let!(:pkmn2) { create(:pokemon, nickname: 'Bulbasaur', pokedex_number: 1) }
  24. let!(:pkmn3) { create(:pokemon, nickname: 'Charizard', pokedex_number: 6) }
  25. let!(:pkmn4) { create(:pokemon, nickname: 'Pikachu', pokedex_number: 25) }
  26. it 'selects by id' do
  27. id = GraphQL::Schema::UniqueWithinType
  28. .encode(Types::PokemonType.name, pkmn1.id)
  29. res = resolve(described_class, args: {id: id})
  30. expect(res).to contain_exactly(pkmn1)
  31. id = GraphQL::Schema::UniqueWithinType
  32. .encode(Types::PokemonType.name, pkmn2.id)
  33. res = resolve(described_class, args: {id: id})
  34. expect(res).to contain_exactly(pkmn2)
  35. end
  36. it 'selects by id when given iid' do
  37. iid = pkmn1.id
  38. res = resolve(described_class, args: {iid: iid})
  39. expect(res).to contain_exactly(pkmn1)
  40. iid = pkmn2.id
  41. res = resolve(described_class, args: {iid: iid})
  42. expect(res).to contain_exactly(pkmn2)
  43. end
  44. it 'selects by nickname' do
  45. nickname = pkmn1.nickname
  46. res = resolve(described_class, args: {nickname: nickname})
  47. expect(res).to contain_exactly(pkmn1, pkmn2)
  48. nickname = pkmn3.nickname
  49. res = resolve(described_class, args: {nickname: nickname})
  50. expect(res).to contain_exactly(pkmn3)
  51. end
  52. it 'selects by pokedex_number' do
  53. pkdx = pkmn1.pokedex_number
  54. res = resolve(described_class, args: {pokedex_number: pkdx})
  55. expect(res).to contain_exactly(pkmn1, pkmn2)
  56. pkdx = pkmn4.pokedex_number
  57. res = resolve(described_class, args: {pokedex_number: pkdx})
  58. expect(res).to contain_exactly(pkmn4)
  59. end
  60. end
  61. end