Skip to content

Commit

Permalink
Added unit test for setting collection on Criteria
Browse files Browse the repository at this point in the history
  • Loading branch information
TomHAnderson committed Dec 21, 2024
1 parent 9aa63ba commit 8de514d
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions test/Feature/Event/CriteriaTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,77 @@ function (CriteriaEvent $event): void {
$data['artist']['edges'][0]['node']['performances']['edges'][0]['node']['venue'],
);
}

public function testEventFilterCollection(): void
{
$driver = new Driver($this->getEntityManager(), new Config(['group' => 'CriteriaEvent']));

$driver->get(EventDispatcher::class)->subscribeTo(
Artist::class . '.performances.criteria',
function (CriteriaEvent $event): void {
$this->assertInstanceOf(Criteria::class, $event->getCriteria());

$event->setCollection($event->getCollection()->filter(
static function ($performance) {
return $performance->getVenue() === 'Delta Center';
},
));

$this->assertInstanceOf(Collection::class, $event->getCollection());
$this->assertInstanceOf(Artist::class, $event->getObjectValue());
$this->assertEquals('contextTest', $event->getContext());
$this->assertIsArray($event->getArgs());
$this->assertInstanceOf(ResolveInfo::class, $event->getInfo());
},
);

$schema = new Schema([
'query' => new ObjectType([
'name' => 'query',
'fields' => [
'artist' => [
'type' => $driver->connection(Artist::class),
'args' => [
'filter' => $driver->filter(Artist::class),
],
'resolve' => $driver->resolve(Artist::class),
],
],
]),
]);

$query = '
query ($id: String!) {
artist (filter: { id: { eq: $id } } ) {
edges {
node {
id
name
performances {
edges {
node {
venue
}
}
}
}
}
}
}';

$result = GraphQL::executeQuery(
schema: $schema,
source: $query,
variableValues: ['id' => '1'],
contextValue: 'contextTest',
);
$data = $result->toArray()['data'];

$this->assertEquals(1, count($data['artist']['edges']));
$this->assertEquals(1, count($data['artist']['edges'][0]['node']['performances']));
$this->assertEquals(
'Delta Center',
$data['artist']['edges'][0]['node']['performances']['edges'][0]['node']['venue'],
);
}
}

0 comments on commit 8de514d

Please sign in to comment.