require 'spec_helper' describe GraphQL::Relay::GlobalNodeIdentification do let(:node_identification) { NodeIdentification } describe 'NodeField' do it 'finds objects by id' do global_id = node_identification.to_global_id("Faction", "1") result = query(%|{ node(id: "#{global_id}") { id, ... on Faction { name ships(first: 1) { edges { node { name } } } } } }|) expected = {"data" => { "node"=>{ "id"=>"RmFjdGlvbi0x", "name"=>"Alliance to Restore the Republic", "ships"=>{ "edges"=>[ {"node"=>{ "name" => "X-Wing" } } ] } } }} assert_equal(expected, result) end end describe 'to_global_id / from_global_id ' do it 'Converts typename and ID to and from ID' do global_id = node_identification.to_global_id("SomeType", "123") type_name, id = node_identification.from_global_id(global_id) assert_equal("SomeType", type_name) assert_equal("123", id) end end describe "type_from_object" do describe "when the return value is not a BaseType" do it "raises an error " do err = assert_raises { GraphQL::Relay::GlobalNodeIdentification.instance.type_from_object(:test_error) } assert_includes err.message, "not_a_type (Symbol)" end end end describe 'making a second instance' do before do @first_instance = GraphQL::Relay::GlobalNodeIdentification.instance end after do GraphQL::Relay::GlobalNodeIdentification.instance = @first_instance end it 'overrides the first instance' do GraphQL::Relay::GlobalNodeIdentification.define {} second_instance = GraphQL::Relay::GlobalNodeIdentification.instance refute_equal(@first_instance, second_instance) end end end