diff --git a/package.json b/package.json index 32f3436..b706b69 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,9 @@ "build": "NODE_ENV=production webpack --progress --hide-modules --config webpack.prod.js", "dev": "NODE_ENV=development webpack --progress --config webpack.dev.js", "watch": "NODE_ENV=development webpack --progress --watch --config webpack.dev.js", - "test": "run-p --continue-on-error --print-label test:**", - "test:php:unit": "dotenv ./vendor/bin/phpunit -c phpunit.xml", + "test": "run-s --continue-on-error --print-label test:**", + "test:php:unit": "dotenv ./vendor/bin/phpunit -- -c phpunit.xml", + "test:php:integration": "dotenv ./vendor/bin/phpunit -- -c phpunit.integration.xml", "fix": "run-p --continue-on-error --print-label lint:fix:*", "lint": "run-p --continue-on-error --print-label lint:*", "lint:script": "eslint --ext .tsx,.ts ts", @@ -50,7 +51,7 @@ "husky": { "hooks": { "pre-commit": "yarn lint", - "pre-push": "yarn test", + "pre-push": "yarn test:php:unit", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, diff --git a/phpunit.integration.xml b/phpunit.integration.xml new file mode 100644 index 0000000..7009043 --- /dev/null +++ b/phpunit.integration.xml @@ -0,0 +1,12 @@ + + + + tests/Integration + + + + + lib + + + diff --git a/tests/Integration/Db/RoomMapperTest.php b/tests/Integration/Db/RoomMapperTest.php new file mode 100644 index 0000000..a4525d7 --- /dev/null +++ b/tests/Integration/Db/RoomMapperTest.php @@ -0,0 +1,141 @@ +db = OC::$server->getDatabaseConnection(); + $this->mapper = new RoomMapper($this->db); + $this->shareMapper = new RoomShareMapper($this->db); + + $this->userId = $this->getRandomString(); + $this->uid = $this->getRandomString(); + } + + public function testInsert() + { + $room = $this->insert($this->uid, $this->userId); + + $this->assertEquals($this->uid, $room->getUid()); + + $this->mapper->delete($room); + } + + /** + * @depends testInsert + */ + public function testFind() + { + $newRoom = $this->insert($this->uid, $this->userId); + + $room = $this->mapper->find($newRoom->getId()); + + $this->assertEquals($this->uid, $room->getUid()); + + $this->mapper->delete($room); + } + + /** + * @depends testInsert + */ + public function testFindByUid() + { + $newRoom = $this->insert($this->uid, $this->userId); + + $room = $this->mapper->findByUid($this->uid); + + $this->assertEquals($newRoom->getId(), $room->getId()); + + $this->mapper->delete($room); + } + + /** + * @depends testInsert + */ + public function testFindAll() + { + $room = $this->insert($this->uid, $this->userId); + + $foreignRoom1 = $this->insert($this->getRandomString(), $this->getRandomString()); + $foreignRoom2 = $this->insert($this->getRandomString(), $this->getRandomString()); + $foreignRoom3 = $this->insert($this->getRandomString(), $this->getRandomString()); + + $this->assertCount(1, $this->mapper->findAll($this->userId, [])); + + $shares = []; + $shares[] = $this->insertShare($foreignRoom1->getId(), RoomShare::SHARE_TYPE_USER, $this->userId); + $shares[] = $this->insertShare($foreignRoom1->getId(), RoomShare::SHARE_TYPE_GROUP, 'foo bar'); + $shares[] = $this->insertShare($foreignRoom2->getId(), RoomShare::SHARE_TYPE_GROUP, 'foo bar'); + $shares[] = $this->insertShare($foreignRoom3->getId(), RoomShare::SHARE_TYPE_USER, $this->getRandomString()); + $shares[] = $this->insertShare($foreignRoom3->getId(), RoomShare::SHARE_TYPE_USER, $this->userId, RoomShare::PERMISSION_MODERATOR); + $shares[] = $this->insertShare($foreignRoom3->getId(), RoomShare::SHARE_TYPE_GROUP, 'foo bar', RoomShare::PERMISSION_USER); + + $rooms = $this->mapper->findAll($this->userId, ['foo bar']); + $this->assertCount(3, $rooms); + + $this->mapper->delete($room); + $this->mapper->delete($foreignRoom1); + $this->mapper->delete($foreignRoom2); + $this->mapper->delete($foreignRoom3); + + foreach($shares as $share) { + $this->shareMapper->delete($share); + } + } + + private function getRandomString(): string + { + return \OC::$server->getSecureRandom()->generate(18, \OCP\Security\ISecureRandom::CHAR_HUMAN_READABLE); + } + + private function insert($uid, $userId): Room + { + $room = new Room(); + $room->setUid($uid); + $room->setName('random name'); + $room->setWelcome(''); + $room->setMaxParticipants(0); + $room->setAttendeePassword('1'); + $room->setModeratorPassword('2'); + $room->setRecord(false); + $room->setUserId($userId); + + return $this->mapper->insert($room); + } + + private function insertShare($id, $type, $with, $permission = RoomShare::PERMISSION_ADMIN): RoomShare + { + $roomShare = new RoomShare(); + + $roomShare->setRoomId($id); + $roomShare->setShareType($type); + $roomShare->setShareWith($with); + $roomShare->setPermission($permission); + + return $this->shareMapper->insert($roomShare); + } +} \ No newline at end of file