1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
# type: ignore
import textwrap
import strawberry
from strawberry.federation.schema_directives import Key
def test_keys_federation_2():
global Review
@strawberry.federation.type
class User:
username: str
@strawberry.federation.type(keys=[Key(fields="upc", resolvable=True)], extend=True)
class Product:
upc: str = strawberry.federation.field(external=True)
reviews: list["Review"]
@strawberry.federation.type(keys=["body"])
class Review:
body: str
author: User
product: Product
@strawberry.federation.type
class Query:
@strawberry.field
def top_products(self, first: int) -> list[Product]: # pragma: no cover
return []
schema = strawberry.federation.Schema(query=Query)
expected = """
schema @link(url: "https://specs.apollo.dev/federation/v2.11", import: ["@external", "@key"]) {
query: Query
}
extend type Product @key(fields: "upc", resolvable: true) {
upc: String! @external
reviews: [Review!]!
}
type Query {
_entities(representations: [_Any!]!): [_Entity]!
_service: _Service!
topProducts(first: Int!): [Product!]!
}
type Review @key(fields: "body") {
body: String!
author: User!
product: Product!
}
type User {
username: String!
}
scalar _Any
union _Entity = Product | Review
type _Service {
sdl: String!
}
"""
assert schema.as_str() == textwrap.dedent(expected).strip()
del Review
|