[Pkg-owncloud-commits] [php-sabredav] 187/220: Added new DbTestHelperTrait. PgSql support for Prinicpals

David Prévot taffit at moszumanska.debian.org
Thu May 12 01:21:26 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository php-sabredav.

commit 1870a95ff5f5974edc07ac29f2f526970486a24d
Author: Evert Pot <me at evertpot.com>
Date:   Thu Apr 28 13:53:25 2016 +0700

    Added new DbTestHelperTrait. PgSql support for Prinicpals
---
 examples/sql/pgsql.principals.sql                  |   8 --
 tests/Sabre/DAV/DbTestHelperTrait.php              | 114 +++++++++++++++++++++
 .../DAVACL/PrincipalBackend/AbstractPDOTest.php    |  28 ++++-
 .../Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php |  39 +------
 .../Sabre/DAVACL/PrincipalBackend/PDOPgSqlTest.php |   9 ++
 .../DAVACL/PrincipalBackend/PDOSqliteTest.php      |  36 +------
 6 files changed, 149 insertions(+), 85 deletions(-)

diff --git a/examples/sql/pgsql.principals.sql b/examples/sql/pgsql.principals.sql
index 9157acd..5a65260 100644
--- a/examples/sql/pgsql.principals.sql
+++ b/examples/sql/pgsql.principals.sql
@@ -23,14 +23,6 @@ ALTER TABLE ONLY groupmembers
 CREATE UNIQUE INDEX groupmembers_ukey
     ON groupmembers USING btree (principal_id, member_id);
 
-ALTER TABLE ONLY groupmembers
-    ADD CONSTRAINT groupmembers_principal_id_fkey FOREIGN KEY (principal_id) REFERENCES principals(id)
-        ON DELETE CASCADE;
-
-ALTER TABLE ONLY groupmembers
-    ADD CONSTRAINT groupmembers_member_id_id_fkey FOREIGN KEY (member_id) REFERENCES principals(id)
-        ON DELETE CASCADE;
-
 INSERT INTO principals (uri,email,displayname) VALUES
 ('principals/admin', 'admin at example.org','Administrator'),
 ('principals/admin/calendar-proxy-read', null, null),
diff --git a/tests/Sabre/DAV/DbTestHelperTrait.php b/tests/Sabre/DAV/DbTestHelperTrait.php
new file mode 100644
index 0000000..4a3a4e2
--- /dev/null
+++ b/tests/Sabre/DAV/DbTestHelperTrait.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace Sabre\DAV;
+
+use PDOException;
+use PDO;
+
+trait DbTestHelperTrait {
+
+    /**
+     * Should be "mysql", "pgsql", "sqlite".
+     */
+    public $driver = null;
+
+    private $db = [];
+
+
+    /**
+     * Returns a fully configured PDO object.
+     *
+     * @return PDO
+     */
+    function getDb() {
+
+        if (!$this->driver) {
+            throw new \Exception('You must set the $driver public property');
+       }
+
+        if (isset($this->db[$this->driver])) {
+            return $this->db[$this->driver];
+        }
+
+        try {
+
+            switch ($this->driver) {
+
+                case 'mysql' :
+                    $pdo = new PDO(SABRE_MYSQLDSN, SABRE_MYSQLUSER, SABRE_MYSQLPASS);
+                    break;
+                case 'sqlite' :
+                    $pdo = new \PDO('sqlite:' . SABRE_TEMPDIR . '/pdobackend');
+                    break;
+                case 'pgsql' :
+                    $pdo = new \PDO(SABRE_PGSQLDSN);
+                    break;
+
+
+
+            }
+            $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+
+        } catch (PDOException $e) {
+
+            $this->markTestSkipped($this->driver . ' was not enabled or not correctly configured. Error message: ' . $e->getMessage());
+
+        }
+
+        $this->db[$this->driver] = $pdo;
+        return $pdo;
+
+    }
+
+    /**
+     * Alias for getDb
+     *
+     * @return PDO
+     */
+    function getPDO() {
+
+        return $this->getDb();
+
+    }
+
+    /**
+     * Uses .sql files from the examples directory to initialize the database.
+     */
+    function createSchema($schemaName) {
+
+        $db = $this->getDb();
+
+        $queries = file_get_contents(
+            __DIR__ . '/../../../examples/sql/' . $this->driver . '.' . $schemaName . '.sql'
+        );
+
+        foreach (explode(';', $queries) as $query) {
+
+            if (trim($query) === '') {
+                continue;
+            }
+            
+            $db->exec($query);
+
+        }
+
+    }
+
+    /**
+     * Drops tables, if they exist
+     *
+     * @param string|string[] $tableNames
+     * @return void
+     */
+    function dropTables($tableNames) {
+
+        $tableNames = (array)$tableNames;
+        $db = $this->getDb();
+        foreach ($tableNames as $tableName) {
+            $db->exec('DROP TABLE IF EXISTS ' . $tableName);
+        }
+        
+
+    }
+
+}
diff --git a/tests/Sabre/DAVACL/PrincipalBackend/AbstractPDOTest.php b/tests/Sabre/DAVACL/PrincipalBackend/AbstractPDOTest.php
index 60b2523..9fef301 100644
--- a/tests/Sabre/DAVACL/PrincipalBackend/AbstractPDOTest.php
+++ b/tests/Sabre/DAVACL/PrincipalBackend/AbstractPDOTest.php
@@ -7,7 +7,22 @@ use Sabre\HTTP;
 
 abstract class AbstractPDOTest extends \PHPUnit_Framework_TestCase {
 
-    abstract function getPDO();
+    use DAV\DbTestHelperTrait;
+
+    function setUp() {
+
+        $this->dropTables(['principals', 'groupmembers']);
+        $this->createSchema('principals');
+
+        $pdo = $this->getPDO();
+
+        $pdo->query("INSERT INTO principals (uri,email,displayname) VALUES ('principals/user','user at example.org','User')");
+        $pdo->query("INSERT INTO principals (uri,email,displayname) VALUES ('principals/group','group at example.org','Group')");
+
+        $pdo->query("INSERT INTO groupmembers (principal_id,member_id) VALUES (5,4)");
+
+    }
+
 
     function testConstruct() {
 
@@ -27,6 +42,11 @@ abstract class AbstractPDOTest extends \PHPUnit_Framework_TestCase {
 
         $expected = [
             [
+                'uri'                                   => 'principals/admin',
+                '{http://sabredav.org/ns}email-address' => 'admin at example.org',
+                '{DAV:}displayname'                     => 'Administrator',
+            ],
+            [
                 'uri'                                   => 'principals/user',
                 '{http://sabredav.org/ns}email-address' => 'user at example.org',
                 '{DAV:}displayname'                     => 'User',
@@ -52,7 +72,7 @@ abstract class AbstractPDOTest extends \PHPUnit_Framework_TestCase {
         $backend = new PDO($pdo);
 
         $expected = [
-            'id'                                    => 1,
+            'id'                                    => 4,
             'uri'                                   => 'principals/user',
             '{http://sabredav.org/ns}email-address' => 'user at example.org',
             '{DAV:}displayname'                     => 'User',
@@ -137,7 +157,7 @@ abstract class AbstractPDOTest extends \PHPUnit_Framework_TestCase {
         $this->assertTrue($result);
 
         $this->assertEquals([
-            'id'                                    => 1,
+            'id'                                    => 4,
             'uri'                                   => 'principals/user',
             '{DAV:}displayname'                     => 'pietje',
             '{http://sabredav.org/ns}email-address' => 'user at example.org',
@@ -166,7 +186,7 @@ abstract class AbstractPDOTest extends \PHPUnit_Framework_TestCase {
         ], $propPatch->getResult());
 
         $this->assertEquals([
-            'id'                                    => '1',
+            'id'                                    => '4',
             'uri'                                   => 'principals/user',
             '{DAV:}displayname'                     => 'User',
             '{http://sabredav.org/ns}email-address' => 'user at example.org',
diff --git a/tests/Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php b/tests/Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php
index 8a07bc9..8779eb6 100644
--- a/tests/Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php
+++ b/tests/Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php
@@ -2,45 +2,8 @@
 
 namespace Sabre\DAVACL\PrincipalBackend;
 
-require_once 'Sabre/TestUtil.php';
-
 class PDOMySQLTest extends AbstractPDOTest {
 
-    function getPDO() {
-
-        if (!SABRE_HASMYSQL) $this->markTestSkipped('MySQL driver is not available, or not properly configured');
-        $pdo = \Sabre\TestUtil::getMySQLDB();
-        if (!$pdo) $this->markTestSkipped('Could not connect to MySQL database');
-        $pdo->query("DROP TABLE IF EXISTS principals");
-        $pdo->query(<<<SQL
-create table principals (
-  id integer unsigned not null primary key auto_increment,
-  uri varchar(50),
-  email varchar(80),
-  displayname VARCHAR(80),
-  vcardurl VARCHAR(80),
-  unique(uri)
-)
-SQL
-        );
-
-        $pdo->query("INSERT INTO principals (uri,email,displayname) VALUES ('principals/user','user at example.org','User')");
-        $pdo->query("INSERT INTO principals (uri,email,displayname) VALUES ('principals/group','group at example.org','Group')");
-        $pdo->query("DROP TABLE IF EXISTS groupmembers");
-        $pdo->query(<<<SQL
-CREATE TABLE groupmembers (
-  id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
-  principal_id INTEGER UNSIGNED NOT NULL,
-  member_id INTEGER UNSIGNED NOT NULL,
-  UNIQUE(principal_id, member_id)
-)
-SQL
-        );
-
-        $pdo->query("INSERT INTO groupmembers (principal_id,member_id) VALUES (2,1)");
-
-        return $pdo;
-
-    }
+    public $driver = 'mysql';
 
 }
diff --git a/tests/Sabre/DAVACL/PrincipalBackend/PDOPgSqlTest.php b/tests/Sabre/DAVACL/PrincipalBackend/PDOPgSqlTest.php
new file mode 100644
index 0000000..302616e
--- /dev/null
+++ b/tests/Sabre/DAVACL/PrincipalBackend/PDOPgSqlTest.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace Sabre\DAVACL\PrincipalBackend;
+
+class PDOPgSqlTest extends AbstractPDOTest {
+
+    public $driver = 'pgsql';
+
+}
diff --git a/tests/Sabre/DAVACL/PrincipalBackend/PDOSqliteTest.php b/tests/Sabre/DAVACL/PrincipalBackend/PDOSqliteTest.php
index cd8fa1c..4845498 100644
--- a/tests/Sabre/DAVACL/PrincipalBackend/PDOSqliteTest.php
+++ b/tests/Sabre/DAVACL/PrincipalBackend/PDOSqliteTest.php
@@ -2,42 +2,8 @@
 
 namespace Sabre\DAVACL\PrincipalBackend;
 
-use Sabre\DAV;
-
-require_once 'Sabre/DAV/Auth/Backend/AbstractPDOTest.php';
-
 class PDOSqliteTest extends AbstractPDOTest {
 
-    function tearDown() {
-
-        if (file_exists(SABRE_TEMPDIR . '/pdobackend')) unlink(SABRE_TEMPDIR . '/pdobackend');
-        if (file_exists(SABRE_TEMPDIR . '/pdobackend2')) unlink(SABRE_TEMPDIR . '/pdobackend2');
-
-    }
-
-    function getPDO() {
-
-        if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
-        $pdo = new \PDO('sqlite:' . SABRE_TEMPDIR . '/pdobackend');
-        $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
-        $pdo->query('CREATE TABLE principals (id INTEGER PRIMARY KEY ASC, uri TEXT, email VARCHAR(80), displayname VARCHAR(80))');
-        $pdo->query('INSERT INTO principals VALUES (1, "principals/user","user at example.org","User")');
-        $pdo->query('INSERT INTO principals VALUES (2, "principals/group","group at example.org","Group")');
-
-        $pdo->query(<<<SQL
-CREATE TABLE groupmembers (
-  id INTEGER PRIMARY KEY ASC,
-  principal_id INT,
-  member_id INT,
-  UNIQUE(principal_id, member_id)
-)
-SQL
-        );
-
-        $pdo->query("INSERT INTO groupmembers (principal_id,member_id) VALUES (2,1)");
-
-        return $pdo;
-
-    }
+    public $driver = 'sqlite';
 
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-php/php-sabredav.git



More information about the Pkg-owncloud-commits mailing list