aboutsummaryrefslogtreecommitdiffstats
path: root/apps/user_status/tests/Unit/Controller/StatusesControllerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/user_status/tests/Unit/Controller/StatusesControllerTest.php')
-rw-r--r--apps/user_status/tests/Unit/Controller/StatusesControllerTest.php94
1 files changed, 94 insertions, 0 deletions
diff --git a/apps/user_status/tests/Unit/Controller/StatusesControllerTest.php b/apps/user_status/tests/Unit/Controller/StatusesControllerTest.php
new file mode 100644
index 00000000000..76d337879c3
--- /dev/null
+++ b/apps/user_status/tests/Unit/Controller/StatusesControllerTest.php
@@ -0,0 +1,94 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\UserStatus\Tests\Controller;
+
+use OCA\UserStatus\Controller\StatusesController;
+use OCA\UserStatus\Db\UserStatus;
+use OCA\UserStatus\Service\StatusService;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\AppFramework\OCS\OCSNotFoundException;
+use OCP\IRequest;
+use PHPUnit\Framework\MockObject\MockObject;
+use Test\TestCase;
+
+class StatusesControllerTest extends TestCase {
+ private StatusService&MockObject $service;
+ private StatusesController $controller;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $request = $this->createMock(IRequest::class);
+ $this->service = $this->createMock(StatusService::class);
+
+ $this->controller = new StatusesController('user_status', $request, $this->service);
+ }
+
+ public function testFindAll(): void {
+ $userStatus = $this->getUserStatus();
+
+ $this->service->expects($this->once())
+ ->method('findAll')
+ ->with(20, 40)
+ ->willReturn([$userStatus]);
+
+ $response = $this->controller->findAll(20, 40);
+ $this->assertEquals([[
+ 'userId' => 'john.doe',
+ 'status' => 'offline',
+ 'icon' => '🏝',
+ 'message' => 'On vacation',
+ 'clearAt' => 60000,
+ ]], $response->getData());
+ }
+
+ public function testFind(): void {
+ $userStatus = $this->getUserStatus();
+
+ $this->service->expects($this->once())
+ ->method('findByUserId')
+ ->with('john.doe')
+ ->willReturn($userStatus);
+
+ $response = $this->controller->find('john.doe');
+ $this->assertEquals([
+ 'userId' => 'john.doe',
+ 'status' => 'offline',
+ 'icon' => '🏝',
+ 'message' => 'On vacation',
+ 'clearAt' => 60000,
+ ], $response->getData());
+ }
+
+ public function testFindDoesNotExist(): void {
+ $this->service->expects($this->once())
+ ->method('findByUserId')
+ ->with('john.doe')
+ ->willThrowException(new DoesNotExistException(''));
+
+ $this->expectException(OCSNotFoundException::class);
+ $this->expectExceptionMessage('No status for the requested userId');
+
+ $this->controller->find('john.doe');
+ }
+
+ private function getUserStatus(): UserStatus {
+ $userStatus = new UserStatus();
+ $userStatus->setId(1337);
+ $userStatus->setUserId('john.doe');
+ $userStatus->setStatus('invisible');
+ $userStatus->setStatusTimestamp(5000);
+ $userStatus->setIsUserDefined(true);
+ $userStatus->setCustomIcon('🏝');
+ $userStatus->setCustomMessage('On vacation');
+ $userStatus->setClearAt(60000);
+
+ return $userStatus;
+ }
+}