14
14
use PHPUnit \Framework \TestCase ;
15
15
use Symfony \Bridge \Monolog \Processor \RouteProcessor ;
16
16
use Symfony \Component \HttpFoundation \ParameterBag ;
17
+ use Symfony \Component \HttpKernel \Event \FinishRequestEvent ;
17
18
use Symfony \Component \HttpKernel \Event \GetResponseEvent ;
18
19
19
20
class RouteProcessorTest extends TestCase
@@ -29,10 +30,11 @@ public function testProcessor()
29
30
30
31
$ record = $ processor (array ('extra ' => array ()));
31
32
32
- $ this ->assertArrayHasKey ('route ' , $ record ['extra ' ]);
33
+ $ this ->assertArrayHasKey ('requests ' , $ record ['extra ' ]);
34
+ $ this ->assertCount (1 , $ record ['extra ' ]['requests ' ]);
33
35
$ this ->assertEquals (
34
36
array ('controller ' => self ::TEST_CONTROLLER , 'route ' => self ::TEST_ROUTE , 'route_params ' => self ::TEST_PARAMS ),
35
- $ record ['extra ' ]['route ' ]
37
+ $ record ['extra ' ]['requests ' ][ 0 ]
36
38
);
37
39
}
38
40
@@ -43,13 +45,59 @@ public function testProcessorWithoutParams()
43
45
44
46
$ record = $ processor (array ('extra ' => array ()));
45
47
46
- $ this ->assertArrayHasKey ('route ' , $ record ['extra ' ]);
48
+ $ this ->assertArrayHasKey ('requests ' , $ record ['extra ' ]);
49
+ $ this ->assertCount (1 , $ record ['extra ' ]['requests ' ]);
47
50
$ this ->assertEquals (
48
51
array ('controller ' => self ::TEST_CONTROLLER , 'route ' => self ::TEST_ROUTE ),
49
- $ record ['extra ' ]['route ' ]
52
+ $ record ['extra ' ]['requests ' ][ 0 ]
50
53
);
51
54
}
52
55
56
+ public function testProcessorWithSubRequests ()
57
+ {
58
+ $ controllerFromSubRequest = 'OtherController::otherMethod ' ;
59
+
60
+ $ processor = new RouteProcessor (false );
61
+ $ processor ->onKernelRequest ($ this ->getFilledRequestEvent ());
62
+ $ processor ->onKernelRequest ($ this ->getFilledRequestEvent ($ controllerFromSubRequest ));
63
+
64
+ $ record = $ processor (array ('extra ' => array ()));
65
+
66
+ $ this ->assertArrayHasKey ('requests ' , $ record ['extra ' ]);
67
+ $ this ->assertCount (2 , $ record ['extra ' ]['requests ' ]);
68
+ $ this ->assertEquals (
69
+ array ('controller ' => self ::TEST_CONTROLLER , 'route ' => self ::TEST_ROUTE ),
70
+ $ record ['extra ' ]['requests ' ][0 ]
71
+ );
72
+ $ this ->assertEquals (
73
+ array ('controller ' => $ controllerFromSubRequest , 'route ' => self ::TEST_ROUTE ),
74
+ $ record ['extra ' ]['requests ' ][1 ]
75
+ );
76
+ }
77
+
78
+ public function testFinishRequestRemovesLastEntry ()
79
+ {
80
+ $ controllerFromSubRequest = 'OtherController::otherMethod ' ;
81
+
82
+ $ processor = new RouteProcessor (false );
83
+ $ processor ->onKernelRequest ($ this ->getFilledRequestEvent ());
84
+ $ processor ->onKernelRequest ($ this ->getFilledRequestEvent ($ controllerFromSubRequest ));
85
+ $ processor ->onKernelFinishRequest ($ this ->getFinishRequestEvent ());
86
+ $ record = $ processor (array ('extra ' => array ()));
87
+
88
+ $ this ->assertArrayHasKey ('requests ' , $ record ['extra ' ]);
89
+ $ this ->assertCount (1 , $ record ['extra ' ]['requests ' ]);
90
+ $ this ->assertEquals (
91
+ array ('controller ' => self ::TEST_CONTROLLER , 'route ' => self ::TEST_ROUTE ),
92
+ $ record ['extra ' ]['requests ' ][0 ]
93
+ );
94
+
95
+ $ processor ->onKernelFinishRequest ($ this ->getFinishRequestEvent ());
96
+ $ record = $ processor (array ('extra ' => array ()));
97
+
98
+ $ this ->assertArrayNotHasKey ('requests ' , $ record ['extra ' ]);
99
+ }
100
+
53
101
public function testProcessorWithEmptyRequest ()
54
102
{
55
103
$ processor = new RouteProcessor ();
@@ -67,6 +115,17 @@ public function testProcessorDoesNothingWhenNoRequest()
67
115
$ this ->assertEquals (array ('extra ' => array ()), $ record );
68
116
}
69
117
118
+ private function getFinishRequestEvent (array $ attributes = array ('_controller ' => 'test::test ' )): FinishRequestEvent
119
+ {
120
+ $ request = new \stdClass ();
121
+ $ request ->attributes = new ParameterBag ($ attributes );
122
+
123
+ $ event = $ this ->getMockBuilder (FinishRequestEvent::class)->disableOriginalConstructor ()->getMock ();
124
+ $ event ->method ('getRequest ' )->willReturn ($ request );
125
+
126
+ return $ event ;
127
+ }
128
+
70
129
private function getRequestEvent (array $ attributes ): GetResponseEvent
71
130
{
72
131
$ request = new \stdClass ();
@@ -83,11 +142,11 @@ private function getEmptyRequestEvent(): GetResponseEvent
83
142
return $ this ->getRequestEvent (array ());
84
143
}
85
144
86
- private function getFilledRequestEvent (): GetResponseEvent
145
+ private function getFilledRequestEvent (string $ controller = self :: TEST_CONTROLLER ): GetResponseEvent
87
146
{
88
147
return $ this ->getRequestEvent (
89
148
array (
90
- '_controller ' => self :: TEST_CONTROLLER ,
149
+ '_controller ' => $ controller ,
91
150
'_route ' => self ::TEST_ROUTE ,
92
151
'_route_params ' => self ::TEST_PARAMS ,
93
152
)
0 commit comments