From c961f0b3c60c3a7a6223d5218c912d69585aef5c Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Sat, 1 Oct 2016 11:52:31 -0700 Subject: [PATCH] Fixed ConnectionField arguments overwritten. Fixed #252 --- graphene/relay/connection.py | 8 +++--- graphene/relay/tests/test_connection.py | 33 +++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/graphene/relay/connection.py b/graphene/relay/connection.py index 67ccea50..e63478e5 100644 --- a/graphene/relay/connection.py +++ b/graphene/relay/connection.py @@ -95,13 +95,13 @@ class Connection(six.with_metaclass(ConnectionMeta, ObjectType)): class IterableConnectionField(Field): def __init__(self, type, *args, **kwargs): + kwargs.setdefault('before', String()) + kwargs.setdefault('after', String()) + kwargs.setdefault('first', Int()) + kwargs.setdefault('last', Int()) super(IterableConnectionField, self).__init__( type, *args, - before=String(), - after=String(), - first=Int(), - last=Int(), **kwargs ) diff --git a/graphene/relay/tests/test_connection.py b/graphene/relay/tests/test_connection.py index d2279254..18d890c1 100644 --- a/graphene/relay/tests/test_connection.py +++ b/graphene/relay/tests/test_connection.py @@ -1,6 +1,6 @@ -from ...types import AbstractType, Field, List, NonNull, ObjectType, String -from ..connection import Connection, PageInfo +from ...types import AbstractType, Field, List, NonNull, ObjectType, String, Argument, Int +from ..connection import Connection, PageInfo, ConnectionField from ..node import Node @@ -109,3 +109,32 @@ def test_pageinfo(): assert PageInfo._meta.name == 'PageInfo' fields = PageInfo._meta.fields assert list(fields.keys()) == ['has_next_page', 'has_previous_page', 'start_cursor', 'end_cursor'] + + +def test_connectionfield(): + class MyObjectConnection(Connection): + class Meta: + node = MyObject + + field = ConnectionField(MyObjectConnection) + assert field.args == { + 'before': Argument(String), + 'after': Argument(String), + 'first': Argument(Int), + 'last': Argument(Int), + } + + +def test_connectionfield_custom_args(): + class MyObjectConnection(Connection): + class Meta: + node = MyObject + + field = ConnectionField(MyObjectConnection, before=String(required=True), extra=String()) + assert field.args == { + 'before': Argument(NonNull(String)), + 'after': Argument(String), + 'first': Argument(Int), + 'last': Argument(Int), + 'extra': Argument(String), + }