nc-vue-register/tests/Unit/Controller/ApiControllerTest.php

184 lines
5.1 KiB
PHP

<?php
/**
* ownCloud - registration
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Pellaeon Lin <pellaeon@hs.ntnu.edu.tw>
* @copyright Pellaeon Lin 2014
*/
namespace OCA\Registration\Tests\Unit\Controller;
use OCA\Registration\Controller\ApiController;
use OCA\Registration\Db\Registration;
use OCA\Registration\Service\MailService;
use OCA\Registration\Service\RegistrationService;
use OCA\Registration\Util\CoreBridge;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\Defaults;
use OCP\IL10N;
use OCP\IRequest;
use OCP\IUser;
use ChristophWurst\Nextcloud\Testing\TestCase;
class ApiControllerTest extends TestCase {
/** @var IRequest */
private $request;
/** @var RegistrationService|\PHPUnit_Framework_MockObject_MockObject */
private $registrationService;
/** @var MailService */
private $mailService;
/** @var IL10N */
private $l10n;
/** @var Defaults */
private $defaults;
/** @var ApiController */
private $controller;
public function setUp(): void {
parent::setUp();
$this->request = $this->createMock(IRequest::class);
$this->registrationService = $this->createMock(RegistrationService::class);
$this->mailService = $this->createMock(MailService::class);
$this->l10n = $this->createMock(IL10N::class);
$this->defaults = $this->createMock(Defaults::class);
$this->controller = new ApiController(
"registration",
$this->request,
$this->registrationService,
$this->mailService,
$this->l10n,
$this->defaults
);
}
public function testValidate() {
$this->registrationService
->expects($this->once())
->method('validateEmail')
->with('test@example.com');
$this->registrationService
->expects($this->once())
->method('validateDisplayname')
->with('user test');
$this->registrationService
->expects($this->once())
->method('validateUsername')
->with('user1');
$expected = new DataResponse([
'username' => 'user1',
'displayname' => 'user test',
'email' => 'test@example.com'
], Http::STATUS_OK);
$actual = $this->controller->validate('user1', 'user test', 'test@example.com');
$this->assertEquals($expected, $actual);
}
public function testValidateFailEmail() {
$exception = CoreBridge::createException('OCSException', '', 999);
$this->expectException(get_class($exception));
$this->registrationService
->expects($this->once())
->method('validateEmail')
->willThrowException($exception);
$this->controller->validate('user1', 'user test', 'test@example.com');
}
public function testValidateFailDisplayname() {
$exception = CoreBridge::createException('OCSException', '', 999);
$this->expectException(get_class($exception));
$this->registrationService
->expects($this->once())
->method('validateDisplayname')
->willThrowException($exception);
$this->controller->validate('user1', 'user test', 'test@example.com');
}
public function testValidateFailUsername() {
$exception = CoreBridge::createException('OCSException', '', 999);
$this->expectException(get_class($exception));
$this->registrationService
->expects($this->once())
->method('validateUsername')
->willThrowException($exception);
$this->controller->validate('user1', 'user test', 'test@example.com');
}
public function testStatusNoRegistration() {
$exception = CoreBridge::createException('OCSNotFoundException', '', 404);
$this->expectException(get_class($exception));
$this->registrationService
->method('getRegistrationForSecret')
->with('L2qdLAtrJTx499ErjwkwnZqGmLdm3Acp')
->willThrowException($exception);
$this->controller->status('L2qdLAtrJTx499ErjwkwnZqGmLdm3Acp');
}
public function testStatusPendingRegistration() {
$registration = new Registration();
$registration->setEmailConfirmed(false);
$this->registrationService
->method('getRegistrationForSecret')
->with('L2qdLAtrJTx499ErjwkwnZqGmLdm3Acp')
->willReturn($registration);
$actual = $this->controller->status('L2qdLAtrJTx499ErjwkwnZqGmLdm3Acp');
$expected = new DataResponse(
[
'registrationStatus' => 1,
'message' => $this->l10n->t('Your registration is pending. Please confirm your email address.'),
],
Http::STATUS_OK
);
$this->assertEquals($expected, $actual);
}
public function testStatusConfirmedRegistration() {
$registration = new Registration();
$registration->setEmailConfirmed(true);
$registration->setClientSecret('mysecret');
$user = $this->createMock(IUser::class);
$this->registrationService
->method('getRegistrationForSecret')
->with('mysecret')
->willReturn($registration);
$this->registrationService
->expects($this->once())
->method('getUserAccount')
->with($registration)
->willReturn($user);
$this->registrationService
->expects($this->once())
->method('loginUser');
$this->registrationService
->expects($this->once())
->method('generateAppPassword');
$actual = $this->controller->status('mysecret');
$expected = new DataResponse([
'appPassword' => null,
'cloudUrl' => $this->defaults->getBaseUrl(),
'registrationStatus' => 0,
]);
$this->assertEquals($expected, $actual);
}
}