@@ -98,21 +98,60 @@ public function testPassingUserHashNotAllowed($arg, $options)
9898 public function testUserHashAnonymous ($ arg , $ options )
9999 {
100100 $ userContextListener = new UserContextListener ($ arg );
101-
102101 $ request = new Request ();
103102
104- $ event = new CacheEvent ($ this ->kernel , $ request );
105-
106- $ userContextListener ->preHandle ($ event );
107- $ response = $ event ->getResponse ();
108-
109- $ this ->assertNull ($ response );
110103 if ($ options ['anonymous_hash ' ]) {
104+ $ event = new CacheEvent ($ this ->kernel , $ request );
105+ $ userContextListener ->preHandle ($ event );
106+
111107 $ this ->assertTrue ($ request ->headers ->has ($ options ['user_hash_header ' ]));
112108 $ this ->assertSame ($ options ['anonymous_hash ' ], $ request ->headers ->get ($ options ['user_hash_header ' ]));
113109 } else {
114- $ this ->assertFalse ($ request ->headers ->has ($ options ['user_hash_header ' ]));
110+ $ hashRequest = Request::create ($ options ['user_hash_uri ' ], $ options ['user_hash_method ' ], [], [], [], $ request ->server ->all ());
111+ $ hashRequest ->attributes ->set ('internalRequest ' , true );
112+ $ hashRequest ->headers ->set ('Accept ' , $ options ['user_hash_accept_header ' ]);
113+ // Ensure request properties have been filled up.
114+ $ hashRequest ->getPathInfo ();
115+ $ hashRequest ->getMethod ();
116+
117+ $ expectedContextHash = 'my_generated_hash ' ;
118+ // Just avoid the response to modify the request object, otherwise it's impossible to test objects equality.
119+ /** @var \Symfony\Component\HttpFoundation\Response|\PHPUnit_Framework_MockObject_MockObject $hashResponse */
120+ $ hashResponse = $ this ->getMockBuilder ('\Symfony\Component\HttpFoundation\Response ' )
121+ ->setMethods (['prepare ' ])
122+ ->getMock ();
123+ $ hashResponse ->headers ->set ($ options ['user_hash_header ' ], $ expectedContextHash );
124+
125+ $ that = $ this ;
126+ $ kernel = $ this ->kernel
127+ ->shouldReceive ('handle ' )
128+ ->once ()
129+ ->with (
130+ \Mockery::on (
131+ function (Request $ request ) use ($ that , $ hashRequest ) {
132+ // we need to call some methods to get the internal fields initialized
133+ $ request ->getMethod ();
134+ $ request ->getPathInfo ();
135+ $ that ->assertEquals ($ hashRequest , $ request );
136+ $ that ->assertCount (0 , $ request ->cookies ->all ());
137+
138+ return true ;
139+ }
140+ )
141+ )
142+ ->andReturn ($ hashResponse )
143+ ->getMock ();
144+
145+ $ event = new CacheEvent ($ kernel , $ request );
146+ $ userContextListener ->preHandle ($ event );
147+
148+ $ this ->assertTrue ($ request ->headers ->has ($ options ['user_hash_header ' ]));
149+ $ this ->assertSame ($ expectedContextHash , $ request ->headers ->get ($ options ['user_hash_header ' ]));
115150 }
151+
152+ $ response = $ event ->getResponse ();
153+
154+ $ this ->assertNull ($ response );
116155 }
117156
118157 /**
0 commit comments