Skip to content

Commit 93742af

Browse files
committed
Add more tests for before_breadcrumb mapping
1 parent 621ebb4 commit 93742af

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

test/DependencyInjection/SentryExtensionTest.php

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,81 @@ public function testBeforeSendWithInvalidServiceReference(): void
220220
$this->getOptionsFrom($container)->getBeforeSendCallback();
221221
}
222222

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+
223298
private function getContainer(array $configuration = []): Container
224299
{
225300
$containerBuilder = new ContainerBuilder();
@@ -246,6 +321,10 @@ private function getContainer(array $configuration = []): Container
246321
$beforeSend->setFactory([CallbackMock::class, 'createBeforeSendCallback']);
247322
$containerBuilder->setDefinition('before_send', $beforeSend);
248323

324+
$beforeBreadcrumb = new Definition('callable');
325+
$beforeBreadcrumb->setFactory([CallbackMock::class, 'createBeforeBreadcrumbCallback']);
326+
$containerBuilder->setDefinition('before_breadcrumb', $beforeBreadcrumb);
327+
249328
$extension = new SentryExtension();
250329
$extension->load(['sentry' => $configuration], $containerBuilder);
251330

0 commit comments

Comments
 (0)