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; } }