Skip to content

Commit d55efe9

Browse files
Gordienko Vladislavnicolas-grekas
authored andcommitted
[HttpKernel] Tests for DataCollector
1 parent e4651b2 commit d55efe9

File tree

3 files changed

+183
-1
lines changed

3 files changed

+183
-1
lines changed

DataCollector/TimeDataCollector.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public function __construct(KernelInterface $kernel = null, Stopwatch $stopwatch
3131
{
3232
$this->kernel = $kernel;
3333
$this->stopwatch = $stopwatch;
34+
$this->data = ['events' => [], 'stopwatch_installed' => false, 'start_time' => 0];
3435
}
3536

3637
/**
@@ -57,7 +58,7 @@ public function collect(Request $request, Response $response, \Throwable $except
5758
*/
5859
public function reset()
5960
{
60-
$this->data = [];
61+
$this->data = ['events' => [], 'stopwatch_installed' => false, 'start_time' => 0];
6162

6263
if (null !== $this->stopwatch) {
6364
$this->stopwatch->reset();
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?php
2+
3+
namespace Symfony\Component\HttpKernel\Tests\DataCollector;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use Symfony\Component\HttpFoundation\RedirectResponse;
7+
use Symfony\Component\HttpFoundation\Request;
8+
use Symfony\Component\HttpFoundation\Response;
9+
use Symfony\Component\HttpKernel\DataCollector\RouterDataCollector;
10+
use Symfony\Component\HttpKernel\Event\ControllerEvent;
11+
use Symfony\Component\HttpKernel\KernelInterface;
12+
13+
class RouterDataCollectorTest extends TestCase
14+
{
15+
public function testRouteRedirectResponse()
16+
{
17+
$collector = new RouterDataCollector();
18+
19+
$request = Request::create('http://test.com/foo?bar=baz');
20+
$response = new RedirectResponse('http://test.com/redirect');
21+
22+
$event = $this->createControllerEvent($request);
23+
24+
$collector->onKernelController($event);
25+
$collector->collect($request, $response);
26+
27+
$this->assertTrue($collector->getRedirect());
28+
$this->assertEquals('http://test.com/redirect', $collector->getTargetUrl());
29+
$this->assertEquals('n/a', $collector->getTargetRoute());
30+
}
31+
32+
public function testRouteNotRedirectResponse()
33+
{
34+
$collector = new RouterDataCollector();
35+
36+
$request = Request::create('http://test.com/foo?bar=baz');
37+
$response = new Response('test');
38+
39+
$event = $this->createControllerEvent($request);
40+
41+
$collector->onKernelController($event);
42+
$collector->collect($request, $response);
43+
44+
$this->assertFalse($collector->getRedirect());
45+
$this->assertNull($collector->getTargetUrl());
46+
$this->assertNull($collector->getTargetRoute());
47+
}
48+
49+
public function testReset()
50+
{
51+
$collector = new RouterDataCollector();
52+
53+
// Fill Collector
54+
$request = Request::create('http://test.com/foo?bar=baz');
55+
$response = new RedirectResponse('http://test.com/redirect');
56+
$event = $this->createControllerEvent($request);
57+
$collector->onKernelController($event);
58+
$collector->collect($request, $response);
59+
60+
$collector->reset();
61+
62+
$this->assertFalse($collector->getRedirect());
63+
$this->assertNull($collector->getTargetUrl());
64+
$this->assertNull($collector->getTargetRoute());
65+
}
66+
67+
public function testGetName()
68+
{
69+
$collector = new RouterDataCollector();
70+
71+
$this->assertEquals('router', $collector->getName());
72+
}
73+
74+
protected function createControllerEvent(Request $request): ControllerEvent
75+
{
76+
$kernel = $this->createMock(KernelInterface::class);
77+
78+
return new ControllerEvent($kernel, function () {}, $request, null);
79+
}
80+
}

Tests/DataCollector/TimeDataCollectorTest.php

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\HttpKernel\DataCollector\TimeDataCollector;
1818
use Symfony\Component\HttpKernel\KernelInterface;
1919
use Symfony\Component\Stopwatch\Stopwatch;
20+
use Symfony\Component\Stopwatch\StopwatchEvent;
2021

2122
/**
2223
* @group time-sensitive
@@ -55,4 +56,104 @@ public function testCollect()
5556
$this->assertEquals(123456000, $c->getStartTime());
5657
$this->assertSame(class_exists(Stopwatch::class, false), $c->isStopwatchInstalled());
5758
}
59+
60+
public function testReset()
61+
{
62+
$collector = new TimeDataCollector();
63+
64+
// Fill Collector
65+
$request = Request::create('http://test.com/foo?bar=baz');
66+
$response = new Response('test');
67+
$collector->collect($request, $response);
68+
69+
$collector->reset();
70+
71+
$this->assertEquals([], $collector->getEvents());
72+
$this->assertEquals(0, $collector->getStartTime());
73+
$this->assertFalse($collector->isStopwatchInstalled());
74+
}
75+
76+
public function testLateCollect()
77+
{
78+
$stopwatch = new Stopwatch();
79+
$stopwatch->start('test');
80+
81+
$collector = new TimeDataCollector(null, $stopwatch);
82+
83+
$request = new Request();
84+
$request->attributes->set('_stopwatch_token', '__root__');
85+
86+
$collector->collect($request, new Response());
87+
$collector->lateCollect();
88+
89+
$this->assertEquals(['test'], array_keys($collector->getEvents()));
90+
}
91+
92+
public function testSetEvents()
93+
{
94+
$collector = new TimeDataCollector();
95+
96+
$event = $this->createMock(StopwatchEvent::class);
97+
$event->expects($this->once())->method('ensureStopped');
98+
99+
$events = [$event];
100+
101+
$collector->setEvents($events);
102+
103+
$this->assertCount(1, $collector->getEvents());
104+
}
105+
106+
public function testGetDurationHasEvents()
107+
{
108+
$collector = new TimeDataCollector();
109+
110+
$request = new Request();
111+
$request->server->set('REQUEST_TIME_FLOAT', 1);
112+
$collector->collect($request, new Response());
113+
114+
$event = $this->createMock(StopwatchEvent::class);
115+
$event->expects($this->once())->method('getDuration')->willReturn(2000.0);
116+
$event->expects($this->once())->method('getOrigin')->willReturn(1000.0);
117+
$events = ['__section__' => $event];
118+
$collector->setEvents($events);
119+
120+
$this->assertEquals(1000 + 2000 - 1000, $collector->getDuration());
121+
}
122+
123+
public function testGetDurationNotEvents()
124+
{
125+
$collector = new TimeDataCollector();
126+
127+
$this->assertEquals(0, $collector->getDuration());
128+
}
129+
130+
public function testGetInitTimeNotEvents()
131+
{
132+
$collector = new TimeDataCollector();
133+
134+
$this->assertEquals(0, $collector->getInitTime());
135+
}
136+
137+
public function testGetInitTimeHasEvents()
138+
{
139+
$collector = new TimeDataCollector();
140+
141+
$request = new Request();
142+
$request->server->set('REQUEST_TIME_FLOAT', 1);
143+
$collector->collect($request, new Response());
144+
145+
$event = $this->createMock(StopwatchEvent::class);
146+
$event->expects($this->once())->method('getOrigin')->willReturn(2000.0);
147+
$events = ['__section__' => $event];
148+
$collector->setEvents($events);
149+
150+
$this->assertEquals(2000 - 1000, $collector->getInitTime());
151+
}
152+
153+
public function testGetName()
154+
{
155+
$collector = new TimeDataCollector();
156+
157+
$this->assertEquals('time', $collector->getName());
158+
}
58159
}

0 commit comments

Comments
 (0)