2020-05-27 14:13:49 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
namespace Shaarli\Front\Controller\Admin;
|
|
|
|
|
|
|
|
use Shaarli\Front\Exception\WrongTokenException;
|
|
|
|
use Shaarli\Security\SessionManager;
|
2020-09-29 14:41:40 +02:00
|
|
|
use Shaarli\TestCase;
|
2020-05-27 14:13:49 +02:00
|
|
|
use Slim\Http\Request;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class ShaarliControllerTest
|
|
|
|
*
|
|
|
|
* This class is used to test default behavior of ShaarliAdminController abstract class.
|
|
|
|
* It uses a dummy non abstract controller.
|
|
|
|
*/
|
|
|
|
class ShaarliAdminControllerTest extends TestCase
|
|
|
|
{
|
|
|
|
use FrontAdminControllerMockHelper;
|
|
|
|
|
|
|
|
/** @var ShaarliAdminController */
|
|
|
|
protected $controller;
|
|
|
|
|
|
|
|
public function setUp(): void
|
|
|
|
{
|
|
|
|
$this->createContainer();
|
|
|
|
|
2021-04-05 09:39:34 +02:00
|
|
|
$this->controller = new class ($this->container) extends ShaarliAdminController
|
2020-05-27 14:13:49 +02:00
|
|
|
{
|
|
|
|
public function checkToken(Request $request): bool
|
|
|
|
{
|
|
|
|
return parent::checkToken($request);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function saveSuccessMessage(string $message): void
|
|
|
|
{
|
|
|
|
parent::saveSuccessMessage($message);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function saveWarningMessage(string $message): void
|
|
|
|
{
|
|
|
|
parent::saveWarningMessage($message);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function saveErrorMessage(string $message): void
|
|
|
|
{
|
|
|
|
parent::saveErrorMessage($message);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Trigger controller's checkToken with a valid token.
|
|
|
|
*/
|
|
|
|
public function testCheckTokenWithValidToken(): void
|
|
|
|
{
|
|
|
|
$request = $this->createMock(Request::class);
|
|
|
|
$request->method('getParam')->with('token')->willReturn($token = '12345');
|
|
|
|
|
|
|
|
$this->container->sessionManager = $this->createMock(SessionManager::class);
|
|
|
|
$this->container->sessionManager->method('checkToken')->with($token)->willReturn(true);
|
|
|
|
|
|
|
|
static::assertTrue($this->controller->checkToken($request));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Trigger controller's checkToken with na valid token should raise an exception.
|
|
|
|
*/
|
|
|
|
public function testCheckTokenWithNotValidToken(): void
|
|
|
|
{
|
|
|
|
$request = $this->createMock(Request::class);
|
|
|
|
$request->method('getParam')->with('token')->willReturn($token = '12345');
|
|
|
|
|
|
|
|
$this->container->sessionManager = $this->createMock(SessionManager::class);
|
|
|
|
$this->container->sessionManager->method('checkToken')->with($token)->willReturn(false);
|
|
|
|
|
|
|
|
$this->expectException(WrongTokenException::class);
|
|
|
|
|
|
|
|
$this->controller->checkToken($request);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test saveSuccessMessage() with a first message.
|
|
|
|
*/
|
|
|
|
public function testSaveSuccessMessage(): void
|
|
|
|
{
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('setSessionParameter')
|
|
|
|
->with(SessionManager::KEY_SUCCESS_MESSAGES, [$message = 'bravo!'])
|
|
|
|
;
|
|
|
|
|
|
|
|
$this->controller->saveSuccessMessage($message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test saveSuccessMessage() with existing messages.
|
|
|
|
*/
|
|
|
|
public function testSaveSuccessMessageWithExistingMessages(): void
|
|
|
|
{
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('getSessionParameter')
|
|
|
|
->with(SessionManager::KEY_SUCCESS_MESSAGES)
|
|
|
|
->willReturn(['success1', 'success2'])
|
|
|
|
;
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('setSessionParameter')
|
|
|
|
->with(SessionManager::KEY_SUCCESS_MESSAGES, ['success1', 'success2', $message = 'bravo!'])
|
|
|
|
;
|
|
|
|
|
|
|
|
$this->controller->saveSuccessMessage($message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test saveWarningMessage() with a first message.
|
|
|
|
*/
|
|
|
|
public function testSaveWarningMessage(): void
|
|
|
|
{
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('setSessionParameter')
|
|
|
|
->with(SessionManager::KEY_WARNING_MESSAGES, [$message = 'warning!'])
|
|
|
|
;
|
|
|
|
|
|
|
|
$this->controller->saveWarningMessage($message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test saveWarningMessage() with existing messages.
|
|
|
|
*/
|
|
|
|
public function testSaveWarningMessageWithExistingMessages(): void
|
|
|
|
{
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('getSessionParameter')
|
|
|
|
->with(SessionManager::KEY_WARNING_MESSAGES)
|
|
|
|
->willReturn(['warning1', 'warning2'])
|
|
|
|
;
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('setSessionParameter')
|
|
|
|
->with(SessionManager::KEY_WARNING_MESSAGES, ['warning1', 'warning2', $message = 'warning!'])
|
|
|
|
;
|
|
|
|
|
|
|
|
$this->controller->saveWarningMessage($message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test saveErrorMessage() with a first message.
|
|
|
|
*/
|
|
|
|
public function testSaveErrorMessage(): void
|
|
|
|
{
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('setSessionParameter')
|
|
|
|
->with(SessionManager::KEY_ERROR_MESSAGES, [$message = 'error!'])
|
|
|
|
;
|
|
|
|
|
|
|
|
$this->controller->saveErrorMessage($message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test saveErrorMessage() with existing messages.
|
|
|
|
*/
|
|
|
|
public function testSaveErrorMessageWithExistingMessages(): void
|
|
|
|
{
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('getSessionParameter')
|
|
|
|
->with(SessionManager::KEY_ERROR_MESSAGES)
|
|
|
|
->willReturn(['error1', 'error2'])
|
|
|
|
;
|
|
|
|
$this->container->sessionManager
|
|
|
|
->expects(static::once())
|
|
|
|
->method('setSessionParameter')
|
|
|
|
->with(SessionManager::KEY_ERROR_MESSAGES, ['error1', 'error2', $message = 'error!'])
|
|
|
|
;
|
|
|
|
|
|
|
|
$this->controller->saveErrorMessage($message);
|
|
|
|
}
|
|
|
|
}
|