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
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
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
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"
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
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
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
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