/** * Extracts the root type of the operation from the schema. * * @param Schema $schema * @param OperationDefinitionNode $operation * @return ObjectType * @throws Error */ private static function getOperationRootType(Schema $schema, OperationDefinitionNode $operation) { switch ($operation->operation) { case 'query': return $schema->getQueryType(); case 'mutation': $mutationType = $schema->getMutationType(); if (!$mutationType) { throw new Error('Schema is not configured for mutations', [$operation]); } return $mutationType; case 'subscription': $subscriptionType = $schema->getSubscriptionType(); if (!$subscriptionType) { throw new Error('Schema is not configured for subscriptions', [$operation]); } return $subscriptionType; default: throw new Error('Can only execute queries, mutations and subscriptions', [$operation]); } }
/** * @it defines a subscription schema */ public function testDefinesSubscriptionSchema() { $schema = new Schema(['query' => $this->blogQuery, 'subscription' => $this->blogSubscription]); $this->assertEquals($this->blogSubscription, $schema->getSubscriptionType()); $sub = $this->blogSubscription->getField('articleSubscribe'); $this->assertEquals($sub->getType(), $this->blogArticle); $this->assertEquals($sub->getType()->name, 'Article'); $this->assertEquals($sub->name, 'articleSubscribe'); }