Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/user_saml.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Controller/SAMLControllerTest.php')
-rw-r--r--tests/Controller/SAMLControllerTest.php246
1 files changed, 246 insertions, 0 deletions
diff --git a/tests/Controller/SAMLControllerTest.php b/tests/Controller/SAMLControllerTest.php
new file mode 100644
index 00000000..0714758f
--- /dev/null
+++ b/tests/Controller/SAMLControllerTest.php
@@ -0,0 +1,246 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_SAML\Tests\Controller;
+
+use OCA\User_SAML\Controller\SAMLController;
+use OCA\User_SAML\SAMLSettings;
+use OCA\User_SAML\UserBackend;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\IConfig;
+use OCP\IRequest;
+use OCP\ISession;
+use OCP\IURLGenerator;
+use OCP\IUserBackend;
+use OCP\IUserManager;
+use OCP\IUserSession;
+use Test\TestCase;
+
+class SAMLControllerTest extends TestCase {
+ /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */
+ private $request;
+ /** @var ISession|\PHPUnit_Framework_MockObject_MockObject */
+ private $session;
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ private $userSession;
+ /** @var SAMLSettings|\PHPUnit_Framework_MockObject_MockObject*/
+ private $samlSettings;
+ /** @var UserBackend|\PHPUnit_Framework_MockObject_MockObject */
+ private $userBackend;
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ private $urlGenerator;
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+ /** @var SAMLController */
+ private $samlController;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->request = $this->createMock(IRequest::class);
+ $this->session = $this->createMock(ISession::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->samlSettings = $this->createMock(SAMLSettings::class);
+ $this->userBackend = $this->createMock(UserBackend::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+
+ $this->samlController = new SAMLController(
+ 'user_saml',
+ $this->request,
+ $this->session,
+ $this->userSession,
+ $this->samlSettings,
+ $this->userBackend,
+ $this->config,
+ $this->urlGenerator,
+ $this->userManager
+ );
+ }
+
+ /**
+ * @expectedExceptionMessage Type of "UnknownValue" is not supported for user_saml
+ * @expectedException \Exception
+ */
+ public function testLoginWithInvalidAppValue() {
+ $this->config
+ ->expects($this->once())
+ ->method('getAppValue')
+ ->with('user_saml', 'type')
+ ->willReturn('UnknownValue');
+ $this->samlController->login();
+ }
+
+ public function testLoginWithEnvVariableAndExistingUser() {
+ $this->config
+ ->expects($this->at(0))
+ ->method('getAppValue')
+ ->with('user_saml', 'type')
+ ->willReturn('environment-variable');
+ $this->session
+ ->expects($this->once())
+ ->method('get')
+ ->with('user_saml.samlUserData')
+ ->willReturn([
+ 'foo' => 'bar',
+ 'uid' => 'MyUid',
+ 'bar' => 'foo',
+ ]);
+ $this->config
+ ->expects($this->at(1))
+ ->method('getAppValue')
+ ->with('user_saml', 'general-uid_mapping')
+ ->willReturn('uid');
+ $this->userManager
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('MyUid')
+ ->willReturn(true);
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('/')
+ ->willReturn('https://nextcloud.com/absolute/');
+
+ $expected = new RedirectResponse('https://nextcloud.com/absolute/');
+ $this->assertEquals($expected, $this->samlController->login());
+ }
+
+ public function testLoginWithEnvVariableAndExistingUserAndArray() {
+ $this->config
+ ->expects($this->at(0))
+ ->method('getAppValue')
+ ->with('user_saml', 'type')
+ ->willReturn('environment-variable');
+ $this->session
+ ->expects($this->once())
+ ->method('get')
+ ->with('user_saml.samlUserData')
+ ->willReturn([
+ 'foo' => 'bar',
+ 'uid' => ['MyUid'],
+ 'bar' => 'foo',
+ ]);
+ $this->config
+ ->expects($this->at(1))
+ ->method('getAppValue')
+ ->with('user_saml', 'general-uid_mapping')
+ ->willReturn('uid');
+ $this->userManager
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('MyUid')
+ ->willReturn(true);
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('/')
+ ->willReturn('https://nextcloud.com/absolute/');
+
+ $expected = new RedirectResponse('https://nextcloud.com/absolute/');
+ $this->assertEquals($expected, $this->samlController->login());
+ }
+
+ public function testLoginWithEnvVariableAndNotExistingUserWithProvisioning() {
+ $this->config
+ ->expects($this->at(0))
+ ->method('getAppValue')
+ ->with('user_saml', 'type')
+ ->willReturn('environment-variable');
+ $this->session
+ ->expects($this->once())
+ ->method('get')
+ ->with('user_saml.samlUserData')
+ ->willReturn([
+ 'foo' => 'bar',
+ 'uid' => 'MyUid',
+ 'bar' => 'foo',
+ ]);
+ $this->config
+ ->expects($this->at(1))
+ ->method('getAppValue')
+ ->with('user_saml', 'general-uid_mapping')
+ ->willReturn('uid');
+ $this->userManager
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('MyUid')
+ ->willReturn(false);
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('/')
+ ->willReturn('https://nextcloud.com/absolute/');
+ $this->userBackend
+ ->expects($this->at(0))
+ ->method('autoprovisionAllowed')
+ ->willReturn(true);
+ $this->userBackend
+ ->expects($this->at(1))
+ ->method('createUserIfNotExists')
+ ->with('MyUid');
+
+ $expected = new RedirectResponse('https://nextcloud.com/absolute/');
+ $this->assertEquals($expected, $this->samlController->login());
+ }
+
+ public function testLoginWithEnvVariableAndNotExistingUserWithoutProvisioning() {
+ $this->config
+ ->expects($this->at(0))
+ ->method('getAppValue')
+ ->with('user_saml', 'type')
+ ->willReturn('environment-variable');
+ $this->session
+ ->expects($this->once())
+ ->method('get')
+ ->with('user_saml.samlUserData')
+ ->willReturn([
+ 'foo' => 'bar',
+ 'uid' => 'MyUid',
+ 'bar' => 'foo',
+ ]);
+ $this->config
+ ->expects($this->at(1))
+ ->method('getAppValue')
+ ->with('user_saml', 'general-uid_mapping')
+ ->willReturn('uid');
+ $this->userManager
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('MyUid')
+ ->willReturn(false);
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('linkToRouteAbsolute')
+ ->with('user_saml.SAML.notProvisioned')
+ ->willReturn('https://nextcloud.com/notprovisioned/');
+ $this->userBackend
+ ->expects($this->once())
+ ->method('autoprovisionAllowed')
+ ->willReturn(false);
+
+ $expected = new RedirectResponse('https://nextcloud.com/notprovisioned/');
+ $this->assertEquals($expected, $this->samlController->login());
+ }
+}