diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-01-25 17:18:47 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-02-09 11:20:31 +0100 |
commit | bf3a843e892e39e6c4d12b632da31d5718bc45c7 (patch) | |
tree | 7e65e9cd5baf4b46c2f10cce1be4f2cc7ab5b668 /apps/dav/tests/unit | |
parent | 254e0fa71a31d0ee77136ba0fee95fe7b136a4a0 (diff) | |
download | nextcloud-server-bf3a843e892e39e6c4d12b632da31d5718bc45c7.tar.gz nextcloud-server-bf3a843e892e39e6c4d12b632da31d5718bc45c7.zip |
Migration of calendars
Diffstat (limited to 'apps/dav/tests/unit')
-rw-r--r-- | apps/dav/tests/unit/migration/calendar_schema.xml | 191 | ||||
-rw-r--r-- | apps/dav/tests/unit/migration/calendaradaptertest.php | 131 | ||||
-rw-r--r-- | apps/dav/tests/unit/migration/migratecalendartest.php | 76 |
3 files changed, 398 insertions, 0 deletions
diff --git a/apps/dav/tests/unit/migration/calendar_schema.xml b/apps/dav/tests/unit/migration/calendar_schema.xml new file mode 100644 index 00000000000..6c88b596a3f --- /dev/null +++ b/apps/dav/tests/unit/migration/calendar_schema.xml @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<database> + + <name>*dbname*</name> + <create>true</create> + <overwrite>false</overwrite> + + <charset>utf8</charset> + + <table> + + <name>*dbprefix*clndr_objects</name> + + <declaration> + + <field> + <name>id</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <autoincrement>1</autoincrement> + <unsigned>true</unsigned> + <length>4</length> + </field> + + <field> + <name>calendarid</name> + <type>integer</type> + <default></default> + <notnull>true</notnull> + <unsigned>true</unsigned> + <length>4</length> + </field> + + <field> + <name>objecttype</name> + <type>text</type> + <default></default> + <notnull>true</notnull> + <length>40</length> + </field> + + <field> + <name>startdate</name> + <type>timestamp</type> + <default>1970-01-01 00:00:00</default> + <notnull>false</notnull> + </field> + + <field> + <name>enddate</name> + <type>timestamp</type> + <default>1970-01-01 00:00:00</default> + <notnull>false</notnull> + </field> + + <field> + <name>repeating</name> + <type>integer</type> + <default></default> + <notnull>false</notnull> + <length>4</length> + </field> + + <field> + <name>summary</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>255</length> + </field> + + <field> + <name>calendardata</name> + <type>clob</type> + <notnull>false</notnull> + </field> + + <field> + <name>uri</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>255</length> + </field> + + <field> + <name>lastmodified</name> + <type>integer</type> + <default></default> + <notnull>false</notnull> + <length>4</length> + </field> + + </declaration> + + </table> + + <table> + + <name>*dbprefix*clndr_calendars</name> + + <declaration> + + <field> + <name>id</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <autoincrement>1</autoincrement> + <unsigned>true</unsigned> + <length>4</length> + </field> + + <field> + <name>userid</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>255</length> + </field> + + <field> + <name>displayname</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>100</length> + </field> + + <field> + <name>uri</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>255</length> + </field> + + <field> + <name>active</name> + <type>integer</type> + <default>1</default> + <notnull>true</notnull> + <length>4</length> + </field> + + <field> + <name>ctag</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <unsigned>true</unsigned> + <length>4</length> + </field> + + <field> + <name>calendarorder</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <unsigned>true</unsigned> + <length>4</length> + </field> + + <field> + <name>calendarcolor</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>10</length> + </field> + + <field> + <name>timezone</name> + <type>clob</type> + <notnull>false</notnull> + </field> + + <field> + <name>components</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>100</length> + </field> + + </declaration> + + </table> + +</database> diff --git a/apps/dav/tests/unit/migration/calendaradaptertest.php b/apps/dav/tests/unit/migration/calendaradaptertest.php new file mode 100644 index 00000000000..f92774ef6ad --- /dev/null +++ b/apps/dav/tests/unit/migration/calendaradaptertest.php @@ -0,0 +1,131 @@ +<?php +/** + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @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 <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\Tests\Unit\Migration; + +use DomainException; +use OCA\Dav\Migration\AddressBookAdapter; +use OCA\Dav\Migration\CalendarAdapter; +use OCP\IDBConnection; +use Test\TestCase; + +/** + * Class CalendarAdapterTest + * + * @group DB + * + * @package OCA\DAV\Tests\Unit\Migration + */ +class CalendarAdapterTest extends TestCase { + + /** @var IDBConnection */ + private $db; + /** @var CalendarAdapter */ + private $adapter; + /** @var array */ + private $cals = []; + /** @var array */ + private $calObjs = []; + + public function setUp() { + parent::setUp(); + $this->db = \OC::$server->getDatabaseConnection(); + + $manager = new \OC\DB\MDB2SchemaManager($this->db); + $manager->createDbFromStructure(__DIR__ . '/calendar_schema.xml'); + + $this->adapter = new CalendarAdapter($this->db); + } + + public function tearDown() { + $this->db->dropTable('clndr_calendars'); + $this->db->dropTable('clndr_objects'); + 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('clndr_calendars') + ->values([ + 'userid' => $builder->createNamedParameter('test-user-666'), + 'displayname' => $builder->createNamedParameter('Display Name'), + 'uri' => $builder->createNamedParameter('events'), + 'ctag' => $builder->createNamedParameter('112233'), + 'active' => $builder->createNamedParameter('1') + ]) + ->execute(); + $builder = $this->db->getQueryBuilder(); + $builder->insert('clndr_objects') + ->values([ + 'calendarid' => $builder->createNamedParameter(6666), + 'objecttype' => $builder->createNamedParameter('VEVENT'), + 'startdate' => $builder->createNamedParameter(new \DateTime(), 'datetime'), + 'enddate' => $builder->createNamedParameter(new \DateTime(), 'datetime'), + 'repeating' => $builder->createNamedParameter(0), + 'summary' => $builder->createNamedParameter('Something crazy will happen'), + 'uri' => $builder->createNamedParameter('event.ics'), + 'lastmodified' => $builder->createNamedParameter('112233'), + ]) + ->execute(); + $builder = $this->db->getQueryBuilder(); + $builder->insert('share') + ->values([ + 'share_type' => $builder->createNamedParameter(1), + 'share_with' => $builder->createNamedParameter('user01'), + 'uid_owner' => $builder->createNamedParameter('user02'), + 'item_type' => $builder->createNamedParameter('calendar'), + 'item_source' => $builder->createNamedParameter(6666), + 'item_target' => $builder->createNamedParameter('Contacts (user02)'), + ]) + ->execute(); + + // test the adapter + $this->adapter->foreachCalendar('test-user-666', function($row) { + $this->cals[] = $row; + }); + $this->assertArrayHasKey('id', $this->cals[0]); + $this->assertEquals('test-user-666', $this->cals[0]['userid']); + $this->assertEquals('Display Name', $this->cals[0]['displayname']); + $this->assertEquals('events', $this->cals[0]['uri']); + $this->assertEquals('112233', $this->cals[0]['ctag']); + + $this->adapter->foreachCalendarObject(6666, function($row) { + $this->calObjs[]= $row; + }); + $this->assertArrayHasKey('id', $this->calObjs[0]); + $this->assertEquals(6666, $this->calObjs[0]['calendarid']); + + // test getShares + $shares = $this->adapter->getShares(6666); + $this->assertEquals(1, count($shares)); + + } + +} diff --git a/apps/dav/tests/unit/migration/migratecalendartest.php b/apps/dav/tests/unit/migration/migratecalendartest.php new file mode 100644 index 00000000000..1058773ffff --- /dev/null +++ b/apps/dav/tests/unit/migration/migratecalendartest.php @@ -0,0 +1,76 @@ +<?php +/** + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @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 <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\Tests\Unit\Migration; + +use OCA\DAV\CalDAV\CalDavBackend; +use OCA\Dav\Migration\CalendarAdapter; +use Test\TestCase; + +class MigrateCalendarTest extends TestCase { + + public function testMigration() { + /** @var CalendarAdapter | \PHPUnit_Framework_MockObject_MockObject $adapter */ + $adapter = $this->mockAdapter(); + + /** @var CalDavBackend | \PHPUnit_Framework_MockObject_MockObject $cardDav */ + $cardDav = $this->getMockBuilder('\OCA\Dav\CalDAV\CalDAVBackend')->disableOriginalConstructor()->getMock(); + $cardDav->method('createCalendar')->willReturn(666); + $cardDav->expects($this->once())->method('createCalendar')->with('principals/users/test01', 'test_contacts'); + $cardDav->expects($this->once())->method('createCalendarObject')->with(666, '63f0dd6c-39d5-44be-9d34-34e7a7441fc2.ics', 'BEGIN:VCARD'); + + $m = new \OCA\Dav\Migration\MigrateCalendars($adapter, $cardDav); + $m->migrateForUser('test01'); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function mockAdapter($shares = []) { + $adapter = $this->getMockBuilder('\OCA\Dav\Migration\CalendarAdapter') + ->disableOriginalConstructor() + ->getMock(); + $adapter->method('foreachCalendar')->willReturnCallback(function ($user, \Closure $callBack) { + $callBack([ + // calendarorder | calendarcolor | timezone | components + 'id' => 0, + 'userid' => $user, + 'displayname' => 'Test Contacts', + 'uri' => 'test_contacts', + 'ctag' => 1234567890, + 'active' => 1, + 'calendarorder' => '0', + 'calendarcolor' => '#b3dc6c', + 'timezone' => null, + 'components' => 'VEVENT,VTODO,VJOURNAL' + ]); + }); + $adapter->method('foreachCalendarObject')->willReturnCallback(function ($addressBookId, \Closure $callBack) { + $callBack([ + 'userid' => $addressBookId, + 'uri' => '63f0dd6c-39d5-44be-9d34-34e7a7441fc2.ics', + 'calendardata' => 'BEGIN:VCARD' + ]); + }); + $adapter->method('getShares')->willReturn($shares); + return $adapter; + } + +} |