Beispiel #1
0
def test_generic_with_optional():
    @strawberry.type
    class Edge(Generic[T]):
        node: Optional[T]

    definition = Edge._type_definition

    assert definition.name == "Edge"
    assert definition.is_generic
    assert definition.type_params == {"node": T}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "node"
    assert definition.fields[0].type == T
    assert definition.fields[0].is_optional is True

    # let's make a copy of this generic type

    Copy = copy_type_with(Edge, str)

    definition = Copy._type_definition

    assert definition.name == "StrEdge"
    assert definition.is_generic is False
    assert definition.type_params == {}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "node"
    assert definition.fields[0].type == str
    assert definition.fields[0].is_optional is True
Beispiel #2
0
def test_federation():
    @strawberry.federation.type(keys=["id"])
    class Edge(Generic[T]):
        id: strawberry.ID
        node_field: T

    definition = Edge._type_definition

    Copy = copy_type_with(Edge, str)

    definition = Copy._type_definition

    assert definition.name == "StrEdge"
    assert definition.is_generic is False
    assert definition.type_params == {}

    assert len(definition.fields) == 2

    assert definition.fields[0].name == "id"
    assert definition.fields[0].type == strawberry.ID
    assert definition.fields[0].is_optional is False

    assert definition.fields[1].name == "nodeField"
    assert definition.fields[1].type == str
    assert definition.fields[1].is_optional is False

    assert definition.federation.keys == ["id"]
    assert definition.federation.extend is False
Beispiel #3
0
def test_generics_with_unions():
    global Error

    @strawberry.type
    class Error:
        message: str

    @strawberry.type
    class Edge(Generic[T]):
        node: Union[Error, T]

    definition = Edge._type_definition

    assert definition.name == "Edge"
    assert len(definition.fields) == 1

    assert definition.fields[0].name == "node"
    assert isinstance(definition.fields[0].type, StrawberryUnion)
    assert definition.fields[0].type.types == (Error, T)

    assert definition.type_params == {"node": T}

    # let's make a copy of this generic type

    @strawberry.type
    class Node:
        name: str

    Copy = copy_type_with(Edge, Node)

    definition = Copy._type_definition

    assert definition.name == "NodeEdge"
    assert definition.is_generic is False
    assert definition.type_params == {}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "node"

    union_definition = definition.fields[0].type
    assert isinstance(union_definition, StrawberryUnion)
    assert union_definition.name == "ErrorNode"
    assert union_definition.types == (Error, Node)

    assert definition.fields[0].is_optional is False

    del Error
Beispiel #4
0
def test_generics_nested_in_list():
    @strawberry.type
    class Edge(Generic[T]):
        node: T

    @strawberry.type
    class Connection(Generic[T]):
        edges: List[Edge[T]]

    definition = Connection._type_definition

    assert definition.name == "Connection"
    assert definition.is_generic
    assert definition.type_params == {"edges": T}

    assert len(definition.fields) == 1

    assert definition.fields[0].graphql_name == "edges"
    assert definition.fields[0].is_list
    assert definition.fields[0].type is None
    assert definition.fields[0].is_optional is False
    assert definition.fields[0].child.type._type_definition.type_params == {
        "node": T
    }

    # let's make a copy of this generic type

    Copy = copy_type_with(Connection, str)

    definition = Copy._type_definition

    assert definition.name == "StrConnection"
    assert definition.is_generic is False
    assert definition.type_params == {}

    assert len(definition.fields) == 1

    assert definition.fields[0].graphql_name == "edges"
    assert definition.fields[0].type is None
    assert definition.fields[0].is_list
    assert definition.fields[0].is_optional is False
    assert definition.fields[0].child.type._type_definition.name == "StrEdge"
Beispiel #5
0
def test_generics_nested():
    global Edge

    @strawberry.type
    class Edge(Generic[T]):
        node: T

    @strawberry.type
    class Connection(Generic[T]):
        edge: Edge[T]

    definition = Connection._type_definition

    assert definition.name == "Connection"
    assert definition.is_generic
    assert definition.type_params == {"edge": T}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "edge"
    assert definition.fields[0].type._type_definition.type_params == {"node": T}
    assert definition.fields[0].is_optional is False

    # let's make a copy of this generic type

    Copy = copy_type_with(Connection, str)

    definition = Copy._type_definition

    assert definition.name == "StrConnection"
    assert definition.is_generic is False
    assert definition.type_params == {}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "edge"
    assert definition.fields[0].type._type_definition.name == "StrEdge"
    assert definition.fields[0].is_optional is False

    del Edge
Beispiel #6
0
def test_generics_name():
    @strawberry.type(name="AnotherName")
    class EdgeName:
        node: str

    @strawberry.type
    class Connection(Generic[T]):
        edge: T

    Copy = copy_type_with(Connection, EdgeName)

    definition = Copy._type_definition

    assert definition.name == "AnotherNameConnection"
    assert definition.is_generic is False
    assert definition.type_params == {}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "edge"
    assert definition.fields[0].type._type_definition.name == "AnotherName"
    assert definition.fields[0].is_optional is False
Beispiel #7
0
def test_generic_with_list_of_optionals():
    @strawberry.type
    class Connection(Generic[T]):
        edges: List[Optional[T]]

    definition = Connection._type_definition

    assert definition.name == "Connection"
    assert definition.is_generic
    assert definition.type_params == {"edges": T}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "edges"
    assert definition.fields[0].type is None
    assert definition.fields[0].is_list
    assert definition.fields[0].is_optional is False
    assert definition.fields[0].child.type == T
    assert definition.fields[0].child.is_optional

    # let's make a copy of this generic type

    Copy = copy_type_with(Connection, str)

    definition = Copy._type_definition

    assert definition.name == "StrConnection"
    assert definition.is_generic is False
    assert definition.type_params == {}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "edges"
    assert definition.fields[0].type is None
    assert definition.fields[0].is_list
    assert definition.fields[0].is_optional is False
    assert definition.fields[0].child.type == str
    assert definition.fields[0].child.is_optional
Beispiel #8
0
def test_generics_with_unions():
    @strawberry.type
    class Error:
        message: str

    @strawberry.type
    class Edge(Generic[T]):
        node: Union[Error, T]

    definition = Edge._type_definition

    assert definition.name == "Edge"
    assert len(definition.fields) == 1

    assert definition.fields[0].name == "node"
    assert definition.fields[0].type._union_definition
    assert definition.fields[0].type._union_definition.types == (Error, T)

    assert definition.type_params == {"node": T}

    # let's make a copy of this generic type

    Copy = copy_type_with(Edge, str)

    definition = Copy._type_definition

    assert definition.name == "StrEdge"
    assert definition.is_generic is False
    assert definition.type_params == {}

    assert len(definition.fields) == 1

    assert definition.fields[0].name == "node"
    assert definition.fields[0].type._union_definition.types == (Error, str)
    assert definition.fields[0].type._union_definition.name == "ErrorStr"
    assert definition.fields[0].is_optional is False