aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2018-05-22 08:52:16 +0200
committerChristoph Wurst <christoph@winzerhof-wurst.at>2018-06-20 08:30:26 +0200
commit13d93f5b25aa3e663146349583a0a8e01b216f7a (patch)
tree494950eefa4b27c980ebce22eeafa58eab08892d /tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php
parentcad8824a8e7da7fcf61960b6502b307672651c2b (diff)
downloadnextcloud-server-13d93f5b25aa3e663146349583a0a8e01b216f7a.tar.gz
nextcloud-server-13d93f5b25aa3e663146349583a0a8e01b216f7a.zip
Make 2FA providers stateful
This adds persistence to the Nextcloud server 2FA logic so that the server knows which 2FA providers are enabled for a specific user at any time, even when the provider is not available. The `IStatefulProvider` interface was added as tagging interface for providers that are compatible with this new API. Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php')
-rw-r--r--tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php86
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php b/tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php
new file mode 100644
index 00000000000..6479e41fffb
--- /dev/null
+++ b/tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: christoph
+ * Date: 04.06.18
+ * Time: 13:29
+ */
+
+namespace lib\Authentication\TwoFactorAuth;
+
+use Exception;
+use OC\Authentication\TwoFactorAuth\ProviderLoader;
+use OCP\App\IAppManager;
+use OCP\Authentication\TwoFactorAuth\IProvider;
+use PHPUnit_Framework_MockObject_MockObject;
+use Test\TestCase;
+
+class ProviderLoaderTest extends TestCase {
+
+ /** @var IAppManager|PHPUnit_Framework_MockObject_MockObject */
+ private $appManager;
+
+ /** @var IUser|PHPUnit_Framework_MockObject_MockObject */
+ private $user;
+
+ /** @var ProviderLoader */
+ private $loader;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->appManager = $this->createMock(IAppManager::class);
+ $this->user = $this->createMock(\OCP\IUser::class);
+
+ $this->loader = new ProviderLoader($this->appManager);
+ }
+
+ /**
+ * @expectedException Exception
+ * @expectedExceptionMessage Could not load two-factor auth provider \OCA\MyFaulty2faApp\DoesNotExist
+ */
+ public function testFailHardIfProviderCanNotBeLoaded() {
+ $this->appManager->expects($this->once())
+ ->method('getEnabledAppsForUser')
+ ->with($this->user)
+ ->willReturn(['mail', 'twofactor_totp']);
+ $this->appManager
+ ->method('getAppInfo')
+ ->will($this->returnValueMap([
+ ['mail', false, null, []],
+ ['twofactor_totp', false, null, [
+ 'two-factor-providers' => [
+ '\\OCA\\MyFaulty2faApp\\DoesNotExist',
+ ],
+ ]],
+ ]));
+
+ $this->loader->getProviders($this->user);
+ }
+
+ public function testGetProviders() {
+ $provider = $this->createMock(IProvider::class);
+ $provider->method('getId')->willReturn('test');
+ \OC::$server->registerService('\\OCA\\TwoFactorTest\\Provider', function () use ($provider) {
+ return $provider;
+ });
+ $this->appManager->expects($this->once())
+ ->method('getEnabledAppsForUser')
+ ->with($this->user)
+ ->willReturn(['twofactor_test']);
+ $this->appManager
+ ->method('getAppInfo')
+ ->with('twofactor_test')
+ ->willReturn(['two-factor-providers' => [
+ '\\OCA\\TwoFactorTest\\Provider',
+ ]]);
+
+ $providers = $this->loader->getProviders($this->user);
+
+ $this->assertCount(1, $providers);
+ $this->assertArrayHasKey('test', $providers);
+ $this->assertSame($provider, $providers['test']);
+ }
+
+}