Skip to content

Commit 7b2f5b0

Browse files
authored
Merge pull request #277 from getsentry/add-integration-test
Add basic E2E test
2 parents d521013 + 98acc40 commit 7b2f5b0

23 files changed

+366
-42
lines changed

.travis.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,9 @@ jobs:
2828
php: 7.1
2929
name: prefer-lowest
3030
install:
31-
- composer remove --dev friendsofphp/php-cs-fixer phpstan/phpstan --no-update
3231
- travis_retry travis_wait composer install --no-interaction --prefer-dist
32+
- composer remove --dev friendsofphp/php-cs-fixer phpstan/phpstan phpstan/phpstan-phpunit jangregor/phpstan-prophecy --no-update
3333
- travis_retry travis_wait composer update --no-interaction --prefer-dist --prefer-stable --prefer-lowest
34-
- name: sentry/sentry dev-develop
35-
install: composer require sentry/sentry:dev-develop
3634
- stage: Code style and static analysis
3735
script:
3836
- composer phpstan
@@ -45,6 +43,10 @@ jobs:
4543
- phpdbg -qrr vendor/bin/phpunit --coverage-clover clover.xml
4644
after_success:
4745
- vendor/bin/ocular code-coverage:upload --format=php-clover clover.xml --revision=$TRAVIS_COMMIT
46+
allow_failures:
47+
- name: sentry/sentry dev-develop
48+
stage: Test
49+
install: composer require sentry/sentry:dev-develop
4850

4951
notifications:
5052
webhooks:

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
55
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
66

77
## Unreleased
8+
- Drop support for Symfony < 3.4 (#277)
89
- Fix handling of command with no name on `ConsoleListener` (#261)
910
- Remove check by AuthorizationChecker in `RequestListener` (#264)
1011
- Fixed undefined variable in `RequestListener` (#263)

composer.json

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222
"php": "^7.1",
2323
"jean85/pretty-package-versions": "^1.0",
2424
"sentry/sdk": "^2.0",
25-
"symfony/config": "^2.8||^3.0||^4.0",
26-
"symfony/console": "^2.8||^3.0||^4.0",
27-
"symfony/dependency-injection": "^2.8||^3.0||^4.0",
28-
"symfony/event-dispatcher": "^2.8||^3.0||^4.0",
29-
"symfony/http-kernel": "^2.8||^3.0||^4.0",
30-
"symfony/security-core": "^2.8||^3.0||^4.0"
25+
"symfony/config": "^3.4||^4.0",
26+
"symfony/console": "^3.4||^4.0",
27+
"symfony/dependency-injection": "^3.4||^4.0",
28+
"symfony/event-dispatcher": "^3.4||^4.0",
29+
"symfony/http-kernel": "^3.4||^4.0",
30+
"symfony/security-core": "^3.4||^4.0"
3131
},
3232
"require-dev": {
3333
"friendsofphp/php-cs-fixer": "^2.8",
@@ -38,7 +38,12 @@
3838
"phpstan/phpstan-phpunit": "^0.11",
3939
"phpunit/phpunit": "^7.5",
4040
"scrutinizer/ocular": "^1.4",
41-
"symfony/expression-language": "^2.8||^3.0||^4.0"
41+
"symfony/browser-kit": "^3.4||^4.0",
42+
"symfony/expression-language": "^3.4||^4.0",
43+
"symfony/framework-bundle": "^3.4||^4.0",
44+
"symfony/monolog-bundle": "^3.4",
45+
"symfony/phpunit-bridge": "^5.0",
46+
"symfony/yaml": "^3.4||^4.0"
4247
},
4348
"suggest": {
4449
"monolog/monolog": "Required to use the Monolog handler"

phpstan.neon

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ parameters:
1111
- '/Parameter \$.+ of method Sentry\\SentryBundle\\EventListener\\ErrorListener::onConsoleException\(\) has invalid typehint type Symfony\\Component\\Console\\Event\\ConsoleExceptionEvent./'
1212
- '/Call to method getException\(\) on an unknown class Symfony\\Component\\Console\\Event\\ConsoleExceptionEvent./'
1313
- '/Access to undefined constant Symfony\\Component\\Console\\ConsoleEvents::EXCEPTION./'
14+
- '/Class PHPUnit_Framework_TestCase not found/'
1415

1516
includes:
1617
- vendor/jangregor/phpstan-prophecy/src/extension.neon

phpunit.xml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<phpunit
33
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4-
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
4+
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/7.5/phpunit.xsd"
55
colors="true"
66
backupGlobals="false"
7-
bootstrap="vendor/autoload.php">
7+
bootstrap="vendor/autoload.php"
8+
processIsolation="true"
9+
>
810

911
<testsuites>
1012
<testsuite name="SentryBundle test suite">
@@ -17,4 +19,8 @@
1719
<directory>./src</directory>
1820
</whitelist>
1921
</filter>
22+
23+
<listeners>
24+
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener"/>
25+
</listeners>
2026
</phpunit>

src/DependencyInjection/SentryExtension.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@
1515
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
1616
use Symfony\Component\Config\FileLocator;
1717
use Symfony\Component\Console\ConsoleEvents;
18+
use Symfony\Component\Console\Event\ConsoleErrorEvent;
1819
use Symfony\Component\DependencyInjection\ContainerBuilder;
1920
use Symfony\Component\DependencyInjection\Exception\LogicException;
2021
use Symfony\Component\DependencyInjection\Loader;
2122
use Symfony\Component\DependencyInjection\Reference;
2223
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
24+
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
2325
use Symfony\Component\HttpKernel\Kernel;
26+
use Symfony\Component\HttpKernel\KernelEvents;
2427

2528
/**
2629
* This is the class that loads and manages your bundle configuration
@@ -146,17 +149,37 @@ private function configureErrorListener(ContainerBuilder $container, array $proc
146149
return;
147150
}
148151

152+
$this->tagExceptionListener($container);
149153
$this->tagConsoleErrorListener($container);
150154
}
151155

156+
/**
157+
* BC layer for Symfony < 4.3
158+
*/
159+
private function tagExceptionListener(ContainerBuilder $container): void
160+
{
161+
$listener = $container->getDefinition(ErrorListener::class);
162+
$method = class_exists(ExceptionEvent::class)
163+
? 'onException'
164+
: 'onKernelException';
165+
166+
$tagAttributes = [
167+
'event' => KernelEvents::EXCEPTION,
168+
'method' => $method,
169+
'priority' => '%sentry.listener_priorities.request_error%',
170+
];
171+
172+
$listener->addTag('kernel.event_listener', $tagAttributes);
173+
}
174+
152175
/**
153176
* BC layer for Symfony < 3.3; see https://symfony.com/blog/new-in-symfony-3-3-better-handling-of-command-exceptions
154177
*/
155178
private function tagConsoleErrorListener(ContainerBuilder $container): void
156179
{
157180
$listener = $container->getDefinition(ErrorListener::class);
158181

159-
if (class_exists('Symfony\Component\Console\Event\ConsoleErrorEvent')) {
182+
if (class_exists(ConsoleErrorEvent::class)) {
160183
$tagAttributes = [
161184
'event' => ConsoleEvents::ERROR,
162185
'method' => 'onConsoleError',

src/EventListener/ErrorListener.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Sentry\State\HubInterface;
66
use Symfony\Component\Console\Event\ConsoleErrorEvent;
77
use Symfony\Component\Console\Event\ConsoleExceptionEvent;
8+
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
89
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
910

1011
final class ErrorListener
@@ -21,6 +22,14 @@ public function __construct(HubInterface $hub)
2122
$this->hub = $hub; // not used, needed to trigger instantiation
2223
}
2324

25+
public function onException(ExceptionEvent $event): void
26+
{
27+
\Sentry\captureException($event->getThrowable());
28+
}
29+
30+
/**
31+
* BC layer for Symfony < 4.3
32+
*/
2433
public function onKernelException(GetResponseForExceptionEvent $event): void
2534
{
2635
\Sentry\captureException($event->getException());

src/Resources/config/services.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232

3333
<service id="Sentry\SentryBundle\EventListener\ErrorListener" class="Sentry\SentryBundle\EventListener\ErrorListener" public="false">
3434
<argument type="service" id="Sentry\State\HubInterface" />
35-
<tag name="kernel.event_listener" event="kernel.exception" method="onKernelException" priority="%sentry.listener_priorities.request_error%" />
35+
<!-- The following tag is done manually in PHP for BC with Symfony < 4.3, -->
36+
<!-- <tag name="kernel.event_listener" event="kernel.exception" method="onException" priority="%sentry.listener_priorities.request_error%" />-->
3637
<!-- The following tag is done manually in PHP for BC with Symfony < 3.3 -->
3738
<!-- <tag name="kernel.event_listener" event="console.error" method="onConsoleError" priority="%sentry.listener_priorities.console_error%" />-->
3839
</service>

src/SentryBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public static function setCurrentHub(HubInterface $hub): void
3737
{
3838
if (class_exists(SentrySdk::class)) {
3939
SentrySdk::setCurrentHub($hub);
40+
41+
return;
4042
}
4143

4244
Hub::setCurrent($hub);

test/BaseTestCase.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
use PHPUnit\Framework\TestCase;
66
use Sentry\Options;
7+
use Sentry\SentrySdk;
8+
use Sentry\State\Hub;
9+
use Sentry\State\HubInterface;
710

811
abstract class BaseTestCase extends TestCase
912
{
@@ -31,4 +34,13 @@ protected function getSupportedOptionsCount(): int
3134

3235
return $count;
3336
}
37+
38+
protected function setCurrentHub(HubInterface $hub): void
39+
{
40+
if (class_exists(SentrySdk::class)) {
41+
SentrySdk::setCurrentHub($hub);
42+
} else {
43+
Hub::setCurrent($hub);
44+
}
45+
}
3446
}

0 commit comments

Comments
 (0)