diff --git a/apps/dav/lib/migration/addressbookadapter.php b/apps/dav/lib/migration/addressbookadapter.php index 025aa07a55..a86790d1f2 100644 --- a/apps/dav/lib/migration/addressbookadapter.php +++ b/apps/dav/lib/migration/addressbookadapter.php @@ -39,8 +39,8 @@ class AddressBookAdapter { public function foreachBook($user, \Closure $callBack) { // get all addressbooks of that user $query = $this->dbConnection->getQueryBuilder(); - $stmt = $query->select()->from($this->sourceBookTable) - ->where($query->expr()->eq('user', $query->createNamedParameter($user))) + $stmt = $query->select('*')->from($this->sourceBookTable) + ->where($query->expr()->eq('userid', $query->createNamedParameter($user))) ->execute(); while($row = $stmt->fetch()) { @@ -60,7 +60,7 @@ class AddressBookAdapter { */ public function foreachCard($addressBookId, \Closure $callBack) { $query = $this->dbConnection->getQueryBuilder(); - $stmt = $query->select()->from($this->sourceCardsTable) + $stmt = $query->select('*')->from($this->sourceCardsTable) ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) ->execute(); diff --git a/apps/dav/tests/unit/migration/addressbookadaptertest.php b/apps/dav/tests/unit/migration/addressbookadaptertest.php new file mode 100644 index 0000000000..c011fcd13f --- /dev/null +++ b/apps/dav/tests/unit/migration/addressbookadaptertest.php @@ -0,0 +1,113 @@ + + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ +namespace OCA\DAV\Tests\Unit\Migration; + +use DomainException; +use OCA\Dav\Migration\AddressBookAdapter; +use OCP\IDBConnection; +use Test\TestCase; + +/** + * Class AddressbookAdapterTest + * + * @group DB + * + * @package OCA\DAV\Tests\Unit\Migration + */ +class AddressbookAdapterTest extends TestCase { + + /** @var IDBConnection */ + private $db; + /** @var AddressBookAdapter */ + private $adapter; + /** @var array */ + private $books = []; + /** @var array */ + private $cards = []; + + public function setUp() { + parent::setUp(); + $this->db = \OC::$server->getDatabaseConnection(); + + $manager = new \OC\DB\MDB2SchemaManager($this->db); + $manager->createDbFromStructure(__DIR__ . '/contacts_schema.xml'); + + $this->adapter = new AddressBookAdapter($this->db); + } + + public function tearDown() { + $this->db->dropTable('contacts_addressbooks'); + $this->db->dropTable('contacts_cards'); + parent::tearDown(); + } + + /** + * @expectedException DomainException + */ + public function testOldTablesDoNotExist() { + $adapter = new AddressBookAdapter(\OC::$server->getDatabaseConnection(), 'crazy_table_that_does_no_exist'); + $adapter->setup(); + } + + public function test() { + + // insert test data + $builder = $this->db->getQueryBuilder(); + $builder->insert('contacts_addressbooks') + ->values([ + 'userid' => $builder->createNamedParameter('test-user-666'), + 'displayname' => $builder->createNamedParameter('Display Name'), + 'uri' => $builder->createNamedParameter('contacts'), + 'description' => $builder->createNamedParameter('An address book for testing'), + 'ctag' => $builder->createNamedParameter('112233'), + 'active' => $builder->createNamedParameter('1') + ]) + ->execute(); + $builder = $this->db->getQueryBuilder(); + $builder->insert('contacts_cards') + ->values([ + 'addressbookid' => $builder->createNamedParameter(6666), + 'fullname' => $builder->createNamedParameter('Full Name'), + 'carddata' => $builder->createNamedParameter('datadatadata'), + 'uri' => $builder->createNamedParameter('some-card.vcf'), + 'lastmodified' => $builder->createNamedParameter('112233'), + ]) + ->execute(); + + // test the adapter + $this->adapter->foreachBook('test-user-666', function($row) { + $this->books[] = $row; + }); + $this->assertArrayHasKey('id', $this->books[0]); + $this->assertEquals('test-user-666', $this->books[0]['userid']); + $this->assertEquals('Display Name', $this->books[0]['displayname']); + $this->assertEquals('contacts', $this->books[0]['uri']); + $this->assertEquals('An address book for testing', $this->books[0]['description']); + $this->assertEquals('112233', $this->books[0]['ctag']); + + $this->adapter->foreachCard(6666, function($row) { + $this->cards[]= $row; + }); + $this->assertArrayHasKey('id', $this->cards[0]); + $this->assertEquals(6666, $this->cards[0]['addressbookid']); + } + +} diff --git a/apps/dav/tests/unit/migration/contacts_schema.xml b/apps/dav/tests/unit/migration/contacts_schema.xml new file mode 100644 index 0000000000..51836a1e0c --- /dev/null +++ b/apps/dav/tests/unit/migration/contacts_schema.xml @@ -0,0 +1,151 @@ + + + + *dbname* + true + false + utf8 + + + *dbprefix*contacts_addressbooks + + + + + id + integer + 0 + true + 1 + true + 4 + + + + userid + text + + true + 255 + + + + displayname + text + + false + 255 + + + + uri + text + + false + 200 + + + + description + text + false + 255 + + + + ctag + integer + 1 + true + true + 4 + + + + active + integer + 1 + true + 4 + + + + c_addressbook_userid_index + + userid + ascending + + + + +
+ + + + *dbprefix*contacts_cards + + + + + id + integer + 0 + true + 1 + true + 4 + + + + addressbookid + integer + + true + true + 4 + + + + fullname + text + + false + 255 + + + + carddata + clob + false + + + + uri + text + + false + 200 + + + + lastmodified + integer + + false + true + 4 + + + + + c_addressbookid_index + + addressbookid + ascending + + + + +
+ +