from graphql import build_schema, graphql_sync, parse, validate
schema = build_schema('type Query { products: [Product!]! } type Product { id: ID!, name: String!, stock: Int! }')
schema.get_type('Query').fields['products'].resolve = lambda *_: [{'id': 'P-01', 'name': 'DEMO水杯', 'stock': 6}]
doc = parse(output['query'])
readonly = all(getattr(getattr(item, 'operation', None), 'value', '') == 'query' for item in doc.definitions)
check('AST只包含query操作', readonly)
errors = validate(schema, doc)
check('查询字段通过真实GraphQL Schema验证', not errors)
result = graphql_sync(schema, output['query']).data if readonly and not errors else None
check('实际执行返回已知库存', result and result['products'][0]['stock'] == 6)
check('写入反例无法通过Schema', bool(validate(schema, parse('mutation { deleteProduct(id:"P-01") }'))))
