예제 #1
0
def test_uses_default_for_optional_types_when_nothing_is_passed():
    @strawberry.input
    class Number:
        value: int

    @strawberry.input
    class Input:
        numbers: Optional[Number] = UNSET
        numbers_second: Optional[Number] = UNSET

    # case 1
    args = {"input": {}}

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(Input),
        ),
    ]

    assert convert_arguments(args, arguments) == {"input": Input(UNSET, UNSET)}

    # case 2
    args = {"input": {"numbersSecond": None}}

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(Input),
        ),
    ]

    assert convert_arguments(args, arguments) == {"input": Input(UNSET, None)}
def test_uses_default_for_optional_types_when_nothing_is_passed():
    global Number

    @strawberry.input
    class Number:
        value: int

    @strawberry.input
    class Input:
        numbers: Optional[Number] = UNSET
        numbers_second: Optional[Number] = UNSET

    # case 1
    args = {"input": {}}

    arguments = [
        ArgumentDefinition(name="input", origin_name="input", type=Input)
    ]

    assert convert_arguments(args, arguments) == {"input": Input(UNSET, UNSET)}

    # case 2
    args = {"input": {"numbersSecond": None}}

    arguments = [
        ArgumentDefinition(name="input", origin_name="input", type=Input)
    ]

    assert convert_arguments(args, arguments) == {"input": Input(UNSET, None)}

    del Number
def test_nested_list_of_complex_types():
    @strawberry.input
    class Number:
        value: int

    @strawberry.input
    class Input:
        numbers: List[Number]

    args = {"input": {"numbers": [{"value": 1}, {"value": 2}]}}

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(Input),
        ),
    ]

    assert (convert_arguments(
        args,
        arguments,
        scalar_registry=DEFAULT_SCALAR_REGISTRY,
        config=StrawberryConfig(),
    ) == {
        "input": Input(numbers=[Number(1), Number(2)])
    })
예제 #4
0
def test_list():
    args = {
        "integerList": [1, 2],
        "stringList": ["abc", "cde"],
    }

    arguments = [
        StrawberryArgument(
            graphql_name="integerList",
            python_name="integer_list",
            type_annotation=StrawberryAnnotation(List[int]),
        ),
        StrawberryArgument(
            graphql_name="stringList",
            python_name="string_list",
            type_annotation=StrawberryAnnotation(List[str]),
        ),
    ]

    assert convert_arguments(
        args, arguments, scalar_registry=DEFAULT_SCALAR_REGISTRY
    ) == {
        "integer_list": [1, 2],
        "string_list": ["abc", "cde"],
    }
예제 #5
0
def test_simple_types():
    args = {"integer": 1, "string": "abc", "float": 1.2, "bool": True}

    arguments = [
        StrawberryArgument(
            graphql_name="integer",
            type_annotation=StrawberryAnnotation(int),
            python_name="integer",
        ),
        StrawberryArgument(
            graphql_name="string",
            type_annotation=StrawberryAnnotation(str),
            python_name="string",
        ),
        StrawberryArgument(
            graphql_name="float",
            type_annotation=StrawberryAnnotation(float),
            python_name="float",
        ),
        StrawberryArgument(
            graphql_name="bool",
            type_annotation=StrawberryAnnotation(bool),
            python_name="bool",
        ),
    ]

    assert convert_arguments(
        args, arguments, scalar_registry=DEFAULT_SCALAR_REGISTRY
    ) == {
        "integer": 1,
        "string": "abc",
        "float": 1.2,
        "bool": True,
    }
def test_input_types():
    @strawberry.input
    class MyInput:
        abc: str
        say_hello_to: str
        fun: str
        was: int = strawberry.field(name="having")

    args = {
        "input": {
            "abc": "example",
            "sayHelloTo": "Patrick",
            "having": 10,
            "fun": "yes"
        }
    }

    arguments = [
        ArgumentDefinition(name="input", origin_name="input", type=MyInput)
    ]

    assert convert_arguments(args, arguments) == {
        "input": MyInput(abc="example",
                         say_hello_to="Patrick",
                         was=10,
                         fun="yes")
    }
def test_lazy():
    LazierType = LazyType["LaziestType", __name__]

    args = {
        "lazyArg": {
            "something": True
        },
    }

    arguments = [
        StrawberryArgument(
            graphql_name="lazyArg",
            python_name="lazy_arg",
            type_annotation=StrawberryAnnotation(LazierType),
        ),
    ]

    assert (convert_arguments(
        args,
        arguments,
        scalar_registry=DEFAULT_SCALAR_REGISTRY,
        config=StrawberryConfig(),
    ) == {
        "lazy_arg": LaziestType(something=True)
    })
def test_when_optional():
    @strawberry.input
    class Number:
        value: int

    @strawberry.input
    class Input:
        numbers: Optional[Number] = UNSET
        numbers_second: Optional[Number] = UNSET

    args = {}

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(Optional[Input]),
        )
    ]

    assert (convert_arguments(
        args,
        arguments,
        scalar_registry=DEFAULT_SCALAR_REGISTRY,
        config=StrawberryConfig(),
    ) == {})
def test_list():
    args = {
        "integerList": [1, 2],
        "stringList": ["abc", "cde"],
    }

    arguments = [
        ArgumentDefinition(
            name="integerList",
            origin_name="integer_list",
            type=int,
            is_list=True,
            child=ArgumentDefinition(type=int),
        ),
        ArgumentDefinition(
            name="stringList",
            origin_name="string_list",
            type=str,
            is_list=True,
            child=ArgumentDefinition(type=str),
        ),
    ]

    assert convert_arguments(args, arguments) == {
        "integer_list": [1, 2],
        "string_list": ["abc", "cde"],
    }
예제 #10
0
        def _get_arguments(
            source: Any,
            info: Info,
            kwargs: Dict[str, Any],
        ) -> Tuple[List[Any], Dict[str, Any]]:
            kwargs = convert_arguments(
                kwargs,
                field.arguments,
                auto_camel_case=self.config.auto_camel_case)

            # the following code allows to omit info and root arguments
            # by inspecting the original resolver arguments,
            # if it asks for self, the source will be passed as first argument
            # if it asks for root, the source it will be passed as kwarg
            # if it asks for info, the info will be passed as kwarg

            args = []

            if field.base_resolver:
                if field.base_resolver.has_self_arg:
                    args.append(source)

                if field.base_resolver.has_root_arg:
                    kwargs["root"] = source

                if field.base_resolver.has_info_arg:
                    kwargs["info"] = info

            return args, kwargs
def test_list():
    args = {
        "integerList": [1, 2],
        "stringList": ["abc", "cde"],
    }

    arguments = [
        StrawberryArgument(
            graphql_name="integerList",
            python_name="integer_list",
            type_=int,
            is_list=True,
            child=StrawberryArgument(graphql_name=None,
                                     python_name=None,
                                     type_=int),
        ),
        StrawberryArgument(
            graphql_name="stringList",
            python_name="string_list",
            type_=str,
            is_list=True,
            child=StrawberryArgument(graphql_name=None,
                                     python_name=None,
                                     type_=str),
        ),
    ]

    assert convert_arguments(args, arguments) == {
        "integer_list": [1, 2],
        "string_list": ["abc", "cde"],
    }
예제 #12
0
def test_input_types():
    @strawberry.input
    class MyInput:
        abc: str
        say_hello_to: str
        fun: str
        was: int = strawberry.field(name="having")

    args = {
        "input": {
            "abc": "example",
            "sayHelloTo": "Patrick",
            "having": 10,
            "fun": "yes"
        }
    }

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(MyInput),
        ),
    ]

    assert (convert_arguments(
        args,
        arguments,
        scalar_registry=DEFAULT_SCALAR_REGISTRY,
        config=StrawberryConfig(),
    ) == {
        "input":
        MyInput(abc="example", say_hello_to="Patrick", was=10, fun="yes")
    })
예제 #13
0
    def _get_arguments(
        self,
        source: Any,
        info: Any,
        kwargs: Dict[str, Any],
    ) -> Tuple[List[Any], Dict[str, Any]]:
        assert self.base_resolver is not None

        kwargs = convert_arguments(kwargs, self.arguments)

        # the following code allows to omit info and root arguments
        # by inspecting the original resolver arguments,
        # if it asks for self, the source will be passed as first argument
        # if it asks for root, the source it will be passed as kwarg
        # if it asks for info, the info will be passed as kwarg

        args = []

        if self.base_resolver.has_self_arg:
            args.append(source)

        if self.base_resolver.has_root_arg:
            kwargs["root"] = source

        if self.base_resolver.has_info_arg:
            kwargs["info"] = info

        return args, kwargs
def test_simple_types():
    args = {"integer": 1, "string": "abc", "float": 1.2, "bool": True}

    arguments = [
        ArgumentDefinition(name="integer", type=int, origin_name="integer"),
        ArgumentDefinition(name="string", type=str, origin_name="string"),
        ArgumentDefinition(name="float", type=float, origin_name="float"),
        ArgumentDefinition(name="bool", type=bool, origin_name="bool"),
    ]

    assert convert_arguments(args, arguments) == {
        "integer": 1,
        "string": "abc",
        "float": 1.2,
        "bool": True,
    }
def test_optional_input_types():
    @strawberry.input
    class MyInput:
        abc: str

    args = {"input": {"abc": "example"}}

    arguments = [
        ArgumentDefinition(name="input",
                           origin_name="input",
                           type=MyInput,
                           is_optional=True)
    ]

    assert convert_arguments(args, arguments) == {
        "input": MyInput(abc="example")
    }
def test_optional_input_types():
    @strawberry.input
    class MyInput:
        abc: str

    args = {"input": {"abc": "example"}}

    arguments = [
        StrawberryArgument(graphql_name=None,
                           python_name="input",
                           type_=MyInput,
                           is_optional=True)
    ]

    assert convert_arguments(args, arguments) == {
        "input": MyInput(abc="example")
    }
예제 #17
0
def test_optional_list_of_input_types():
    @strawberry.input
    class MyInput:
        abc: str

    args = {"inputList": [{"abc": "example"}]}

    arguments = [
        StrawberryArgument(
            graphql_name="inputList",
            python_name="input_list",
            type_annotation=StrawberryAnnotation(Optional[List[MyInput]]),
        ),
    ]
    assert convert_arguments(
        args, arguments, scalar_registry=DEFAULT_SCALAR_REGISTRY
    ) == {"input_list": [MyInput(abc="example")]}
예제 #18
0
def test_nested_list_of_complex_types():
    @strawberry.input
    class Number:
        value: int

    @strawberry.input
    class Input:
        numbers: List[Number]

    args = {"input": {"numbers": [{"value": 1}, {"value": 2}]}}

    arguments = [
        ArgumentDefinition(name="input", origin_name="input", type=Input)
    ]

    assert convert_arguments(args, arguments) == {
        "input": Input(numbers=[Number(1), Number(2)])
    }
def test_nested_list_of_complex_types():
    @strawberry.input
    class Number:
        value: int

    @strawberry.input
    class Input:
        numbers: List[Number]

    args = {"input": {"numbers": [{"value": 1}, {"value": 2}]}}

    arguments = [
        StrawberryArgument(graphql_name=None, python_name="input", type_=Input)
    ]

    assert convert_arguments(args, arguments) == {
        "input": Input(numbers=[Number(1), Number(2)])
    }
예제 #20
0
def test_list_of_input_types():
    @strawberry.input
    class MyInput:
        abc: str

    args = {"inputList": [{"abc": "example"}]}

    arguments = [
        StrawberryArgument(
            graphql_name="inputList",
            python_name="input_list",
            type_annotation=StrawberryAnnotation(List[MyInput]),
        ),
    ]

    assert convert_arguments(args, arguments) == {
        "input_list": [MyInput(abc="example")]
    }
예제 #21
0
def test_optional_input_types():
    @strawberry.input
    class MyInput:
        abc: str

    args = {"input": {"abc": "example"}}

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(Optional[MyInput]),
        ),
    ]

    assert convert_arguments(args, arguments) == {
        "input": MyInput(abc="example")
    }
def test_optional_list_of_input_types():
    @strawberry.input
    class MyInput:
        abc: str

    args = {"inputList": [{"abc": "example"}]}

    arguments = [
        ArgumentDefinition(
            name="inputList",
            origin_name="input_list",
            is_optional=True,
            child=ArgumentDefinition(type=MyInput),
            is_list=True,
        )
    ]
    assert convert_arguments(args, arguments) == {
        "input_list": [MyInput(abc="example")]
    }
예제 #23
0
def test_when_optional():
    @strawberry.input
    class Number:
        value: int

    @strawberry.input
    class Input:
        numbers: Optional[Number] = UNSET
        numbers_second: Optional[Number] = UNSET

    args = {}

    arguments = [
        ArgumentDefinition(name="input",
                           origin_name="input",
                           type=Input,
                           is_optional=True)
    ]

    assert convert_arguments(args, arguments) == {}
def test_when_optional():
    @strawberry.input
    class Number:
        value: int

    @strawberry.input
    class Input:
        numbers: Optional[Number] = UNSET
        numbers_second: Optional[Number] = UNSET

    args = {}

    arguments = [
        StrawberryArgument(graphql_name=None,
                           python_name="input",
                           type_=Input,
                           is_optional=True)
    ]

    assert convert_arguments(args, arguments) == {}
def test_optional_list_of_input_types():
    @strawberry.input
    class MyInput:
        abc: str

    args = {"inputList": [{"abc": "example"}]}

    arguments = [
        StrawberryArgument(
            graphql_name="inputList",
            python_name="input_list",
            is_optional=True,
            type_=None,
            child=StrawberryArgument(graphql_name=None,
                                     python_name=None,
                                     type_=MyInput),
            is_list=True,
        )
    ]
    assert convert_arguments(args, arguments) == {
        "input_list": [MyInput(abc="example")]
    }
def test_simple_types():
    args = {"integer": 1, "string": "abc", "float": 1.2, "bool": True}

    arguments = [
        StrawberryArgument(graphql_name="integer",
                           type_=int,
                           python_name="integer"),
        StrawberryArgument(graphql_name="string",
                           type_=str,
                           python_name="string"),
        StrawberryArgument(graphql_name="float",
                           type_=float,
                           python_name="float"),
        StrawberryArgument(graphql_name="bool", type_=bool,
                           python_name="bool"),
    ]

    assert convert_arguments(args, arguments) == {
        "integer": 1,
        "string": "abc",
        "float": 1.2,
        "bool": True,
    }
예제 #27
0
def test_optional_input_types():
    @strawberry.input
    class MyInput:
        abc: str

    args = {"input": {"abc": "example"}}

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(Optional[MyInput]),
        ),
    ]

    assert (convert_arguments(
        args,
        arguments,
        scalar_registry=DEFAULT_SCALAR_REGISTRY,
        config=StrawberryConfig(),
    ) == {
        "input": MyInput(abc="example")
    })
예제 #28
0
def test_nested_input_types():
    @strawberry.enum
    class ChangeType(Enum):
        MAJOR = "major"
        MINOR = "minor"
        PATCH = "patch"

    @strawberry.input
    class ReleaseInfo:
        change_type: ChangeType
        changelog: str

    @strawberry.enum
    class ReleaseFileStatus(Enum):
        MISSING = "missing"
        INVALID = "invalid"
        OK = "ok"

    @strawberry.input
    class AddReleaseFileCommentInput:
        pr_number: int
        status: ReleaseFileStatus
        release_info: Optional[ReleaseInfo]

    args = {
        "input": {
            "prNumber": 12,
            "status": ReleaseFileStatus.OK.value,
            "releaseInfo": {
                "changeType": ChangeType.MAJOR.value,
                "changelog": "example",
            },
        }
    }

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(AddReleaseFileCommentInput),
        ),
    ]

    assert convert_arguments(
        args, arguments, scalar_registry=DEFAULT_SCALAR_REGISTRY
    ) == {
        "input": AddReleaseFileCommentInput(
            pr_number=12,
            status=ReleaseFileStatus.OK,
            release_info=ReleaseInfo(change_type=ChangeType.MAJOR, changelog="example"),
        )
    }

    args = {
        "input": {
            "prNumber": 12,
            "status": ReleaseFileStatus.OK.value,
            "releaseInfo": None,
        }
    }

    arguments = [
        StrawberryArgument(
            graphql_name=None,
            python_name="input",
            type_annotation=StrawberryAnnotation(AddReleaseFileCommentInput),
        ),
    ]

    assert convert_arguments(
        args, arguments, scalar_registry=DEFAULT_SCALAR_REGISTRY
    ) == {
        "input": AddReleaseFileCommentInput(
            pr_number=12, status=ReleaseFileStatus.OK, release_info=None
        )
    }
def test_nested_input_types():
    global ReleaseFileStatus, ReleaseInfo, ChangeType

    @strawberry.enum
    class ChangeType(Enum):
        MAJOR = "major"
        MINOR = "minor"
        PATCH = "patch"

    @strawberry.input
    class ReleaseInfo:
        change_type: ChangeType
        changelog: str

    @strawberry.enum
    class ReleaseFileStatus(Enum):
        MISSING = "missing"
        INVALID = "invalid"
        OK = "ok"

    @strawberry.input
    class AddReleaseFileCommentInput:
        pr_number: int
        status: ReleaseFileStatus
        release_info: Optional[ReleaseInfo]

    args = {
        "input": {
            "prNumber": 12,
            "status": ReleaseFileStatus.OK.value,
            "releaseInfo": {
                "changeType": ChangeType.MAJOR.value,
                "changelog": "example",
            },
        }
    }

    arguments = [
        ArgumentDefinition(name="input",
                           origin_name="input",
                           type=AddReleaseFileCommentInput)
    ]

    assert convert_arguments(args, arguments) == {
        "input":
        AddReleaseFileCommentInput(
            pr_number=12,
            status=ReleaseFileStatus.OK,
            release_info=ReleaseInfo(change_type=ChangeType.MAJOR,
                                     changelog="example"),
        )
    }

    args = {
        "input": {
            "prNumber": 12,
            "status": ReleaseFileStatus.OK.value,
            "releaseInfo": None,
        }
    }

    arguments = [
        ArgumentDefinition(name="input",
                           origin_name="input",
                           type=AddReleaseFileCommentInput)
    ]

    assert convert_arguments(args, arguments) == {
        "input":
        AddReleaseFileCommentInput(pr_number=12,
                                   status=ReleaseFileStatus.OK,
                                   release_info=None)
    }

    del ReleaseFileStatus, ReleaseInfo, ChangeType