aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/Authentication/Token/RemoteWipeTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/Authentication/Token/RemoteWipeTest.php')
-rw-r--r--tests/lib/Authentication/Token/RemoteWipeTest.php173
1 files changed, 173 insertions, 0 deletions
diff --git a/tests/lib/Authentication/Token/RemoteWipeTest.php b/tests/lib/Authentication/Token/RemoteWipeTest.php
new file mode 100644
index 00000000000..ca09767c759
--- /dev/null
+++ b/tests/lib/Authentication/Token/RemoteWipeTest.php
@@ -0,0 +1,173 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace Test\Authentication\Token;
+
+use OC\Authentication\Events\RemoteWipeFinished;
+use OC\Authentication\Events\RemoteWipeStarted;
+use OC\Authentication\Exceptions\WipeTokenException;
+use OC\Authentication\Token\IProvider;
+use OC\Authentication\Token\IProvider as ITokenProvider;
+use OC\Authentication\Token\IToken;
+use OC\Authentication\Token\IWipeableToken;
+use OC\Authentication\Token\RemoteWipe;
+use OCP\EventDispatcher\IEventDispatcher;
+use OCP\IUser;
+use PHPUnit\Framework\MockObject\MockObject;
+use Psr\Log\LoggerInterface;
+use Test\TestCase;
+
+class RemoteWipeTest extends TestCase {
+ /** @var ITokenProvider|MockObject */
+ private $tokenProvider;
+
+ /** @var IEventDispatcher|MockObject */
+ private $eventDispatcher;
+
+ /** @var LoggerInterface|MockObject */
+ private $logger;
+
+ /** @var RemoteWipe */
+ private $remoteWipe;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->tokenProvider = $this->createMock(IProvider::class);
+ $this->eventDispatcher = $this->createMock(IEventDispatcher::class);
+ $this->logger = $this->createMock(LoggerInterface::class);
+
+ $this->remoteWipe = new RemoteWipe(
+ $this->tokenProvider,
+ $this->eventDispatcher,
+ $this->logger
+ );
+ }
+
+ public function testMarkNonWipableTokenForWipe(): void {
+ $token = $this->createMock(IToken::class);
+ $result = $this->remoteWipe->markTokenForWipe($token);
+ $this->assertFalse($result);
+ }
+
+ public function testMarkTokenForWipe(): void {
+ $token = $this->createMock(IWipeableToken::class);
+ $token->expects($this->once())
+ ->method('wipe');
+
+ $this->tokenProvider->expects($this->once())
+ ->method('updateToken')
+ ->with($token);
+
+ $result = $this->remoteWipe->markTokenForWipe($token);
+ $this->assertTrue($result);
+ }
+
+ public function testMarkAllTokensForWipeNoWipeableToken(): void {
+ /** @var IUser|MockObject $user */
+ $user = $this->createMock(IUser::class);
+ $user->method('getUID')->willReturn('user123');
+ $token1 = $this->createMock(IToken::class);
+ $token2 = $this->createMock(IToken::class);
+ $this->tokenProvider->expects($this->once())
+ ->method('getTokenByUser')
+ ->with('user123')
+ ->willReturn([$token1, $token2]);
+
+ $result = $this->remoteWipe->markAllTokensForWipe($user);
+
+ $this->assertFalse($result);
+ }
+
+ public function testMarkAllTokensForWipe(): void {
+ /** @var IUser|MockObject $user */
+ $user = $this->createMock(IUser::class);
+ $user->method('getUID')->willReturn('user123');
+ $token1 = $this->createMock(IToken::class);
+ $token2 = $this->createMock(IWipeableToken::class);
+ $this->tokenProvider->expects($this->once())
+ ->method('getTokenByUser')
+ ->with('user123')
+ ->willReturn([$token1, $token2]);
+ $token2->expects($this->once())
+ ->method('wipe');
+ $this->tokenProvider->expects($this->once())
+ ->method('updateToken')
+ ->with($token2);
+
+ $result = $this->remoteWipe->markAllTokensForWipe($user);
+
+ $this->assertTrue($result);
+ }
+
+ public function testStartWipingNotAWipeToken(): void {
+ $token = $this->createMock(IToken::class);
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('tk1')
+ ->willReturn($token);
+ $this->eventDispatcher->expects($this->never())
+ ->method('dispatch');
+
+ $result = $this->remoteWipe->start('tk1');
+
+ $this->assertFalse($result);
+ }
+
+ public function testStartWiping(): void {
+ $token = $this->createMock(IToken::class);
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('tk1')
+ ->willThrowException(new WipeTokenException($token));
+ $this->eventDispatcher->expects($this->once())
+ ->method('dispatch');
+ $this->eventDispatcher->expects($this->once())
+ ->method('dispatch')
+ ->with(RemoteWipeStarted::class, $this->equalTo(new RemoteWipeStarted($token)));
+
+ $result = $this->remoteWipe->start('tk1');
+
+ $this->assertTrue($result);
+ }
+
+ public function testFinishWipingNotAWipeToken(): void {
+ $token = $this->createMock(IToken::class);
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('tk1')
+ ->willReturn($token);
+ $this->eventDispatcher->expects($this->never())
+ ->method('dispatch');
+
+ $result = $this->remoteWipe->finish('tk1');
+
+ $this->assertFalse($result);
+ }
+
+ public function startFinishWiping() {
+ $token = $this->createMock(IToken::class);
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('tk1')
+ ->willThrowException(new WipeTokenException($token));
+ $this->eventDispatcher->expects($this->once())
+ ->method('dispatch');
+ $this->tokenProvider->expects($this->once())
+ ->method('invalidateToken')
+ ->with($token);
+ $this->eventDispatcher->expects($this->once())
+ ->method('dispatch')
+ ->with(RemoteWipeFinished::class, $this->equalTo(new RemoteWipeFinished($token)));
+
+ $result = $this->remoteWipe->finish('tk1');
+
+ $this->assertTrue($result);
+ }
+}