Browse Source

Allow PSR7 requests to store the session as an attribute.

By allowing the session to exist on the PSR7 request, it will be easier
to implement integration test case flows and more importantly let people
access the session from their psr7 requests.
Mark Story 9 years ago
parent
commit
da39cd36cb
2 changed files with 18 additions and 0 deletions
  1. 1 0
      src/Http/RequestTransformer.php
  2. 17 0
      tests/TestCase/Http/RequestTransformerTest.php

+ 1 - 0
src/Http/RequestTransformer.php

@@ -57,6 +57,7 @@ class RequestTransformer
             'url' => $request->getUri()->getPath(),
             'base' => $request->getAttribute('base', ''),
             'webroot' => $request->getAttribute('webroot', '/'),
+            'session' => $request->getAttribute('session', null),
         ]);
     }
 

+ 17 - 0
tests/TestCase/Http/RequestTransformerTest.php

@@ -18,6 +18,7 @@ use Cake\Core\Configure;
 use Cake\Http\RequestTransformer;
 use Cake\Http\ServerRequestFactory;
 use Cake\Network\Request;
+use Cake\Network\Session;
 use Cake\TestSuite\TestCase;
 
 /**
@@ -259,4 +260,20 @@ class RequestTransformerTest extends TestCase
 
         $this->assertEquals('/thisapp', ini_get('session.cookie_path'));
     }
+
+    /**
+     * Test transforming session objects
+     *
+     * @return void
+     */
+    public function testToCakeSession()
+    {
+        $psr = ServerRequestFactory::fromGlobals();
+        $session = new Session(['defaults' => 'php']);
+        $session->write('test', 'value');
+        $psr = $psr->withAttribute('session', $session);
+        $cake = RequestTransformer::toCake($psr);
+
+        $this->assertSame($session, $cake->session());
+    }
 }