summaryrefslogtreecommitdiffstats
path: root/tests/lib
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@owncloud.com>2015-10-19 15:39:39 +0200
committerJoas Schilling <nickvergessen@owncloud.com>2015-10-29 09:26:26 +0100
commitca2fd3007343dc4ba10d2b9d5e44ada0340d90cc (patch)
tree67f34ff6161b63c6b797843cd1fc37a60bee9b31 /tests/lib
parent527ef76dd6e45c2776edbc90829323e0ca534214 (diff)
downloadnextcloud-server-ca2fd3007343dc4ba10d2b9d5e44ada0340d90cc.tar.gz
nextcloud-server-ca2fd3007343dc4ba10d2b9d5e44ada0340d90cc.zip
Remove shares where the parent does not exist anymore
Diffstat (limited to 'tests/lib')
-rw-r--r--tests/lib/repair/repairinvalidsharestest.php78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/lib/repair/repairinvalidsharestest.php b/tests/lib/repair/repairinvalidsharestest.php
index 89a5ba470e1..7aaf273e3cc 100644
--- a/tests/lib/repair/repairinvalidsharestest.php
+++ b/tests/lib/repair/repairinvalidsharestest.php
@@ -119,5 +119,83 @@ class RepairInvalidSharesTest extends TestCase {
$this->assertNull($userShare['expiration'], 'bogus expiration date was removed');
$this->assertNotNull($linkShare['expiration'], 'valid link share expiration date still there');
}
+
+ /**
+ * Test remove shares where the parent share does not exist anymore
+ */
+ public function testSharesNonExistingParent() {
+ $qb = $this->connection->getQueryBuilder();
+ $shareValues = [
+ 'share_type' => $qb->expr()->literal(Constants::SHARE_TYPE_USER),
+ 'share_with' => $qb->expr()->literal('recipientuser1'),
+ 'uid_owner' => $qb->expr()->literal('user1'),
+ 'item_type' => $qb->expr()->literal('folder'),
+ 'item_source' => $qb->expr()->literal(123),
+ 'item_target' => $qb->expr()->literal('/123'),
+ 'file_source' => $qb->expr()->literal(123),
+ 'file_target' => $qb->expr()->literal('/test'),
+ 'permissions' => $qb->expr()->literal(1),
+ 'stime' => $qb->expr()->literal(time()),
+ 'expiration' => $qb->expr()->literal('2015-09-25 00:00:00')
+ ];
+
+ // valid share
+ $qb = $this->connection->getQueryBuilder();
+ $qb->insert('share')
+ ->values($shareValues)
+ ->execute();
+ $parent = $this->getLastShareId();
+
+ // share with existing parent
+ $qb = $this->connection->getQueryBuilder();
+ $qb->insert('share')
+ ->values(array_merge($shareValues, [
+ 'parent' => $qb->expr()->literal($parent),
+ ]))->execute();
+ $validChild = $this->getLastShareId();
+
+ // share with non-existing parent
+ $qb = $this->connection->getQueryBuilder();
+ $qb->insert('share')
+ ->values(array_merge($shareValues, [
+ 'parent' => $qb->expr()->literal($parent + 100),
+ ]))->execute();
+ $invalidChild = $this->getLastShareId();
+
+ $query = $this->connection->getQueryBuilder();
+ $result = $query->select('id')
+ ->from('share')
+ ->orderBy('id', 'ASC')
+ ->execute();
+ $rows = $result->fetchAll();
+ $this->assertSame([['id' => $parent], ['id' => $validChild], ['id' => $invalidChild]], $rows);
+ $result->closeCursor();
+
+ $this->repair->run();
+
+ $query = $this->connection->getQueryBuilder();
+ $result = $query->select('id')
+ ->from('share')
+ ->orderBy('id', 'ASC')
+ ->execute();
+ $rows = $result->fetchAll();
+ $this->assertSame([['id' => $parent], ['id' => $validChild]], $rows);
+ $result->closeCursor();
+ }
+
+ /**
+ * @return int
+ */
+ protected function getLastShareId() {
+ // select because lastInsertId does not work with OCI
+ $query = $this->connection->getQueryBuilder();
+ $result = $query->select('id')
+ ->from('share')
+ ->orderBy('id', 'DESC')
+ ->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+ return $row['id'];
+ }
}