66
77use PHPUnit \Framework \TestCase ;
88use Symfony \Component \BrowserKit \AbstractBrowser ;
9- use Symfony \Component \BrowserKit \Cookie ;
9+ use Symfony \Component \HttpFoundation \Cookie ;
1010use Symfony \Component \HttpFoundation \Response ;
11- use Symfony \Component \Security \ Csrf \ TokenStorage \ SessionTokenStorage ;
11+ use Symfony \Component \HttpFoundation \ Session \ SessionInterface ;
1212
13+ use function assert ;
1314use function method_exists ;
1415use function Safe \sprintf ;
1516
@@ -52,42 +53,14 @@ protected static function getRequestClient(): AbstractBrowser
5253 ));
5354 }
5455
55- final public function generateCsrfToken (string $ tokenId ): string
56+ final public function generateCsrfToken (): string
5657 {
5758 $ client = self ::getRequestClient ();
5859
59- $ cookie = $ client ->getCookieJar ()->get ('MOCKSESSID ' );
60-
61- // create a new session object
62- $ container = $ client ->getContainer ();
63- $ session = $ container ->get ('session.factory ' )->createSession ();
64-
65- if ($ cookie ) {
66- // get the session id from the session cookie if it exists
67- $ session ->setId ($ cookie ->getValue ());
68- $ session ->start ();
69- } else {
70- // or create a new session id and a session cookie
71- $ session ->start ();
72- $ session ->save ();
73-
74- $ sessionCookie = new Cookie (
75- $ session ->getName (),
76- $ session ->getId (),
77- null ,
78- null ,
79- 'localhost ' ,
80- );
81- $ client ->getCookieJar ()->set ($ sessionCookie );
82- }
83-
8460 $ container = $ client ->getContainer ();
8561 $ tokenGenerator = $ container ->get ('security.csrf.token_generator ' );
86- $ csrfToken = $ tokenGenerator ->generateToken ();
87- $ session ->set (SessionTokenStorage::SESSION_NAMESPACE . '/ ' . $ tokenId , $ csrfToken );
88- $ session ->save ();
8962
90- return $ csrfToken ;
63+ return $ tokenGenerator -> generateToken () ;
9164 }
9265
9366 final protected function build (string $ method , string $ uri ): RequestBuilder
@@ -113,6 +86,10 @@ final protected function request(RequestBuilder $requestBuilder): Response
11386 {
11487 $ client = self ::getRequestClient ();
11588
89+ if ($ requestBuilder ->getSessionValues ()) {
90+ $ this ->applySessionValues ($ requestBuilder ->getSessionValues ());
91+ }
92+
11693 $ client ->request (
11794 $ requestBuilder ->getMethod (),
11895 $ requestBuilder ->getUri (),
@@ -125,4 +102,43 @@ final protected function request(RequestBuilder $requestBuilder): Response
125102
126103 return $ client ->getResponse ();
127104 }
105+
106+ /** @param array<string, mixed> $sessionValues */
107+ private function applySessionValues (array $ sessionValues ): void
108+ {
109+ $ client = self ::getRequestClient ();
110+ assert ($ client instanceof AbstractBrowser);
111+
112+ $ cookie = $ client ->getCookieJar ()->get ('MOCKSESSID ' );
113+
114+ // create a new session object
115+ $ container = $ client ->getContainer ();
116+ $ session = $ container ->get ('session.factory ' )->createSession ();
117+ assert ($ session instanceof SessionInterface);
118+
119+ if ($ cookie ) {
120+ // get the session id from the session cookie if it exists
121+ $ session ->setId ($ cookie ->getValue ());
122+ $ session ->start ();
123+ } else {
124+ // or create a new session id and a session cookie
125+ $ session ->start ();
126+ $ session ->save ();
127+
128+ $ sessionCookie = new Cookie (
129+ $ session ->getName (),
130+ $ session ->getId (),
131+ null ,
132+ null ,
133+ 'localhost ' ,
134+ );
135+ $ client ->getCookieJar ()->set ($ sessionCookie );
136+ }
137+
138+ foreach ($ sessionValues as $ key => $ value ) {
139+ $ session ->set ($ key , $ value );
140+ }
141+
142+ $ session ->save ();
143+ }
128144}
0 commit comments