Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 6f0f764

Browse filesBrowse files
committed
write a separate test for streamed response and remove MockedStreamedResponse class
1 parent 70b2ba6 commit 6f0f764
Copy full SHA for 6f0f764

File tree

4 files changed

+437
-139
lines changed
Filter options

4 files changed

+437
-139
lines changed

‎src/Symfony/Bundle/WebProfilerBundle/EventListener/WebDebugToolbarListener.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/WebProfilerBundle/EventListener/WebDebugToolbarListener.php
+9-2Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,14 @@ public function onKernelResponse(ResponseEvent $event): void
111111
$session->getFlashBag()->setAll($session->getFlashBag()->peekAll());
112112
}
113113

114-
$response->setContent($this->twig->render('@WebProfiler/Profiler/toolbar_redirect.html.twig', ['location' => $response->headers->get('Location'), 'host' => $request->getSchemeAndHttpHost()]));
114+
if ($response instanceof StreamedResponse) {
115+
$twig = $this->twig;
116+
$response->setCallback(function () use ($twig, $request, $response): void {
117+
echo $twig->render('@WebProfiler/Profiler/toolbar_redirect.html.twig', ['location' => $response->headers->get('Location'), 'host' => $request->getSchemeAndHttpHost()]);
118+
});
119+
} else {
120+
$response->setContent($this->twig->render('@WebProfiler/Profiler/toolbar_redirect.html.twig', ['location' => $response->headers->get('Location'), 'host' => $request->getSchemeAndHttpHost()]));
121+
}
115122
$response->setStatusCode(200);
116123
$response->headers->remove('Location');
117124
}
@@ -136,7 +143,7 @@ protected function injectToolbar(Response $response, Request $request, array $no
136143
{
137144
if ($response instanceof StreamedResponse) {
138145
$callback = $response->getCallback();
139-
$toolbarHTMLContent = $this->getToolbarHTML($request, $response->headers->get('X-Debug-Token'), $nonces);
146+
$toolbarHTMLContent = "\n".str_replace("\n", '', $this->getToolbarHTML($request, $response->headers->get('X-Debug-Token'), $nonces))."\n";
140147
$injectedCallback = static function () use ($toolbarHTMLContent, $callback): void {
141148
ob_start(function (string $buffer, int $phase) use ($toolbarHTMLContent): string {
142149
$pos = strripos($buffer, '</body>');

‎src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/MockedStreamedResponse.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/MockedStreamedResponse.php
-38Lines changed: 0 additions & 38 deletions
This file was deleted.

‎src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php
+42-99Lines changed: 42 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -28,49 +28,32 @@ class WebDebugToolbarListenerTest extends TestCase
2828
/**
2929
* @dataProvider getInjectToolbarTests
3030
*/
31-
public function testInjectToolbar(Response $response, string $expected)
31+
public function testInjectToolbar(string $content, string $expected)
3232
{
3333
$listener = new WebDebugToolbarListener($this->getTwigMock());
3434
$m = new \ReflectionMethod($listener, 'injectToolbar');
3535

36+
$response = new Response($content);
37+
3638
$m->invoke($listener, $response, Request::create('/'), ['csp_script_nonce' => 'scripto', 'csp_style_nonce' => 'stylo']);
3739
$this->assertEquals($expected, $response->getContent());
3840
}
3941

4042
public static function getInjectToolbarTests()
4143
{
4244
return [
43-
[new Response('<html><head></head><body></body></html>'), "<html><head></head><body>\nWDT\n</body></html>"],
44-
[new Response('<html>
45+
['<html><head></head><body></body></html>', "<html><head></head><body>\nWDT\n</body></html>"],
46+
['<html>
4547
<head></head>
4648
<body>
4749
<textarea><html><head></head><body></body></html></textarea>
4850
</body>
49-
</html>'), "<html>
51+
</html>', "<html>
5052
<head></head>
5153
<body>
5254
<textarea><html><head></head><body></body></html></textarea>
5355
\nWDT\n</body>
5456
</html>"],
55-
[
56-
MockedStreamedResponse::createFromContent('<html><head></head><body></body></html>'),
57-
'<html><head></head><body>WDT</body></html>',
58-
],
59-
[
60-
MockedStreamedResponse::createFromContent(
61-
'<html>
62-
<head></head>
63-
<body>
64-
<textarea><html><head></head><body></body></html></textarea>
65-
</body>
66-
</html>'),
67-
'<html>
68-
<head></head>
69-
<body>
70-
<textarea><html><head></head><body></body></html></textarea>
71-
WDT</body>
72-
</html>',
73-
],
7457
];
7558
}
7659

@@ -92,7 +75,7 @@ public function testHtmlRedirectionIsIntercepted(int $statusCode)
9275

9376
public function testNonHtmlRedirectionIsNotIntercepted()
9477
{
95-
$response = new Response('Some content', '301');
78+
$response = new Response('Some content', 301);
9679
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
9780
$event = new ResponseEvent($this->createMock(Kernel::class), new Request([], [], ['_format' => 'json']), HttpKernelInterface::MAIN_REQUEST, $response);
9881

@@ -103,77 +86,49 @@ public function testNonHtmlRedirectionIsNotIntercepted()
10386
$this->assertEquals('Some content', $response->getContent());
10487
}
10588

106-
/**
107-
* @dataProvider provideInjectedResponse
108-
*/
109-
public function testToolbarIsInjected(Response $response, string $expected)
89+
public function testToolbarIsInjected()
11090
{
91+
$response = new Response('<html><head></head><body></body></html>');
11192
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
11293

11394
$event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MAIN_REQUEST, $response);
11495

11596
$listener = new WebDebugToolbarListener($this->getTwigMock());
11697
$listener->onKernelResponse($event);
11798

118-
$this->assertEquals($expected, $response->getContent());
119-
}
120-
121-
public static function provideInjectedResponse(): array
122-
{
123-
return [
124-
[new Response('<html><head></head><body></body></html>'), "<html><head></head><body>\nWDT\n</body></html>"],
125-
[MockedStreamedResponse::createFromContent('<html><head></head><body></body></html>'), '<html><head></head><body>WDT</body></html>'],
126-
];
127-
}
128-
129-
public static function provideNotInjectedResponse(): array
130-
{
131-
return [
132-
[new Response('<html><head></head><body></body></html>'), '<html><head></head><body></body></html>'],
133-
[MockedStreamedResponse::createFromContent('<html><head></head><body></body></html>'), '<html><head></head><body></body></html>'],
134-
];
135-
}
136-
137-
public static function provideEmptyResponse(): array
138-
{
139-
return [
140-
[new Response()],
141-
[MockedStreamedResponse::createFromContent()],
142-
];
99+
$this->assertEquals("<html><head></head><body>\nWDT\n</body></html>", $response->getContent());
143100
}
144101

145102
/**
146103
* @depends testToolbarIsInjected
147-
*
148-
* @dataProvider provideNotInjectedResponse
149104
*/
150-
public function testToolbarIsNotInjectedOnNonHtmlContentType(Response $response, string $expected)
105+
public function testToolbarIsNotInjectedOnNonHtmlContentType()
151106
{
107+
$response = new Response('<html><head></head><body></body></html>');
152108
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
153109
$response->headers->set('Content-Type', 'text/xml');
154110
$event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MAIN_REQUEST, $response);
155111

156112
$listener = new WebDebugToolbarListener($this->getTwigMock());
157113
$listener->onKernelResponse($event);
158114

159-
$this->assertEquals($expected, $response->getContent());
115+
$this->assertEquals('<html><head></head><body></body></html>', $response->getContent());
160116
}
161117

162118
/**
163119
* @depends testToolbarIsInjected
164-
*
165-
* @dataProvider provideNotInjectedResponse
166120
*/
167-
public function testToolbarIsNotInjectedOnContentDispositionAttachment(Response $response, string $expected)
121+
public function testToolbarIsNotInjectedOnContentDispositionAttachment()
168122
{
123+
$response = new Response('<html><head></head><body></body></html>');
169124
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
170125
$response->headers->set('Content-Disposition', 'attachment; filename=test.html');
171126
$event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MAIN_REQUEST, $response);
172127

173128
$listener = new WebDebugToolbarListener($this->getTwigMock());
174129
$listener->onKernelResponse($event);
175130

176-
$this->assertEquals($expected, $response->getContent());
131+
$this->assertEquals('<html><head></head><body></body></html>', $response->getContent());
177132
}
178133

179134
/**
@@ -203,34 +158,33 @@ public static function provideRedirects(): array
203158

204159
/**
205160
* @depends testToolbarIsInjected
206-
*
207-
* @dataProvider provideNotInjectedResponse
208161
*/
209-
public function testToolbarIsNotInjectedWhenThereIsNoNoXDebugTokenResponseHeader(Response $response, string $expected)
162+
public function testToolbarIsNotInjectedWhenThereIsNoNoXDebugTokenResponseHeader()
210163
{
164+
$response = new Response('<html><head></head><body></body></html>');
165+
211166
$event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MAIN_REQUEST, $response);
212167

213168
$listener = new WebDebugToolbarListener($this->getTwigMock());
214169
$listener->onKernelResponse($event);
215170

216-
$this->assertEquals($expected, $response->getContent());
171+
$this->assertEquals('<html><head></head><body></body></html>', $response->getContent());
217172
}
218173

219174
/**
220175
* @depends testToolbarIsInjected
221-
*
222-
* @dataProvider provideNotInjectedResponse
223176
*/
224-
public function testToolbarIsNotInjectedWhenOnSubRequest(Response $response, string $expected)
177+
public function testToolbarIsNotInjectedWhenOnSubRequest()
225178
{
179+
$response = new Response('<html><head></head><body></body></html>');
226180
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
227181

228182
$event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::SUB_REQUEST, $response);
229183

230184
$listener = new WebDebugToolbarListener($this->getTwigMock());
231185
$listener->onKernelResponse($event);
232186

233-
$this->assertEquals($expected, $response->getContent());
187+
$this->assertEquals('<html><head></head><body></body></html>', $response->getContent());
234188
}
235189

236190
/**
@@ -251,11 +205,10 @@ public function testToolbarIsNotInjectedOnIncompleteHtmlResponses()
251205

252206
/**
253207
* @depends testToolbarIsInjected
254-
*
255-
* @dataProvider provideNotInjectedResponse
256208
*/
257-
public function testToolbarIsNotInjectedOnXmlHttpRequests(Response $response, string $expected)
209+
public function testToolbarIsNotInjectedOnXmlHttpRequests()
258210
{
211+
$response = new Response('<html><head></head><body></body></html>');
259212
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
260213

261214
$request = new Request();
@@ -266,31 +219,28 @@ public function testToolbarIsNotInjectedOnXmlHttpRequests(Response $response, st
266219
$listener = new WebDebugToolbarListener($this->getTwigMock());
267220
$listener->onKernelResponse($event);
268221

269-
$this->assertEquals($expected, $response->getContent());
222+
$this->assertEquals('<html><head></head><body></body></html>', $response->getContent());
270223
}
271224

272225
/**
273226
* @depends testToolbarIsInjected
274-
*
275-
* @dataProvider provideNotInjectedResponse
276227
*/
277-
public function testToolbarIsNotInjectedOnNonHtmlRequests(Response $response, string $expected)
228+
public function testToolbarIsNotInjectedOnNonHtmlRequests()
278229
{
230+
$response = new Response('<html><head></head><body></body></html>');
279231
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
280232

281233
$event = new ResponseEvent($this->createMock(Kernel::class), new Request([], [], ['_format' => 'json']), HttpKernelInterface::MAIN_REQUEST, $response);
282234

283235
$listener = new WebDebugToolbarListener($this->getTwigMock());
284236
$listener->onKernelResponse($event);
285237

286-
$this->assertEquals($expected, $response->getContent());
238+
$this->assertEquals('<html><head></head><body></body></html>', $response->getContent());
287239
}
288240

289-
/**
290-
* @dataProvider provideEmptyResponse
291-
*/
292-
public function testXDebugUrlHeader(Response $response)
241+
public function testXDebugUrlHeader()
293242
{
243+
$response = new Response();
294244
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
295245

296246
$urlGenerator = $this->createMock(UrlGeneratorInterface::class);
@@ -309,11 +259,9 @@ public function testXDebugUrlHeader(Response $response)
309259
$this->assertEquals('http://mydomain.com/_profiler/xxxxxxxx', $response->headers->get('X-Debug-Token-Link'));
310260
}
311261

312-
/**
313-
* @dataProvider provideEmptyResponse
314-
*/
315-
public function testThrowingUrlGenerator(Response $response)
262+
public function testThrowingUrlGenerator()
316263
{
264+
$response = new Response();
317265
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
318266

319267
$urlGenerator = $this->createMock(UrlGeneratorInterface::class);
@@ -332,11 +280,9 @@ public function testThrowingUrlGenerator(Response $response)
332280
$this->assertEquals('Exception: foo', $response->headers->get('X-Debug-Error'));
333281
}
334282

335-
/**
336-
* @dataProvider provideEmptyResponse
337-
*/
338-
public function testThrowingErrorCleanup(Response $response)
283+
public function testThrowingErrorCleanup()
339284
{
285+
$response = new Response();
340286
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
341287

342288
$urlGenerator = $this->createMock(UrlGeneratorInterface::class);
@@ -355,11 +301,9 @@ public function testThrowingErrorCleanup(Response $response)
355301
$this->assertEquals('Exception: This multiline tabbed text should come out on a single plain line', $response->headers->get('X-Debug-Error'));
356302
}
357303

358-
/**
359-
* @dataProvider provideInjectedResponse
360-
*/
361-
public function testCspIsDisabledIfDumperWasUsed(Response $response, string $expected)
304+
public function testCspIsDisabledIfDumperWasUsed()
362305
{
306+
$response = new Response('<html><head></head><body></body></html>');
363307
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
364308

365309
$event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MAIN_REQUEST, $response);
@@ -375,14 +319,12 @@ public function testCspIsDisabledIfDumperWasUsed(Response $response, string $exp
375319
$listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, null, '', $cspHandler, $dumpDataCollector);
376320
$listener->onKernelResponse($event);
377321

378-
$this->assertEquals($expected, $response->getContent());
322+
$this->assertEquals("<html><head></head><body>\nWDT\n</body></html>", $response->getContent());
379323
}
380324

381-
/**
382-
* @dataProvider provideInjectedResponse
383-
*/
384-
public function testCspIsKeptEnabledIfDumperWasNotUsed(Response $response, string $expected)
325+
public function testCspIsKeptEnabledIfDumperWasNotUsed()
385326
{
327+
$response = new Response('<html><head></head><body></body></html>');
386328
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
387329

388330
$event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MAIN_REQUEST, $response);
@@ -398,7 +340,7 @@ public function testCspIsKeptEnabledIfDumperWasNotUsed(Response $response, strin
398340
$listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, null, '', $cspHandler, $dumpDataCollector);
399341
$listener->onKernelResponse($event);
400342

401-
$this->assertEquals($expected, $response->getContent());
343+
$this->assertEquals("<html><head></head><body>\nWDT\n</body></html>", $response->getContent());
402344
}
403345

404346
public function testNullContentTypeWithNoDebugEnv()
@@ -414,6 +356,7 @@ public function testNullContentTypeWithNoDebugEnv()
414356

415357
$this->expectNotToPerformAssertions();
416358
}
359+
417360
public function testAjaxReplaceHeaderOnDisabledToolbar()
418361
{
419362
$response = new Response();

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.