Merge pull request #23976 from owncloud/kill-dav-migration
Remove dav migration for 9.1remotes/origin/move-icewind-ftp-to-core
commit
e84da2cf54
@ -1,86 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* @author Lukas Reschke <lukas@owncloud.com> |
||||
* @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\Command; |
||||
|
||||
use OCP\IUser; |
||||
use OCP\IUserManager; |
||||
use Symfony\Component\Console\Command\Command; |
||||
use Symfony\Component\Console\Helper\ProgressBar; |
||||
use Symfony\Component\Console\Input\InputArgument; |
||||
use Symfony\Component\Console\Input\InputInterface; |
||||
use Symfony\Component\Console\Output\OutputInterface; |
||||
|
||||
class MigrateAddressbooks extends Command { |
||||
|
||||
/** @var IUserManager */ |
||||
protected $userManager; |
||||
|
||||
/** @var \OCA\Dav\Migration\MigrateAddressbooks */ |
||||
private $service; |
||||
|
||||
/** |
||||
* @param IUserManager $userManager |
||||
* @param \OCA\Dav\Migration\MigrateAddressbooks $service |
||||
*/ |
||||
function __construct(IUserManager $userManager, |
||||
\OCA\Dav\Migration\MigrateAddressbooks $service |
||||
) { |
||||
parent::__construct(); |
||||
$this->userManager = $userManager; |
||||
$this->service = $service; |
||||
} |
||||
|
||||
protected function configure() { |
||||
$this |
||||
->setName('dav:migrate-addressbooks') |
||||
->setDescription('Migrate addressbooks from the contacts app to core') |
||||
->addArgument('user', |
||||
InputArgument::OPTIONAL, |
||||
'User for whom all addressbooks will be migrated'); |
||||
} |
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output) { |
||||
$this->service->setup(); |
||||
|
||||
$user = $input->getArgument('user'); |
||||
if (!is_null($user)) { |
||||
if (!$this->userManager->userExists($user)) { |
||||
throw new \InvalidArgumentException("User <$user> in unknown."); |
||||
} |
||||
$output->writeln("Start migration for $user"); |
||||
$this->service->migrateForUser($user); |
||||
return; |
||||
} |
||||
$output->writeln("Start migration of all known users ..."); |
||||
$p = new ProgressBar($output); |
||||
$p->start(); |
||||
$this->userManager->callForAllUsers(function($user) use ($p) { |
||||
$p->advance(); |
||||
/** @var IUser $user */ |
||||
$this->service->migrateForUser($user->getUID()); |
||||
}); |
||||
|
||||
$p->finish(); |
||||
$output->writeln(''); |
||||
} |
||||
} |
@ -1,85 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* @author Lukas Reschke <lukas@owncloud.com> |
||||
* @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\Command; |
||||
|
||||
use OCP\IUser; |
||||
use OCP\IUserManager; |
||||
use Symfony\Component\Console\Command\Command; |
||||
use Symfony\Component\Console\Helper\ProgressBar; |
||||
use Symfony\Component\Console\Input\InputArgument; |
||||
use Symfony\Component\Console\Input\InputInterface; |
||||
use Symfony\Component\Console\Output\OutputInterface; |
||||
|
||||
class MigrateCalendars extends Command { |
||||
|
||||
/** @var IUserManager */ |
||||
protected $userManager; |
||||
|
||||
/** @var \OCA\Dav\Migration\MigrateCalendars */ |
||||
private $service; |
||||
|
||||
/** |
||||
* @param IUserManager $userManager |
||||
* @param \OCA\Dav\Migration\MigrateCalendars $service |
||||
*/ |
||||
function __construct(IUserManager $userManager, |
||||
\OCA\Dav\Migration\MigrateCalendars $service |
||||
) { |
||||
parent::__construct(); |
||||
$this->userManager = $userManager; |
||||
$this->service = $service; |
||||
} |
||||
|
||||
protected function configure() { |
||||
$this |
||||
->setName('dav:migrate-calendars') |
||||
->setDescription('Migrate calendars from the calendar app to core') |
||||
->addArgument('user', |
||||
InputArgument::OPTIONAL, |
||||
'User for whom all calendars will be migrated'); |
||||
} |
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output) { |
||||
$this->service->setup(); |
||||
|
||||
$user = $input->getArgument('user'); |
||||
if (!is_null($user)) { |
||||
if (!$this->userManager->userExists($user)) { |
||||
throw new \InvalidArgumentException("User <$user> in unknown."); |
||||
} |
||||
$output->writeln("Start migration for $user"); |
||||
$this->service->migrateForUser($user); |
||||
return; |
||||
} |
||||
$output->writeln("Start migration of all known users ..."); |
||||
$p = new ProgressBar($output); |
||||
$p->start(); |
||||
$this->userManager->callForAllUsers(function($user) use ($p) { |
||||
$p->advance(); |
||||
/** @var IUser $user */ |
||||
$this->service->migrateForUser($user->getUID()); |
||||
}); |
||||
|
||||
$p->finish(); |
||||
$output->writeln(''); |
||||
} |
||||
} |
@ -1,106 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* @author Lukas Reschke <lukas@owncloud.com> |
||||
* @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\Migration; |
||||
|
||||
use OCP\IDBConnection; |
||||
use Symfony\Component\Console\Command\Command; |
||||
use Symfony\Component\Console\Input\InputArgument; |
||||
use Symfony\Component\Console\Input\InputInterface; |
||||
use Symfony\Component\Console\Output\OutputInterface; |
||||
|
||||
class AddressBookAdapter { |
||||
|
||||
/** @var \OCP\IDBConnection */ |
||||
protected $dbConnection; |
||||
|
||||
/** @var string */ |
||||
private $sourceBookTable; |
||||
|
||||
/** @var string */ |
||||
private $sourceCardsTable; |
||||
|
||||
/** |
||||
* @param IDBConnection $dbConnection |
||||
* @param string $sourceBookTable |
||||
* @param string $sourceCardsTable |
||||
*/ |
||||
function __construct(IDBConnection $dbConnection, |
||||
$sourceBookTable = 'contacts_addressbooks', |
||||
$sourceCardsTable = 'contacts_cards') { |
||||
$this->dbConnection = $dbConnection; |
||||
$this->sourceBookTable = $sourceBookTable; |
||||
$this->sourceCardsTable = $sourceCardsTable; |
||||
} |
||||
|
||||
/** |
||||
* @param string $user |
||||
* @param \Closure $callBack |
||||
*/ |
||||
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('userid', $query->createNamedParameter($user))) |
||||
->execute(); |
||||
|
||||
while($row = $stmt->fetch()) { |
||||
$callBack($row); |
||||
} |
||||
} |
||||
|
||||
public function setup() { |
||||
if (!$this->dbConnection->tableExists($this->sourceBookTable)) { |
||||
throw new \DomainException('Contacts tables are missing. Nothing to do.'); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @param int $addressBookId |
||||
* @param \Closure $callBack |
||||
*/ |
||||
public function foreachCard($addressBookId, \Closure $callBack) { |
||||
$query = $this->dbConnection->getQueryBuilder(); |
||||
$stmt = $query->select('*')->from($this->sourceCardsTable) |
||||
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) |
||||
->execute(); |
||||
|
||||
while($row = $stmt->fetch()) { |
||||
$callBack($row); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @param int $addressBookId |
||||
* @return array |
||||
*/ |
||||
public function getShares($addressBookId) { |
||||
$query = $this->dbConnection->getQueryBuilder(); |
||||
$shares = $query->select('*')->from('share') |
||||
->where($query->expr()->eq('item_source', $query->createNamedParameter($addressBookId))) |
||||
->andWhere($query->expr()->eq('item_type', $query->expr()->literal('addressbook'))) |
||||
->andWhere($query->expr()->in('share_type', [ $query->expr()->literal(0), $query->expr()->literal(1)])) |
||||
->execute() |
||||
->fetchAll(); |
||||
|
||||
return $shares; |
||||
} |
||||
} |
@ -1,102 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* @author Lukas Reschke <lukas@owncloud.com> |
||||
* @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\Migration; |
||||
|
||||
use OCP\IDBConnection; |
||||
|
||||
class CalendarAdapter { |
||||
|
||||
/** @var \OCP\IDBConnection */ |
||||
protected $dbConnection; |
||||
|
||||
/** @var string */ |
||||
private $sourceCalendarTable; |
||||
|
||||
/** @var string */ |
||||
private $sourceCalObjTable; |
||||
|
||||
/** |
||||
* @param IDBConnection $dbConnection |
||||
* @param string $sourceCalendarTable |
||||
* @param string $sourceCalObjTable |
||||
*/ |
||||
function __construct(IDBConnection $dbConnection, |
||||
$sourceCalendarTable = 'clndr_calendars', |
||||
$sourceCalObjTable = 'clndr_objects') { |
||||
$this->dbConnection = $dbConnection; |
||||
$this->sourceCalendarTable = $sourceCalendarTable; |
||||
$this->sourceCalObjTable = $sourceCalObjTable; |
||||
} |
||||
|
||||
/** |
||||
* @param string $user |
||||
* @param \Closure $callBack |
||||
*/ |
||||
public function foreachCalendar($user, \Closure $callBack) { |
||||
// get all calendars of that user |
||||
$query = $this->dbConnection->getQueryBuilder(); |
||||
$stmt = $query->select('*')->from($this->sourceCalendarTable) |
||||
->where($query->expr()->eq('userid', $query->createNamedParameter($user))) |
||||
->execute(); |
||||
|
||||
while($row = $stmt->fetch()) { |
||||
$callBack($row); |
||||
} |
||||
} |
||||
|
||||
public function setup() { |
||||
if (!$this->dbConnection->tableExists($this->sourceCalendarTable)) { |
||||
throw new \DomainException('Calendar tables are missing. Nothing to do.'); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @param int $calendarId |
||||
* @param \Closure $callBack |
||||
*/ |
||||
public function foreachCalendarObject($calendarId, \Closure $callBack) { |
||||
$query = $this->dbConnection->getQueryBuilder(); |
||||
$stmt = $query->select('*')->from($this->sourceCalObjTable) |
||||
->where($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId))) |
||||
->execute(); |
||||
|
||||
while($row = $stmt->fetch()) { |
||||
$callBack($row); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @param int $addressBookId |
||||
* @return array |
||||
*/ |
||||
public function getShares($addressBookId) { |
||||
$query = $this->dbConnection->getQueryBuilder(); |
||||
$shares = $query->select('*')->from('share') |
||||
->where($query->expr()->eq('item_source', $query->createNamedParameter($addressBookId))) |
||||
->andWhere($query->expr()->eq('item_type', $query->expr()->literal('calendar'))) |
||||
->andWhere($query->expr()->in('share_type', [ $query->expr()->literal(0), $query->expr()->literal(1)])) |
||||
->execute() |
||||
->fetchAll(); |
||||
|
||||
return $shares; |
||||
} |
||||
} |
@ -1,131 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* @author Lukas Reschke <lukas@owncloud.com> |
||||
* @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\Migration; |
||||
|
||||
use OCA\DAV\CardDAV\AddressBook; |
||||
use OCA\DAV\CardDAV\CardDavBackend; |
||||
use OCP\ILogger; |
||||
use Sabre\CardDAV\Plugin; |
||||
use Symfony\Component\Console\Output\OutputInterface; |
||||
|
||||
class MigrateAddressbooks { |
||||
|
||||
/** @var AddressBookAdapter */ |
||||
protected $adapter; |
||||
|
||||
/** @var CardDavBackend */ |
||||
private $backend; |
||||
|
||||
/** @var ILogger */ |
||||
private $logger; |
||||
|
||||
/** @var OutputInterface */ |
||||
private $consoleOutput; |
||||
|
||||
|
||||
/** |
||||
* @param AddressBookAdapter $adapter |
||||
* @param CardDavBackend $backend |
||||
*/ |
||||
function __construct(AddressBookAdapter $adapter, |
||||
CardDavBackend $backend, |
||||
ILogger $logger, |
||||
OutputInterface $consoleOutput = null |
||||
) { |
||||
$this->adapter = $adapter; |
||||
$this->backend = $backend; |
||||
$this->logger = $logger; |
||||
$this->consoleOutput = $consoleOutput; |
||||
} |
||||
|
||||
/** |
||||
* @param string $user |
||||
*/ |
||||
public function migrateForUser($user) { |
||||
|
||||
$this->adapter->foreachBook($user, function($book) use ($user) { |
||||
$principal = "principals/users/$user"; |
||||
$knownBooks = $this->backend->getAddressBooksByUri($principal, $book['uri']); |
||||
if (!is_null($knownBooks)) { |
||||
return; |
||||
} |
||||
|
||||
$newId = $this->backend->createAddressBook($principal, $book['uri'], [ |
||||
'{DAV:}displayname' => $book['displayname'], |
||||
'{' . Plugin::NS_CARDDAV . '}addressbook-description' => $book['description'] |
||||
]); |
||||
|
||||
$this->migrateBook($book['id'], $newId); |
||||
$this->migrateShares($book['id'], $newId); |
||||
}); |
||||
} |
||||
|
||||
public function setup() { |
||||
$this->adapter->setup(); |
||||
} |
||||
|
||||
/** |
||||
* @param int $addressBookId |
||||
* @param int $newAddressBookId |
||||
*/ |
||||
private function migrateBook($addressBookId, $newAddressBookId) { |
||||
$this->adapter->foreachCard($addressBookId, function($card) use ($newAddressBookId) { |
||||
try { |
||||
$this->backend->createCard($newAddressBookId, $card['uri'], $card['carddata']); |
||||
} catch (\Exception $ex) { |
||||
$eventId = $card['id']; |
||||
$addressBookId = $card['addressbookid']; |
||||
$msg = "One event could not be migrated. (id: $eventId, addressbookid: $addressBookId)"; |
||||
$this->logger->logException($ex, ['app' => 'dav', 'message' => $msg]); |
||||
if (!is_null($this->consoleOutput)) { |
||||
$this->consoleOutput->writeln($msg); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* @param int $addressBookId |
||||
* @param int $newAddressBookId |
||||
*/ |
||||
private function migrateShares($addressBookId, $newAddressBookId) { |
||||
$shares =$this->adapter->getShares($addressBookId); |
||||
if (empty($shares)) { |
||||
return; |
||||
} |
||||
|
||||
$add = array_map(function($s) { |
||||
$prefix = 'principal:principals/users/'; |
||||
if ((int)$s['share_type'] === 1) { |
||||
$prefix = 'principal:principals/groups/'; |
||||
} |
||||
return [ |
||||
'href' => $prefix . $s['share_with'], |
||||
'readOnly' => !((int)$s['permissions'] === 31) |
||||
]; |
||||
}, $shares); |
||||
|
||||
$newAddressBook = $this->backend->getAddressBookById($newAddressBookId); |
||||
$book = new AddressBook($this->backend, $newAddressBook); |
||||
$this->backend->updateShares($book, $add, []); |
||||
} |
||||
} |
@ -1,132 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* @author Lukas Reschke <lukas@owncloud.com> |
||||
* @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\Migration; |
||||
|
||||
use OCA\DAV\CalDAV\CalDavBackend; |
||||
use OCA\DAV\CalDAV\Calendar; |
||||
use OCP\ILogger; |
||||
use Symfony\Component\Console\Output\OutputInterface; |
||||
|
||||
class MigrateCalendars { |
||||
|
||||
/** @var CalendarAdapter */ |
||||
protected $adapter; |
||||
|
||||
/** @var CalDavBackend */ |
||||
private $backend; |
||||
|
||||
/** @var ILogger */ |
||||
private $logger; |
||||
|
||||
/** @var OutputInterface */ |
||||
private $consoleOutput; |
||||
|
||||
/** |
||||
* @param CalendarAdapter $adapter |
||||
* @param CalDavBackend $backend |
||||
*/ |
||||
function __construct(CalendarAdapter $adapter, |
||||
CalDavBackend $backend, |
||||
ILogger $logger, |
||||
OutputInterface $consoleOutput = null |
||||
) { |
||||
$this->adapter = $adapter; |
||||
$this->backend = $backend; |
||||
$this->logger = $logger; |
||||
$this->consoleOutput = $consoleOutput; |
||||
} |
||||
|
||||
/** |
||||
* @param string $user |
||||
*/ |
||||
public function migrateForUser($user) { |
||||
|
||||
$this->adapter->foreachCalendar($user, function($calendar) use ($user) { |
||||
$principal = "principals/users/$user"; |
||||
$calendarByUri = $this->backend->getCalendarByUri($principal, $calendar['uri']); |
||||
if (!is_null($calendarByUri)) { |
||||
return; |
||||
} |
||||
|
||||
$newId = $this->backend->createCalendar($principal, $calendar['uri'], [ |
||||
'{DAV:}displayname' => $calendar['displayname'], |
||||
'{urn:ietf:params:xml:ns:caldav}calendar-description' => $calendar['displayname'], |
||||
'{urn:ietf:params:xml:ns:caldav}calendar-timezone' => $calendar['timezone'], |
||||
'{http://apple.com/ns/ical/}calendar-order' => $calendar['calendarorder'], |
||||
'{http://apple.com/ns/ical/}calendar-color' => $calendar['calendarcolor'], |
||||
]); |
||||
|
||||
$this->migrateCalendar($calendar['id'], $newId); |
||||
$this->migrateShares($calendar['id'], $newId); |
||||
}); |
||||
} |
||||
|
||||
public function setup() { |
||||
$this->adapter->setup(); |
||||
} |
||||
|
||||
/** |
||||
* @param int $calendarId |
||||
* @param int $newCalendarId |
||||
*/ |
||||
private function migrateCalendar($calendarId, $newCalendarId) { |
||||
$this->adapter->foreachCalendarObject($calendarId, function($calObject) use ($newCalendarId) { |
||||
try { |
||||
$this->backend->createCalendarObject($newCalendarId, $calObject['uri'], $calObject['calendardata']); |
||||
} catch (\Exception $ex) { |
||||
$eventId = $calObject['id']; |
||||
$calendarId = $calObject['calendarId']; |
||||
$msg = "One event could not be migrated. (id: $eventId, calendarid: $calendarId)"; |
||||
$this->logger->logException($ex, ['app' => 'dav', 'message' => $msg]); |
||||
if (!is_null($this->consoleOutput)) { |
||||
$this->consoleOutput->writeln($msg); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* @param int $calendarId |
||||
* @param int $newCalendarId |
||||
*/ |
||||
private function migrateShares($calendarId, $newCalendarId) { |
||||
$shares =$this->adapter->getShares($calendarId); |
||||
if (empty($shares)) { |
||||
return; |
||||
} |
||||
|
||||
$add = array_map(function($s) { |
||||
$prefix = 'principal:principals/users/'; |
||||
if ((int)$s['share_type'] === 1) { |
||||
$prefix = 'principal:principals/groups/'; |
||||
} |
||||
return [ |
||||
'href' => $prefix . $s['share_with'], |
||||
'readOnly' => !((int)$s['permissions'] === 31) |
||||
]; |
||||
}, $shares); |
||||
|
||||
$newCalendar = $this->backend->getCalendarById($newCalendarId); |
||||
$calendar = new Calendar($this->backend, $newCalendar); |
||||
$this->backend->updateShares($calendar, $add, []); |
||||
} |
||||
} |
@ -1,129 +0,0 @@ |
||||
<?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 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(); |
||||
$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('addressbook'), |
||||
'item_source' => $builder->createNamedParameter(6666), |
||||
'item_target' => $builder->createNamedParameter('Contacts (user02)'), |
||||
]) |
||||
->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']); |
||||
|
||||
// test getShares |
||||
$shares = $this->adapter->getShares(6666); |
||||
$this->assertEquals(1, count($shares)); |
||||
|
||||
} |
||||
|
||||
} |
@ -1,191 +0,0 @@ |
||||
<?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> |
@ -1,131 +0,0 @@ |
||||
<?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)); |
||||
|
||||
} |
||||
|
||||
} |
@ -1,151 +0,0 @@ |
||||
<?xml version="1.0" encoding="ISO-8859-1" ?> |
||||
<database> |
||||
|
||||
<name>*dbname*</name> |
||||
<create>true</create> |
||||
<overwrite>false</overwrite> |
||||
<charset>utf8</charset> |
||||
<table> |
||||
|
||||
<name>*dbprefix*contacts_addressbooks</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>true</notnull> |
||||
<length>255</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>displayname</name> |
||||
<type>text</type> |
||||
<default></default> |
||||
<notnull>false</notnull> |
||||
<length>255</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>uri</name> |
||||
<type>text</type> |
||||
<default></default> |
||||
<notnull>false</notnull> |
||||
<length>200</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>description</name> |
||||
<type>text</type> |
||||
<notnull>false</notnull> |
||||
<length>255</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>ctag</name> |
||||
<type>integer</type> |
||||
<default>1</default> |
||||
<notnull>true</notnull> |
||||
<unsigned>true</unsigned> |
||||
<length>4</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>active</name> |
||||
<type>integer</type> |
||||
<default>1</default> |
||||
<notnull>true</notnull> |
||||
<length>4</length> |
||||
</field> |
||||
|
||||
<index> |
||||
<name>c_addressbook_userid_index</name> |
||||
<field> |
||||
<name>userid</name> |
||||
<sorting>ascending</sorting> |
||||
</field> |
||||
</index> |
||||
</declaration> |
||||
|
||||
</table> |
||||
|
||||
<table> |
||||
|
||||
<name>*dbprefix*contacts_cards</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>addressbookid</name> |
||||
<type>integer</type> |
||||
<default></default> |
||||
<notnull>true</notnull> |
||||
<unsigned>true</unsigned> |
||||
<length>4</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>fullname</name> |
||||
<type>text</type> |
||||
<default></default> |
||||
<notnull>false</notnull> |
||||
<length>255</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>carddata</name> |
||||
<type>clob</type> |
||||
<notnull>false</notnull> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>uri</name> |
||||
<type>text</type> |
||||
<default></default> |
||||
<notnull>false</notnull> |
||||
<length>200</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>lastmodified</name> |
||||
<type>integer</type> |
||||
<default></default> |
||||
<notnull>false</notnull> |
||||
<unsigned>true</unsigned> |
||||
<length>4</length> |
||||
</field> |
||||
|
||||
|
||||
<index> |
||||
<name>c_addressbookid_index</name> |
||||
<field> |
||||
<name>addressbookid</name> |
||||
<sorting>ascending</sorting> |
||||
</field> |
||||
</index> |
||||
</declaration> |
||||
|
||||
</table> |
||||
|
||||
</database> |
@ -1,81 +0,0 @@ |
||||
<?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\CardDAV\CardDavBackend; |
||||
use OCA\Dav\Migration\AddressBookAdapter; |
||||
use OCP\ILogger; |
||||
use Test\TestCase; |
||||
|
||||
class MigrateAddressbookTest extends TestCase { |
||||
|
||||
public function testMigration() { |
||||
/** @var AddressBookAdapter | \PHPUnit_Framework_MockObject_MockObject $adapter */ |
||||
$adapter = $this->mockAdapter([ |
||||
['share_type' => '1', 'share_with' => 'users', 'permissions' => '31'], |
||||
['share_type' => '2', 'share_with' => 'adam', 'permissions' => '1'], |
||||
]); |
||||
|
||||
/** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $cardDav */ |
||||
$cardDav = $this->getMockBuilder('\OCA\Dav\CardDAV\CardDAVBackend')->disableOriginalConstructor()->getMock(); |
||||
$cardDav->expects($this->any())->method('createAddressBook')->willReturn(666); |
||||
$cardDav->expects($this->any())->method('getAddressBookById')->willReturn([]); |
||||
$cardDav->expects($this->once())->method('createAddressBook')->with('principals/users/test01', 'test_contacts'); |
||||
$cardDav->expects($this->once())->method('createCard')->with(666, '63f0dd6c-39d5-44be-9d34-34e7a7441fc2.vcf', 'BEGIN:VCARD'); |
||||
$cardDav->expects($this->once())->method('updateShares')->with($this->anything(), [ |
||||
['href' => 'principal:principals/groups/users', 'readOnly' => false], |
||||
['href' => 'principal:principals/users/adam', 'readOnly' => true] |
||||
]); |
||||
/** @var ILogger $logger */ |
||||
$logger = $this->getMockBuilder('\OCP\ILogger')->disableOriginalConstructor()->getMock(); |
||||
|
||||
$m = new \OCA\Dav\Migration\MigrateAddressbooks($adapter, $cardDav, $logger, null); |
||||
$m->migrateForUser('test01'); |
||||
} |
||||
|
||||
/** |
||||
* @return \PHPUnit_Framework_MockObject_MockObject |
||||
*/ |
||||
private function mockAdapter($shares = []) { |
||||
$adapter = $this->getMockBuilder('\OCA\Dav\Migration\AddressBookAdapter')->disableOriginalConstructor()->getMock(); |
||||
$adapter->expects($this->any())->method('foreachBook')->willReturnCallback(function ($user, \Closure $callBack) { |
||||
$callBack([ |
||||
'id' => 0, |
||||
'userid' => $user, |
||||
'displayname' => 'Test Contacts', |
||||
'uri' => 'test_contacts', |
||||
'description' => 'Contacts to test with', |
||||
'ctag' => 1234567890, |
||||
'active' => 1 |
||||
]); |
||||
}); |
||||
$adapter->expects($this->any())->method('foreachCard')->willReturnCallback(function ($addressBookId, \Closure $callBack) { |
||||
$callBack([ |
||||
'userid' => $addressBookId, |
||||
'uri' => '63f0dd6c-39d5-44be-9d34-34e7a7441fc2.vcf', |
||||
'carddata' => 'BEGIN:VCARD' |
||||
]); |
||||
}); |
||||
$adapter->expects($this->any())->method('getShares')->willReturn($shares); |
||||
return $adapter; |
||||
} |
||||
|
||||
} |
@ -1,85 +0,0 @@ |
||||
<?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 OCP\ILogger; |
||||
use Test\TestCase; |
||||
|
||||
class MigrateCalendarTest extends TestCase { |
||||
|
||||
public function testMigration() { |
||||
/** @var CalendarAdapter | \PHPUnit_Framework_MockObject_MockObject $adapter */ |
||||
$adapter = $this->mockAdapter([ |
||||
['share_type' => '1', 'share_with' => 'users', 'permissions' => '31'], |
||||
['share_type' => '2', 'share_with' => 'adam', 'permissions' => '1'], |
||||
]); |
||||
|
||||
/** @var CalDavBackend | \PHPUnit_Framework_MockObject_MockObject $cardDav */ |
||||
$cardDav = $this->getMockBuilder('\OCA\Dav\CalDAV\CalDAVBackend')->disableOriginalConstructor()->getMock(); |
||||
$cardDav->expects($this->any())->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'); |
||||
$cardDav->expects($this->once())->method('updateShares')->with($this->anything(), [ |
||||
['href' => 'principal:principals/groups/users', 'readOnly' => false], |
||||
['href' => 'principal:principals/users/adam', 'readOnly' => true] |
||||
]); |
||||
/** @var ILogger $logger */ |
||||
$logger = $this->getMockBuilder('\OCP\ILogger')->disableOriginalConstructor()->getMock(); |
||||
|
||||
$m = new \OCA\Dav\Migration\MigrateCalendars($adapter, $cardDav, $logger, null); |
||||
$m->migrateForUser('test01'); |
||||
} |
||||
|
||||
/** |
||||
* @return \PHPUnit_Framework_MockObject_MockObject |
||||
*/ |
||||
private function mockAdapter($shares = [], $calData = 'BEGIN:VCARD') { |
||||
$adapter = $this->getMockBuilder('\OCA\Dav\Migration\CalendarAdapter') |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$adapter->expects($this->any())->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->expects($this->any())->method('foreachCalendarObject')->willReturnCallback(function ($addressBookId, \Closure $callBack) use ($calData) { |
||||
$callBack([ |
||||
'userid' => $addressBookId, |
||||
'uri' => '63f0dd6c-39d5-44be-9d34-34e7a7441fc2.ics', |
||||
'calendardata' => $calData |
||||
]); |
||||
}); |
||||
$adapter->expects($this->any())->method('getShares')->willReturn($shares); |
||||
return $adapter; |
||||
} |
||||
} |
Loading…
Reference in new issue