diff --git a/src/Query.php b/src/Query.php index 5fc7456..5f35ae9 100644 --- a/src/Query.php +++ b/src/Query.php @@ -92,6 +92,14 @@ public function __construct(string $fieldName = '', string $alias = '') $this->isNested = false; } + /** + * @return string + */ + public function getFieldName(): string + { + return $this->fieldName; + } + /** * @param string $alias * @@ -163,6 +171,14 @@ public function setArguments(array $arguments): Query return $this; } + /** + * @return array + */ + public function getArguments(): array + { + return $this->arguments; + } + /** * @return string */ diff --git a/tests/QueryTest.php b/tests/QueryTest.php index f64ec05..e3bdb87 100644 --- a/tests/QueryTest.php +++ b/tests/QueryTest.php @@ -730,4 +730,96 @@ public function testTwoLevelQueryWithInlineFragment(Query $query) return $query; } + + /** + * @covers \GraphQL\Query::getArguments + */ + public function testGettingArguments() + { + $gql = (new Query('things')) + ->setArguments( + [ + 'someClientId' => 'someValueBasedOnCodebase' + ] + ); + $cursor_id = 'someCursor'; + $new_args = $gql->getArguments(); + $gql->setArguments( + array_merge( + $new_args, + [ + 'after' => $cursor_id + ] + ) + ); + self::assertEquals( + 'query { +things(someClientId: "someValueBasedOnCodebase" after: "someCursor") +}', + (string) $gql + ); + } + + /** + * @covers \GraphQL\Query::getFieldName + */ + public function testGettingNameAndAltering() + { + $gql = (new Query('things')) + ->setSelectionSet( + [ + 'id', + 'name', + (new Query('subThings')) + ->setArguments( + [ + 'filter' => 'providerId123', + ] + ) + ->setSelectionSet( + [ + 'id', + 'name' + ] + ) + ]); + $sets = $gql->getSelectionSet(); + foreach ($sets as $set) { + if (($set instanceof Query) === false) { + continue; + } + $name = $set->getFieldName(); + if ($name !== 'subThings') { + continue; + } + $set->setArguments( + [ + 'filter' => 'providerId456' + ] + ); + $set->setSelectionSet( + array_merge( + $set->getSelectionSet(), + [ + 'someField', + 'someOtherField' + ] + ) + ); + } + self::assertEquals( + 'query { +things { +id +name +subThings(filter: "providerId456") { +id +name +someField +someOtherField +} +} +}', + (string) $gql); + } }