Version 1
[yaffs-website] / vendor / symfony / http-foundation / Tests / Session / Storage / Handler / LegacyPdoSessionHandlerTest.php
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/LegacyPdoSessionHandlerTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/LegacyPdoSessionHandlerTest.php
new file mode 100644 (file)
index 0000000..b15fbce
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpFoundation\Tests\Session\Storage\Handler;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\HttpFoundation\Session\Storage\Handler\LegacyPdoSessionHandler;
+
+/**
+ * @group legacy
+ * @group time-sensitive
+ * @requires extension pdo_sqlite
+ */
+class LegacyPdoSessionHandlerTest extends TestCase
+{
+    private $pdo;
+
+    protected function setUp()
+    {
+        parent::setUp();
+        $this->pdo = new \PDO('sqlite::memory:');
+        $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+        $sql = 'CREATE TABLE sessions (sess_id VARCHAR(128) PRIMARY KEY, sess_data TEXT, sess_time INTEGER)';
+        $this->pdo->exec($sql);
+    }
+
+    public function testIncompleteOptions()
+    {
+        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
+        $storage = new LegacyPdoSessionHandler($this->pdo, array());
+    }
+
+    public function testWrongPdoErrMode()
+    {
+        $pdo = new \PDO('sqlite::memory:');
+        $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_SILENT);
+        $pdo->exec('CREATE TABLE sessions (sess_id VARCHAR(128) PRIMARY KEY, sess_data TEXT, sess_time INTEGER)');
+
+        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
+        $storage = new LegacyPdoSessionHandler($pdo, array('db_table' => 'sessions'));
+    }
+
+    public function testWrongTableOptionsWrite()
+    {
+        $storage = new LegacyPdoSessionHandler($this->pdo, array('db_table' => 'bad_name'));
+        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('RuntimeException');
+        $storage->write('foo', 'bar');
+    }
+
+    public function testWrongTableOptionsRead()
+    {
+        $storage = new LegacyPdoSessionHandler($this->pdo, array('db_table' => 'bad_name'));
+        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('RuntimeException');
+        $storage->read('foo');
+    }
+
+    public function testWriteRead()
+    {
+        $storage = new LegacyPdoSessionHandler($this->pdo, array('db_table' => 'sessions'));
+        $storage->write('foo', 'bar');
+        $this->assertEquals('bar', $storage->read('foo'), 'written value can be read back correctly');
+    }
+
+    public function testMultipleInstances()
+    {
+        $storage1 = new LegacyPdoSessionHandler($this->pdo, array('db_table' => 'sessions'));
+        $storage1->write('foo', 'bar');
+
+        $storage2 = new LegacyPdoSessionHandler($this->pdo, array('db_table' => 'sessions'));
+        $this->assertEquals('bar', $storage2->read('foo'), 'values persist between instances');
+    }
+
+    public function testSessionDestroy()
+    {
+        $storage = new LegacyPdoSessionHandler($this->pdo, array('db_table' => 'sessions'));
+        $storage->write('foo', 'bar');
+        $this->assertCount(1, $this->pdo->query('SELECT * FROM sessions')->fetchAll());
+
+        $storage->destroy('foo');
+
+        $this->assertCount(0, $this->pdo->query('SELECT * FROM sessions')->fetchAll());
+    }
+
+    public function testSessionGC()
+    {
+        $storage = new LegacyPdoSessionHandler($this->pdo, array('db_table' => 'sessions'));
+
+        $storage->write('foo', 'bar');
+        $storage->write('baz', 'bar');
+
+        $this->assertCount(2, $this->pdo->query('SELECT * FROM sessions')->fetchAll());
+
+        $storage->gc(-1);
+        $this->assertCount(0, $this->pdo->query('SELECT * FROM sessions')->fetchAll());
+    }
+
+    public function testGetConnection()
+    {
+        $storage = new LegacyPdoSessionHandler($this->pdo, array('db_table' => 'sessions'), array());
+
+        $method = new \ReflectionMethod($storage, 'getConnection');
+        $method->setAccessible(true);
+
+        $this->assertInstanceOf('\PDO', $method->invoke($storage));
+    }
+}