mirror of
https://github.com/graphql-python/graphene.git
synced 2024-11-28 20:43:57 +03:00
8e7d76bbce
* v3.0 - remove Python 2.x from build (#983) * Change travis to only compile for p3.6+ * Changed tox to only run Python 3.6+ * Changed library classifiers to reflect support in Python 3.6+ * Changed version to 3.0.0 development In [15]: get_version((3, 0, 0, "alpha", 0)) Out[15]: '3.0.dev20190601212304' * Reorganize Tests (#985) We no longer need a dedicated folder for Python3.6+ tests We no longer need to check six.PY3 in tests * Upgrade black to 19.3b0 (#987) * Remove six dependency (#986) * No one is using func_name * Remove six simple usages * Remove six requirement * Remove `six.with_metaclass` calls * pytest-asyncio should be a regular dependency now with Py3 move * Change dependency to graphql-core-next (#988) * Changed dependencies to core-next * Converted Scalars * ResolveInfo name change * Ignore .venv * Make Schema compatible with GraphQL-core-next * Ignore more venv names and mypy and pytest caches * Remove print statements for debugging in schema test * core-next now provides out_type and out_name * Adapt date and time scalar types to core-next * Ignore the non-standard result.invalid flag * Results are named tuples in core-next (immutable) * Enum values are returned as dict in core-next * Fix mutation tests with promises * Make all 345 tests pass with graphql-core-next * Remove the compat module which was only needed for older Py version * Remove object as base class (not needed in Py 3) * We can assume that dicts are ordered in Py 3.6+ * Make use of the fact that dicts are iterable * Use consistent style of importing from pytest * Restore compatibility with graphql-relay-py v3 Add adpaters for the PageInfo and Connection args. * Avoid various deprecation warnings * Use graphql-core 3 instead of graphql-core-next * Update dependencies, reformat changes with black * Update graphene/relay/connection.py Co-Authored-By: Jonathan Kim <jkimbo@gmail.com> * Run black on setup.py * Remove trailing whitespace
122 lines
2.7 KiB
Python
122 lines
2.7 KiB
Python
from pytest import mark
|
|
|
|
from graphql_relay.utils import base64
|
|
|
|
from graphene.types import ObjectType, Schema, String
|
|
from graphene.relay.connection import Connection, ConnectionField, PageInfo
|
|
from graphene.relay.node import Node
|
|
|
|
letter_chars = ["A", "B", "C", "D", "E"]
|
|
|
|
|
|
class Letter(ObjectType):
|
|
class Meta:
|
|
interfaces = (Node,)
|
|
|
|
letter = String()
|
|
|
|
|
|
class LetterConnection(Connection):
|
|
class Meta:
|
|
node = Letter
|
|
|
|
|
|
class Query(ObjectType):
|
|
letters = ConnectionField(LetterConnection)
|
|
connection_letters = ConnectionField(LetterConnection)
|
|
async_letters = ConnectionField(LetterConnection)
|
|
|
|
node = Node.Field()
|
|
|
|
def resolve_letters(self, info, **args):
|
|
return list(letters.values())
|
|
|
|
async def resolve_async_letters(self, info, **args):
|
|
return list(letters.values())
|
|
|
|
def resolve_connection_letters(self, info, **args):
|
|
return LetterConnection(
|
|
page_info=PageInfo(has_next_page=True, has_previous_page=False),
|
|
edges=[
|
|
LetterConnection.Edge(node=Letter(id=0, letter="A"), cursor="a-cursor")
|
|
],
|
|
)
|
|
|
|
|
|
schema = Schema(Query)
|
|
|
|
letters = {letter: Letter(id=i, letter=letter) for i, letter in enumerate(letter_chars)}
|
|
|
|
|
|
def edges(selected_letters):
|
|
return [
|
|
{
|
|
"node": {"id": base64("Letter:%s" % l.id), "letter": l.letter},
|
|
"cursor": base64("arrayconnection:%s" % l.id),
|
|
}
|
|
for l in [letters[i] for i in selected_letters]
|
|
]
|
|
|
|
|
|
def cursor_for(ltr):
|
|
letter = letters[ltr]
|
|
return base64("arrayconnection:%s" % letter.id)
|
|
|
|
|
|
def execute(args=""):
|
|
if args:
|
|
args = "(" + args + ")"
|
|
|
|
return schema.execute(
|
|
"""
|
|
{
|
|
letters%s {
|
|
edges {
|
|
node {
|
|
id
|
|
letter
|
|
}
|
|
cursor
|
|
}
|
|
pageInfo {
|
|
hasPreviousPage
|
|
hasNextPage
|
|
startCursor
|
|
endCursor
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
% args
|
|
)
|
|
|
|
|
|
@mark.asyncio
|
|
async def test_connection_async():
|
|
result = await schema.execute_async(
|
|
"""
|
|
{
|
|
asyncLetters(first:1) {
|
|
edges {
|
|
node {
|
|
id
|
|
letter
|
|
}
|
|
}
|
|
pageInfo {
|
|
hasPreviousPage
|
|
hasNextPage
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
)
|
|
|
|
assert not result.errors
|
|
assert result.data == {
|
|
"asyncLetters": {
|
|
"edges": [{"node": {"id": "TGV0dGVyOjA=", "letter": "A"}}],
|
|
"pageInfo": {"hasPreviousPage": False, "hasNextPage": True},
|
|
}
|
|
}
|