Skip to content

Commit e04ffc3

Browse files
authored
Add functional test for issue #130 (DI state across kernel reboots) (#52)
1 parent fd49410 commit e04ffc3

6 files changed

Lines changed: 101 additions & 26 deletions

File tree

composer.lock

Lines changed: 28 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/routes.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Controller\BrowserController;
66
use App\Controller\DashboardController;
77
use App\Controller\DomCrawlerController;
8+
use App\Controller\ExternalApiController;
89
use App\Controller\FormController;
910
use App\Controller\HomeController;
1011
use App\Controller\HttpClientController;
@@ -17,6 +18,10 @@
1718
->controller(HomeController::class)
1819
->methods(['GET']);
1920

21+
$routes->add('app_external_api', '/external-api')
22+
->controller(ExternalApiController::class)
23+
->methods(['GET']);
24+
2025
$routes->add('app_login', '/login')
2126
->controller([SecurityController::class, 'login'])
2227
->methods(['GET', 'POST']);

config/services.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,7 @@
5959
'entity' => User::class,
6060
'lazy' => true,
6161
]);
62+
63+
$services->set(App\Service\ExternalApiStub::class)
64+
->public();
6265
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Controller;
6+
7+
use App\Service\ExternalApiStub;
8+
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
9+
use Symfony\Component\HttpFoundation\Response;
10+
11+
final class ExternalApiController extends AbstractController
12+
{
13+
public function __construct(
14+
private readonly ExternalApiStub $externalApi,
15+
) {
16+
}
17+
18+
public function __invoke(): Response
19+
{
20+
return new Response($this->externalApi->getResponse());
21+
}
22+
}

src/Service/ExternalApiStub.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Service;
6+
7+
/**
8+
* A stand-in for an external API client whose response can be faked at runtime.
9+
*/
10+
final class ExternalApiStub
11+
{
12+
public const REAL_RESPONSE = 'Real API response';
13+
14+
private string $response = self::REAL_RESPONSE;
15+
16+
public function setFakeResponse(string $response): void
17+
{
18+
$this->response = $response;
19+
}
20+
21+
public function getResponse(): string
22+
{
23+
return $this->response;
24+
}
25+
}

tests/Functional/IssuesCest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use App\Doctrine\FlushCounterListener;
1010
use App\Doctrine\RequestStackListener;
1111
use App\Entity\User;
12+
use App\Service\ExternalApiStub;
1213
use App\Tests\Support\FunctionalTester;
1314
use Doctrine\DBAL\Connection;
1415
use Symfony\Component\Mime\Message;
@@ -132,4 +133,21 @@ public function ensureMessageObjectsCanBeFetched(FunctionalTester $I)
132133
$I->assertEmailHeaderSame('Subject', 'Text message');
133134
$I->assertInstanceOf(Message::class, $I->grabLastSentEmail());
134135
}
136+
137+
/**
138+
* @see https://github.com/Codeception/module-symfony/issues/130
139+
*/
140+
public function keepConfiguredServiceStateAcrossKernelReboot(FunctionalTester $I)
141+
{
142+
$I->amOnPage('/external-api');
143+
$I->see(ExternalApiStub::REAL_RESPONSE);
144+
145+
/** @var ExternalApiStub $externalApi */
146+
$externalApi = $I->grabService(ExternalApiStub::class);
147+
$externalApi->setFakeResponse('Faked API response');
148+
$I->persistService(ExternalApiStub::class);
149+
150+
$I->amOnPage('/external-api');
151+
$I->see('Faked API response');
152+
}
135153
}

0 commit comments

Comments
 (0)