def test_relay_node_field_resolver():
    data_source = InMemoryDataSource()

    R = TypeRegistry()
    Relay = R.Mixin(RelayMixin, data_source)

    class Pet(R.Implements[R.Node]):
        name = R.String

    class Query(R.ObjectType):
        pets = R.Pet.List
        node = Relay.NodeField

    schema = R.Schema(R.Query)

    data_source.add(Pet(id=5, name="Garfield"))
    data_source.add(Pet(id=6, name="Odis"))

    result = graphql(
        schema,
        """
    {
        node(id: "UGV0OjU=") {
            id,
            ... on Pet {
                name
            }
        }
    }
    """,
    )

    assert not result.errors
    assert result.data == {"node": {"id": "UGV0OjU=", "name": "Garfield"}}
def test_relay_node_field_resolver():
    data_source = InMemoryDataSource()

    R = TypeRegistry()
    Relay = R.Mixin(RelayMixin, data_source)

    class Pet(R.Implements[R.Node]):
        name = R.String

    class Query(R.ObjectType):
        pets = R.Pet.List
        node = Relay.NodeField

    schema = R.Schema(R.Query)

    data_source.add(Pet(id=5, name='Garfield'))
    data_source.add(Pet(id=6, name='Odis'))

    result = graphql(schema, '''
    {
        node(id: "UGV0OjU=") {
            id,
            ... on Pet {
                name
            }
        }
    }
    ''')

    assert not result.errors
    assert result.data == {'node': {'id': 'UGV0OjU=', 'name': 'Garfield'}}
from graphql.core import graphql
from epoxy.contrib.relay import RelayMixin
from epoxy.contrib.relay.data_source.memory import InMemoryDataSource
from epoxy.contrib.relay.utils import base64
from epoxy.registry import TypeRegistry

letter_chars = ['A', 'B', 'C', 'D', 'E']

data_source = InMemoryDataSource()

R = TypeRegistry()
Relay = R.Mixin(RelayMixin, data_source)


class Letter(R.Implements[Relay.Node]):
    letter = R.String


class Query(R.ObjectType):
    letters = Relay.Connection('Letter', R.Letter)
    node = Relay.NodeField


Schema = R.Schema(R.Query)

letters = {}
for i, letter in enumerate(letter_chars, 1):
    l = Letter(id=i, letter=letter)
    letters[letter] = l
    data_source.add(l)