@@ -220,6 +220,81 @@ public function testBeforeSendWithInvalidServiceReference(): void
220
220
$ this ->getOptionsFrom ($ container )->getBeforeSendCallback ();
221
221
}
222
222
223
+ public function testBeforeBreadcrumbUsingServiceDefinition (): void
224
+ {
225
+ $ container = $ this ->getContainer ([
226
+ 'options ' => [
227
+ 'before_breadcrumb ' => '@before_breadcrumb ' ,
228
+ ],
229
+ ]);
230
+
231
+ $ container ->set ('before_breadcrumb ' , function (Event $ event ) {
232
+ });
233
+
234
+ $ beforeBreadcrumbCallback = $ this ->getOptionsFrom ($ container )->getBeforeBreadcrumbCallback ();
235
+ $ this ->assertIsCallable ($ beforeBreadcrumbCallback );
236
+ $ defaultOptions = $ this ->getOptionsFrom ($ this ->getContainer ());
237
+ $ this ->assertNotEquals (
238
+ $ defaultOptions ->getBeforeBreadcrumbCallback (),
239
+ $ beforeBreadcrumbCallback ,
240
+ 'before_breadcrumb closure has not been replaced, is the default one '
241
+ );
242
+ $ this ->assertEquals (
243
+ CallbackMock::createBeforeBreadcrumbCallback (),
244
+ $ beforeBreadcrumbCallback
245
+ );
246
+ }
247
+
248
+ /**
249
+ * @dataProvider beforeBreadcrumbDataProvider
250
+ */
251
+ public function testBeforeBreadcrumbUsingScalarCallable ($ scalarCallable ): void
252
+ {
253
+ $ container = $ this ->getContainer ([
254
+ 'options ' => [
255
+ 'before_breadcrumb ' => $ scalarCallable ,
256
+ ],
257
+ ]);
258
+
259
+ $ container ->set ('before_breadcrumb ' , function (Event $ event ) {
260
+ });
261
+
262
+ $ beforeBreadcrumbCallback = $ this ->getOptionsFrom ($ container )->getBeforeBreadcrumbCallback ();
263
+ $ this ->assertIsCallable ($ beforeBreadcrumbCallback );
264
+ $ defaultOptions = $ this ->getOptionsFrom ($ this ->getContainer ());
265
+ $ this ->assertNotEquals (
266
+ $ defaultOptions ->getBeforeBreadcrumbCallback (),
267
+ $ beforeBreadcrumbCallback ,
268
+ 'before_breadcrumb closure has not been replaced, is the default one '
269
+ );
270
+ $ this ->assertEquals (
271
+ $ scalarCallable ,
272
+ $ beforeBreadcrumbCallback
273
+ );
274
+ }
275
+
276
+ public function beforeBreadcrumbDataProvider (): array
277
+ {
278
+ return [
279
+ [[CallbackMock::class, 'beforeBreadcrumb ' ]],
280
+ [CallbackMock::class . '::beforeBreadcrumb ' ],
281
+ [__NAMESPACE__ . '\mockBeforeBreadcrumb ' ],
282
+ ];
283
+ }
284
+
285
+ public function testBeforeBreadcrumbWithInvalidServiceReference (): void
286
+ {
287
+ $ container = $ this ->getContainer ([
288
+ 'options ' => [
289
+ 'before_breadcrumb ' => '@event_dispatcher ' ,
290
+ ],
291
+ ]);
292
+
293
+ $ this ->expectException (\TypeError::class);
294
+
295
+ $ this ->getOptionsFrom ($ container )->getBeforeBreadcrumbCallback ();
296
+ }
297
+
223
298
private function getContainer (array $ configuration = []): Container
224
299
{
225
300
$ containerBuilder = new ContainerBuilder ();
@@ -246,6 +321,10 @@ private function getContainer(array $configuration = []): Container
246
321
$ beforeSend ->setFactory ([CallbackMock::class, 'createBeforeSendCallback ' ]);
247
322
$ containerBuilder ->setDefinition ('before_send ' , $ beforeSend );
248
323
324
+ $ beforeBreadcrumb = new Definition ('callable ' );
325
+ $ beforeBreadcrumb ->setFactory ([CallbackMock::class, 'createBeforeBreadcrumbCallback ' ]);
326
+ $ containerBuilder ->setDefinition ('before_breadcrumb ' , $ beforeBreadcrumb );
327
+
249
328
$ extension = new SentryExtension ();
250
329
$ extension ->load (['sentry ' => $ configuration ], $ containerBuilder );
251
330
0 commit comments