parent
4c26abe228
commit
7d51fd0310
@ -0,0 +1,103 @@ |
||||
<?php |
||||
/** |
||||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
||||
* |
||||
* @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 OC\Repair; |
||||
|
||||
use OCP\IDBConnection; |
||||
use OCP\Migration\IOutput; |
||||
use OCP\Migration\IRepairStep; |
||||
|
||||
/** |
||||
* Class RemoveOldShares |
||||
* |
||||
* @package OC\Repair |
||||
*/ |
||||
class RemoveOldShares implements IRepairStep { |
||||
|
||||
/** @var IDBConnection */ |
||||
protected $connection; |
||||
|
||||
/** |
||||
* RemoveOldCalendarShares constructor. |
||||
* |
||||
* @param IDBConnection $db |
||||
*/ |
||||
public function __construct(IDBConnection $connection) { |
||||
$this->connection = $connection; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getName() { |
||||
return 'Remove old (< 9.0) calendar/contact shares'; |
||||
} |
||||
|
||||
/** |
||||
* @param IOutput $output |
||||
*/ |
||||
public function run(IOutput $output) { |
||||
$output->startProgress(4); |
||||
|
||||
$this->removeCalendarShares($output); |
||||
$this->removeContactShares($output); |
||||
|
||||
$output->finishProgress(); |
||||
} |
||||
|
||||
/** |
||||
* @param IOutput $output |
||||
*/ |
||||
private function removeCalendarShares(IOutput $output) { |
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->delete('share') |
||||
->where($qb->expr()->eq('item_type', $qb->createNamedParameter('calendar'))); |
||||
$qb->execute(); |
||||
|
||||
$output->advance(); |
||||
|
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->delete('share') |
||||
->where($qb->expr()->eq('item_type', $qb->createNamedParameter('event'))); |
||||
$qb->execute(); |
||||
|
||||
$output->advance(); |
||||
} |
||||
|
||||
/** |
||||
* @param IOutput $output |
||||
*/ |
||||
private function removeContactShares(IOutput $output) { |
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->delete('share') |
||||
->where($qb->expr()->eq('item_type', $qb->createNamedParameter('contact'))); |
||||
$qb->execute(); |
||||
|
||||
$output->advance(); |
||||
|
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->delete('share') |
||||
->where($qb->expr()->eq('item_type', $qb->createNamedParameter('addressbook'))); |
||||
$qb->execute(); |
||||
|
||||
$output->advance(); |
||||
} |
||||
} |
||||
|
||||
@ -0,0 +1,160 @@ |
||||
<?php |
||||
/** |
||||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
||||
* |
||||
* @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 Test\Repair; |
||||
|
||||
use OC\Repair\RemoveOldShares; |
||||
use OCP\IDBConnection; |
||||
use OCP\Migration\IOutput; |
||||
|
||||
/** |
||||
* Class RemoveOldSharesTest |
||||
* |
||||
* @package Test\Repair |
||||
* @group DB |
||||
*/ |
||||
class RemoveOldSharesTest extends \Test\TestCase { |
||||
|
||||
/** @var RemoveOldShares */ |
||||
protected $repair; |
||||
|
||||
/** @var IDBConnection */ |
||||
protected $connection; |
||||
|
||||
/** @var IOutput */ |
||||
private $outputMock; |
||||
|
||||
protected function setUp() { |
||||
parent::setUp(); |
||||
|
||||
$this->outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
|
||||
$this->connection = \OC::$server->getDatabaseConnection(); |
||||
$this->repair = new RemoveOldShares($this->connection); |
||||
} |
||||
|
||||
protected function tearDown() { |
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->delete('share'); |
||||
$qb->execute(); |
||||
|
||||
return parent::tearDown(); |
||||
} |
||||
|
||||
public function testRun() { |
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->insert('share') |
||||
->values([ |
||||
'share_type' => $qb->createNamedParameter(0), |
||||
'share_with' => $qb->createNamedParameter('foo'), |
||||
'uid_owner' => $qb->createNamedParameter('owner'), |
||||
'item_type' => $qb->createNamedParameter('file'), |
||||
'item_source' => $qb->createNamedParameter(42), |
||||
'item_target' => $qb->createNamedParameter('/target'), |
||||
'file_source' => $qb->createNamedParameter(42), |
||||
'file_target' => $qb->createNamedParameter('/target'), |
||||
'permissions' => $qb->createNamedParameter(1), |
||||
]); |
||||
$qb->execute(); |
||||
|
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->insert('share') |
||||
->values([ |
||||
'share_type' => $qb->createNamedParameter(0), |
||||
'share_with' => $qb->createNamedParameter('foo'), |
||||
'uid_owner' => $qb->createNamedParameter('owner'), |
||||
'item_type' => $qb->createNamedParameter('calendar'), |
||||
'item_source' => $qb->createNamedParameter(42), |
||||
'item_target' => $qb->createNamedParameter('/target'), |
||||
'file_source' => $qb->createNamedParameter(42), |
||||
'file_target' => $qb->createNamedParameter('/target'), |
||||
'permissions' => $qb->createNamedParameter(1), |
||||
]); |
||||
$qb->execute(); |
||||
|
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->insert('share') |
||||
->values([ |
||||
'share_type' => $qb->createNamedParameter(0), |
||||
'share_with' => $qb->createNamedParameter('foo'), |
||||
'uid_owner' => $qb->createNamedParameter('owner'), |
||||
'item_type' => $qb->createNamedParameter('event'), |
||||
'item_source' => $qb->createNamedParameter(42), |
||||
'item_target' => $qb->createNamedParameter('/target'), |
||||
'file_source' => $qb->createNamedParameter(42), |
||||
'file_target' => $qb->createNamedParameter('/target'), |
||||
'permissions' => $qb->createNamedParameter(1), |
||||
]); |
||||
$qb->execute(); |
||||
|
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->insert('share') |
||||
->values([ |
||||
'share_type' => $qb->createNamedParameter(0), |
||||
'share_with' => $qb->createNamedParameter('foo'), |
||||
'uid_owner' => $qb->createNamedParameter('owner'), |
||||
'item_type' => $qb->createNamedParameter('contact'), |
||||
'item_source' => $qb->createNamedParameter(42), |
||||
'item_target' => $qb->createNamedParameter('/target'), |
||||
'file_source' => $qb->createNamedParameter(42), |
||||
'file_target' => $qb->createNamedParameter('/target'), |
||||
'permissions' => $qb->createNamedParameter(1), |
||||
]); |
||||
$qb->execute(); |
||||
|
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->insert('share') |
||||
->values([ |
||||
'share_type' => $qb->createNamedParameter(0), |
||||
'share_with' => $qb->createNamedParameter('foo'), |
||||
'uid_owner' => $qb->createNamedParameter('owner'), |
||||
'item_type' => $qb->createNamedParameter('addressbook'), |
||||
'item_source' => $qb->createNamedParameter(42), |
||||
'item_target' => $qb->createNamedParameter('/target'), |
||||
'file_source' => $qb->createNamedParameter(42), |
||||
'file_target' => $qb->createNamedParameter('/target'), |
||||
'permissions' => $qb->createNamedParameter(1), |
||||
]); |
||||
$qb->execute(); |
||||
|
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->selectAlias($qb->createFunction('COUNT(*)'), 'count') |
||||
->from('share'); |
||||
|
||||
$cursor = $qb->execute(); |
||||
$data = $cursor->fetchAll(); |
||||
$cursor->closeCursor(); |
||||
$this->assertEquals(5, $data[0]['count']); |
||||
|
||||
$this->repair->run($this->outputMock); |
||||
|
||||
$qb = $this->connection->getQueryBuilder(); |
||||
$qb->select('*') |
||||
->from('share'); |
||||
|
||||
$cursor = $qb->execute(); |
||||
$data = $cursor->fetchAll(); |
||||
$cursor->closeCursor(); |
||||
$this->assertCount(1, $data); |
||||
$this->assertEquals('file', $data[0]['item_type']); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue