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)]) })
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"], }
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"], }
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"], }
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") })
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") }
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")]}
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)]) }
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")] }
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")] }
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, }
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") })
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