@@ -91,4 +91,77 @@ function (CriteriaEvent $event): void {
91
91
$ data ['artist ' ]['edges ' ][0 ]['node ' ]['performances ' ]['edges ' ][0 ]['node ' ]['venue ' ],
92
92
);
93
93
}
94
+
95
+ public function testEventFilterCollection (): void
96
+ {
97
+ $ driver = new Driver ($ this ->getEntityManager (), new Config (['group ' => 'CriteriaEvent ' ]));
98
+
99
+ $ driver ->get (EventDispatcher::class)->subscribeTo (
100
+ Artist::class . '.performances.criteria ' ,
101
+ function (CriteriaEvent $ event ): void {
102
+ $ this ->assertInstanceOf (Criteria::class, $ event ->getCriteria ());
103
+
104
+ $ event ->setCollection ($ event ->getCollection ()->filter (
105
+ static function ($ performance ) {
106
+ return $ performance ->getVenue () === 'Delta Center ' ;
107
+ },
108
+ ));
109
+
110
+ $ this ->assertInstanceOf (Collection::class, $ event ->getCollection ());
111
+ $ this ->assertInstanceOf (Artist::class, $ event ->getObjectValue ());
112
+ $ this ->assertEquals ('contextTest ' , $ event ->getContext ());
113
+ $ this ->assertIsArray ($ event ->getArgs ());
114
+ $ this ->assertInstanceOf (ResolveInfo::class, $ event ->getInfo ());
115
+ },
116
+ );
117
+
118
+ $ schema = new Schema ([
119
+ 'query ' => new ObjectType ([
120
+ 'name ' => 'query ' ,
121
+ 'fields ' => [
122
+ 'artist ' => [
123
+ 'type ' => $ driver ->connection (Artist::class),
124
+ 'args ' => [
125
+ 'filter ' => $ driver ->filter (Artist::class),
126
+ ],
127
+ 'resolve ' => $ driver ->resolve (Artist::class),
128
+ ],
129
+ ],
130
+ ]),
131
+ ]);
132
+
133
+ $ query = '
134
+ query ($id: String!) {
135
+ artist (filter: { id: { eq: $id } } ) {
136
+ edges {
137
+ node {
138
+ id
139
+ name
140
+ performances {
141
+ edges {
142
+ node {
143
+ venue
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ } ' ;
151
+
152
+ $ result = GraphQL::executeQuery (
153
+ schema: $ schema ,
154
+ source: $ query ,
155
+ variableValues: ['id ' => '1 ' ],
156
+ contextValue: 'contextTest ' ,
157
+ );
158
+ $ data = $ result ->toArray ()['data ' ];
159
+
160
+ $ this ->assertEquals (1 , count ($ data ['artist ' ]['edges ' ]));
161
+ $ this ->assertEquals (1 , count ($ data ['artist ' ]['edges ' ][0 ]['node ' ]['performances ' ]));
162
+ $ this ->assertEquals (
163
+ 'Delta Center ' ,
164
+ $ data ['artist ' ]['edges ' ][0 ]['node ' ]['performances ' ]['edges ' ][0 ]['node ' ]['venue ' ],
165
+ );
166
+ }
94
167
}
0 commit comments