Refactor front controller tests to create container mock using a trait
This commit is contained in:
parent
5ec4708ced
commit
dd09ec52b2
12 changed files with 232 additions and 465 deletions
|
@ -21,3 +21,5 @@ require_once 'application/http/HttpUtils.php';
|
|||
require_once 'tests/utils/ReferenceLinkDB.php';
|
||||
require_once 'tests/utils/ReferenceHistory.php';
|
||||
require_once 'tests/utils/FakeBookmarkService.php';
|
||||
require_once 'tests/container/ShaarliTestContainer.php';
|
||||
require_once 'tests/front/controller/FrontControllerMockHelper.php';
|
||||
|
|
38
tests/container/ShaarliTestContainer.php
Normal file
38
tests/container/ShaarliTestContainer.php
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Shaarli\Container;
|
||||
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Config\ConfigManager;
|
||||
use Shaarli\Feed\FeedBuilder;
|
||||
use Shaarli\Formatter\FormatterFactory;
|
||||
use Shaarli\History;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Render\PageCacheManager;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Shaarli\Security\SessionManager;
|
||||
|
||||
/**
|
||||
* Test helper allowing auto-completion for MockObjects.
|
||||
*
|
||||
* @property mixed[] $environment $_SERVER automatically injected by Slim
|
||||
* @property MockObject|ConfigManager $conf
|
||||
* @property MockObject|SessionManager $sessionManager
|
||||
* @property MockObject|LoginManager $loginManager
|
||||
* @property MockObject|string $webPath
|
||||
* @property MockObject|History $history
|
||||
* @property MockObject|BookmarkServiceInterface $bookmarkService
|
||||
* @property MockObject|PageBuilder $pageBuilder
|
||||
* @property MockObject|PluginManager $pluginManager
|
||||
* @property MockObject|FormatterFactory $formatterFactory
|
||||
* @property MockObject|PageCacheManager $pageCacheManager
|
||||
* @property MockObject|FeedBuilder $feedBuilder
|
||||
*/
|
||||
class ShaarliTestContainer extends ShaarliContainer
|
||||
{
|
||||
|
||||
}
|
|
@ -6,31 +6,21 @@ namespace Shaarli\Front\Controller;
|
|||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Bookmark\Bookmark;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Config\ConfigManager;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Feed\CachedPage;
|
||||
use Shaarli\Formatter\BookmarkFormatter;
|
||||
use Shaarli\Formatter\BookmarkRawFormatter;
|
||||
use Shaarli\Formatter\FormatterFactory;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Render\PageCacheManager;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Slim\Http\Request;
|
||||
use Slim\Http\Response;
|
||||
|
||||
class DailyControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var DailyController */
|
||||
protected $controller;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->controller = new DailyController($this->container);
|
||||
DailyController::$DAILY_RSS_NB_DAYS = 2;
|
||||
}
|
||||
|
@ -105,7 +95,8 @@ class DailyControllerTest extends TestCase
|
|||
static::assertArrayHasKey('loggedin', $param);
|
||||
|
||||
return $data;
|
||||
});
|
||||
})
|
||||
;
|
||||
|
||||
$result = $this->controller->index($request, $response);
|
||||
|
||||
|
@ -497,71 +488,6 @@ class DailyControllerTest extends TestCase
|
|||
static::assertCount(0, $assignedVariables['days']);
|
||||
}
|
||||
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$this->container->loginManager = $loginManager;
|
||||
|
||||
// Config
|
||||
$conf = $this->createMock(ConfigManager::class);
|
||||
$this->container->conf = $conf;
|
||||
$this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) {
|
||||
return $default;
|
||||
});
|
||||
|
||||
// PageBuilder
|
||||
$pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
})
|
||||
;
|
||||
$this->container->pageBuilder = $pageBuilder;
|
||||
|
||||
// Plugin Manager
|
||||
$pluginManager = $this->createMock(PluginManager::class);
|
||||
$this->container->pluginManager = $pluginManager;
|
||||
|
||||
// BookmarkService
|
||||
$bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
$this->container->bookmarkService = $bookmarkService;
|
||||
|
||||
// Formatter
|
||||
$formatterFactory = $this->createMock(FormatterFactory::class);
|
||||
$formatterFactory
|
||||
->method('getFormatter')
|
||||
->willReturnCallback(function (): BookmarkFormatter {
|
||||
return new BookmarkRawFormatter($this->container->conf, true);
|
||||
})
|
||||
;
|
||||
$this->container->formatterFactory = $formatterFactory;
|
||||
|
||||
// CacheManager
|
||||
$pageCacheManager = $this->createMock(PageCacheManager::class);
|
||||
$this->container->pageCacheManager = $pageCacheManager;
|
||||
|
||||
// $_SERVER
|
||||
$this->container->environment = [
|
||||
'SERVER_NAME' => 'shaarli',
|
||||
'SERVER_PORT' => '80',
|
||||
'REQUEST_URI' => '/daily-rss',
|
||||
];
|
||||
}
|
||||
|
||||
protected function assignTemplateVars(array &$variables): void
|
||||
{
|
||||
$this->container->pageBuilder
|
||||
->expects(static::atLeastOnce())
|
||||
->method('assign')
|
||||
->willReturnCallback(function ($key, $value) use (&$variables) {
|
||||
$variables[$key] = $value;
|
||||
|
||||
return $this;
|
||||
})
|
||||
;
|
||||
}
|
||||
|
||||
protected static function generateContent(int $length): string
|
||||
{
|
||||
// bin2hex(random_bytes) generates string twice as long as given parameter
|
||||
|
|
|
@ -5,29 +5,23 @@ declare(strict_types=1);
|
|||
namespace Shaarli\Front\Controller;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Config\ConfigManager;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Feed\FeedBuilder;
|
||||
use Shaarli\Formatter\FormatterFactory;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Render\PageCacheManager;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Slim\Http\Request;
|
||||
use Slim\Http\Response;
|
||||
|
||||
class FeedControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var FeedController */
|
||||
protected $controller;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->container->feedBuilder = $this->createMock(FeedBuilder::class);
|
||||
|
||||
$this->controller = new FeedController($this->container);
|
||||
}
|
||||
|
||||
|
@ -154,66 +148,4 @@ class FeedControllerTest extends TestCase
|
|||
static::assertSame('feed.atom', (string) $result->getBody());
|
||||
static::assertSame('data', $assignedVariables['content']);
|
||||
}
|
||||
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$this->container->loginManager = $loginManager;
|
||||
|
||||
// Config
|
||||
$conf = $this->createMock(ConfigManager::class);
|
||||
$this->container->conf = $conf;
|
||||
$this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) {
|
||||
return $default;
|
||||
});
|
||||
|
||||
// PageBuilder
|
||||
$pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
})
|
||||
;
|
||||
$this->container->pageBuilder = $pageBuilder;
|
||||
|
||||
$bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
$this->container->bookmarkService = $bookmarkService;
|
||||
|
||||
// Plugin Manager
|
||||
$pluginManager = $this->createMock(PluginManager::class);
|
||||
$this->container->pluginManager = $pluginManager;
|
||||
|
||||
// Formatter
|
||||
$formatterFactory = $this->createMock(FormatterFactory::class);
|
||||
$this->container->formatterFactory = $formatterFactory;
|
||||
|
||||
// CacheManager
|
||||
$pageCacheManager = $this->createMock(PageCacheManager::class);
|
||||
$this->container->pageCacheManager = $pageCacheManager;
|
||||
|
||||
// FeedBuilder
|
||||
$feedBuilder = $this->createMock(FeedBuilder::class);
|
||||
$this->container->feedBuilder = $feedBuilder;
|
||||
|
||||
// $_SERVER
|
||||
$this->container->environment = [
|
||||
'SERVER_NAME' => 'shaarli',
|
||||
'SERVER_PORT' => '80',
|
||||
'REQUEST_URI' => '/daily-rss',
|
||||
];
|
||||
}
|
||||
|
||||
protected function assignTemplateVars(array &$variables): void
|
||||
{
|
||||
$this->container->pageBuilder
|
||||
->expects(static::atLeastOnce())
|
||||
->method('assign')
|
||||
->willReturnCallback(function ($key, $value) use (&$variables) {
|
||||
$variables[$key] = $value;
|
||||
|
||||
return $this;
|
||||
})
|
||||
;
|
||||
}
|
||||
}
|
||||
|
|
114
tests/front/controller/FrontControllerMockHelper.php
Normal file
114
tests/front/controller/FrontControllerMockHelper.php
Normal file
|
@ -0,0 +1,114 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Shaarli\Front\Controller;
|
||||
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Config\ConfigManager;
|
||||
use Shaarli\Container\ShaarliTestContainer;
|
||||
use Shaarli\Formatter\BookmarkFormatter;
|
||||
use Shaarli\Formatter\BookmarkRawFormatter;
|
||||
use Shaarli\Formatter\FormatterFactory;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Render\PageCacheManager;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Shaarli\Security\SessionManager;
|
||||
|
||||
/**
|
||||
* Trait FrontControllerMockHelper
|
||||
*
|
||||
* Helper trait used to initialize the ShaarliContainer and mock its services for controller tests.
|
||||
*
|
||||
* @property ShaarliTestContainer $container
|
||||
* @package Shaarli\Front\Controller
|
||||
*/
|
||||
trait FrontControllerMockHelper
|
||||
{
|
||||
/** @var ShaarliTestContainer */
|
||||
protected $container;
|
||||
|
||||
/**
|
||||
* Mock the container instance
|
||||
*/
|
||||
protected function createContainer(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliTestContainer::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize container's services used by tests
|
||||
*/
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
$this->container->loginManager = $this->createMock(LoginManager::class);
|
||||
|
||||
// Config
|
||||
$this->container->conf = $this->createMock(ConfigManager::class);
|
||||
$this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) {
|
||||
return $default;
|
||||
});
|
||||
|
||||
// PageBuilder
|
||||
$this->container->pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$this->container->pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
})
|
||||
;
|
||||
|
||||
// Plugin Manager
|
||||
$this->container->pluginManager = $this->createMock(PluginManager::class);
|
||||
|
||||
// BookmarkService
|
||||
$this->container->bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
|
||||
// Formatter
|
||||
$this->container->formatterFactory = $this->createMock(FormatterFactory::class);
|
||||
$this->container->formatterFactory
|
||||
->method('getFormatter')
|
||||
->willReturnCallback(function (): BookmarkFormatter {
|
||||
return new BookmarkRawFormatter($this->container->conf, true);
|
||||
})
|
||||
;
|
||||
|
||||
// CacheManager
|
||||
$this->container->pageCacheManager = $this->createMock(PageCacheManager::class);
|
||||
|
||||
// SessionManager
|
||||
$this->container->sessionManager = $this->createMock(SessionManager::class);
|
||||
|
||||
// $_SERVER
|
||||
$this->container->environment = [
|
||||
'SERVER_NAME' => 'shaarli',
|
||||
'SERVER_PORT' => '80',
|
||||
'REQUEST_URI' => '/daily-rss',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass a reference of an array which will be populated by `pageBuilder->assign` calls during execution.
|
||||
*
|
||||
* @param mixed $variables Array reference to populate.
|
||||
*/
|
||||
protected function assignTemplateVars(array &$variables): void
|
||||
{
|
||||
$this->container->pageBuilder
|
||||
->expects(static::atLeastOnce())
|
||||
->method('assign')
|
||||
->willReturnCallback(function ($key, $value) use (&$variables) {
|
||||
$variables[$key] = $value;
|
||||
|
||||
return $this;
|
||||
})
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Force to be used in PHPUnit context.
|
||||
*/
|
||||
protected abstract function createMock($originalClassName): MockObject;
|
||||
}
|
|
@ -5,27 +5,22 @@ declare(strict_types=1);
|
|||
namespace Shaarli\Front\Controller;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Config\ConfigManager;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Front\Exception\LoginBannedException;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Slim\Http\Request;
|
||||
use Slim\Http\Response;
|
||||
|
||||
class LoginControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var LoginController */
|
||||
protected $controller;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->controller = new LoginController($this->container);
|
||||
}
|
||||
|
||||
|
@ -47,6 +42,8 @@ class LoginControllerTest extends TestCase
|
|||
})
|
||||
;
|
||||
|
||||
$this->container->loginManager->method('canLogin')->willReturn(true);
|
||||
|
||||
$result = $this->controller->index($request, $response);
|
||||
|
||||
static::assertInstanceOf(Response::class, $result);
|
||||
|
@ -77,6 +74,8 @@ class LoginControllerTest extends TestCase
|
|||
})
|
||||
;
|
||||
|
||||
$this->container->loginManager->expects(static::once())->method('canLogin')->willReturn(true);
|
||||
|
||||
$result = $this->controller->index($request, $response);
|
||||
|
||||
static::assertInstanceOf(Response::class, $result);
|
||||
|
@ -91,12 +90,12 @@ class LoginControllerTest extends TestCase
|
|||
|
||||
public function testLoginControllerWhileLoggedIn(): void
|
||||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$request = $this->createMock(Request::class);
|
||||
$response = new Response();
|
||||
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$loginManager->expects(static::once())->method('isLoggedIn')->willReturn(true);
|
||||
$this->container->loginManager = $loginManager;
|
||||
$this->container->loginManager->expects(static::once())->method('isLoggedIn')->willReturn(true);
|
||||
|
||||
$result = $this->controller->index($request, $response);
|
||||
|
||||
|
@ -135,44 +134,11 @@ class LoginControllerTest extends TestCase
|
|||
$request = $this->createMock(Request::class);
|
||||
$response = new Response();
|
||||
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$loginManager->method('isLoggedIn')->willReturn(false);
|
||||
$loginManager->method('canLogin')->willReturn(false);
|
||||
$this->container->loginManager = $loginManager;
|
||||
$this->container->loginManager->method('isLoggedIn')->willReturn(false);
|
||||
$this->container->loginManager->method('canLogin')->willReturn(false);
|
||||
|
||||
$this->expectException(LoginBannedException::class);
|
||||
|
||||
$this->controller->index($request, $response);
|
||||
}
|
||||
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
// User logged out
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$loginManager->method('isLoggedIn')->willReturn(false);
|
||||
$loginManager->method('canLogin')->willReturn(true);
|
||||
$this->container->loginManager = $loginManager;
|
||||
|
||||
// Config
|
||||
$conf = $this->createMock(ConfigManager::class);
|
||||
$conf->method('get')->willReturnCallback(function (string $parameter, $default) {
|
||||
return $default;
|
||||
});
|
||||
$this->container->conf = $conf;
|
||||
|
||||
// PageBuilder
|
||||
$pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
})
|
||||
;
|
||||
$this->container->pageBuilder = $pageBuilder;
|
||||
|
||||
$pluginManager = $this->createMock(PluginManager::class);
|
||||
$this->container->pluginManager = $pluginManager;
|
||||
$bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
$this->container->bookmarkService = $bookmarkService;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,8 +12,6 @@ if (!function_exists('Shaarli\Front\Controller\setcookie')) {
|
|||
}
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Render\PageCacheManager;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Shaarli\Security\SessionManager;
|
||||
use Slim\Http\Request;
|
||||
|
@ -21,15 +19,15 @@ use Slim\Http\Response;
|
|||
|
||||
class LogoutControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var LogoutController */
|
||||
protected $controller;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->controller = new LogoutController($this->container);
|
||||
|
||||
setcookie(LoginManager::$STAY_SIGNED_IN_COOKIE, $cookie = 'hi there');
|
||||
|
@ -37,16 +35,15 @@ class LogoutControllerTest extends TestCase
|
|||
|
||||
public function testValidControllerInvoke(): void
|
||||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$request = $this->createMock(Request::class);
|
||||
$response = new Response();
|
||||
|
||||
$pageCacheManager = $this->createMock(PageCacheManager::class);
|
||||
$pageCacheManager->expects(static::once())->method('invalidateCaches');
|
||||
$this->container->pageCacheManager = $pageCacheManager;
|
||||
$this->container->pageCacheManager->expects(static::once())->method('invalidateCaches');
|
||||
|
||||
$sessionManager = $this->createMock(SessionManager::class);
|
||||
$sessionManager->expects(static::once())->method('logout');
|
||||
$this->container->sessionManager = $sessionManager;
|
||||
$this->container->sessionManager = $this->createMock(SessionManager::class);
|
||||
$this->container->sessionManager->expects(static::once())->method('logout');
|
||||
|
||||
static::assertSame('hi there', $_COOKIE[LoginManager::$STAY_SIGNED_IN_COOKIE]);
|
||||
|
||||
|
|
|
@ -5,26 +5,22 @@ declare(strict_types=1);
|
|||
namespace front\controller;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Front\Controller\FrontControllerMockHelper;
|
||||
use Shaarli\Front\Controller\OpenSearchController;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Slim\Http\Request;
|
||||
use Slim\Http\Response;
|
||||
|
||||
class OpenSearchControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var OpenSearchController */
|
||||
protected $controller;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->controller = new OpenSearchController($this->container);
|
||||
}
|
||||
|
||||
|
@ -42,51 +38,11 @@ class OpenSearchControllerTest extends TestCase
|
|||
$result = $this->controller->index($request, $response);
|
||||
|
||||
static::assertSame(200, $result->getStatusCode());
|
||||
static::assertStringContainsString('application/xml', $result->getHeader('Content-Type')[0]);
|
||||
static::assertStringContainsString(
|
||||
'application/opensearchdescription+xml',
|
||||
$result->getHeader('Content-Type')[0]
|
||||
);
|
||||
static::assertSame('opensearch', (string) $result->getBody());
|
||||
static::assertSame('http://shaarli', $assignedVariables['serverurl']);
|
||||
}
|
||||
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$this->container->loginManager = $loginManager;
|
||||
|
||||
// PageBuilder
|
||||
$pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
})
|
||||
;
|
||||
$this->container->pageBuilder = $pageBuilder;
|
||||
|
||||
$bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
$this->container->bookmarkService = $bookmarkService;
|
||||
|
||||
// Plugin Manager
|
||||
$pluginManager = $this->createMock(PluginManager::class);
|
||||
$this->container->pluginManager = $pluginManager;
|
||||
|
||||
// $_SERVER
|
||||
$this->container->environment = [
|
||||
'SERVER_NAME' => 'shaarli',
|
||||
'SERVER_PORT' => '80',
|
||||
'REQUEST_URI' => '/open-search',
|
||||
];
|
||||
}
|
||||
|
||||
protected function assignTemplateVars(array &$variables): void
|
||||
{
|
||||
$this->container->pageBuilder
|
||||
->expects(static::atLeastOnce())
|
||||
->method('assign')
|
||||
->willReturnCallback(function ($key, $value) use (&$variables) {
|
||||
$variables[$key] = $value;
|
||||
|
||||
return $this;
|
||||
})
|
||||
;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,31 +6,23 @@ namespace Shaarli\Front\Controller;
|
|||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Bookmark\Bookmark;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Config\ConfigManager;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Formatter\BookmarkFormatter;
|
||||
use Shaarli\Formatter\BookmarkRawFormatter;
|
||||
use Shaarli\Formatter\FormatterFactory;
|
||||
use Shaarli\Front\Exception\ThumbnailsDisabledException;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Shaarli\Thumbnailer;
|
||||
use Slim\Http\Request;
|
||||
use Slim\Http\Response;
|
||||
|
||||
class PictureWallControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var PictureWallController */
|
||||
protected $controller;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->controller = new PictureWallController($this->container);
|
||||
}
|
||||
|
||||
|
@ -43,6 +35,7 @@ class PictureWallControllerTest extends TestCase
|
|||
$response = new Response();
|
||||
|
||||
// ConfigManager: thumbnails are enabled
|
||||
$this->container->conf = $this->createMock(ConfigManager::class);
|
||||
$this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) {
|
||||
if ($parameter === 'thumbnails.mode') {
|
||||
return Thumbnailer::MODE_COMMON;
|
||||
|
@ -53,15 +46,7 @@ class PictureWallControllerTest extends TestCase
|
|||
|
||||
// Save RainTPL assigned variables
|
||||
$assignedVariables = [];
|
||||
$this->container->pageBuilder
|
||||
->expects(static::atLeastOnce())
|
||||
->method('assign')
|
||||
->willReturnCallback(function ($key, $value) use (&$assignedVariables) {
|
||||
$assignedVariables[$key] = $value;
|
||||
|
||||
return $this;
|
||||
})
|
||||
;
|
||||
$this->assignTemplateVars($assignedVariables);
|
||||
|
||||
// Links dataset: 2 links with thumbnails
|
||||
$this->container->bookmarkService
|
||||
|
@ -137,44 +122,4 @@ class PictureWallControllerTest extends TestCase
|
|||
|
||||
$this->controller->index($request, $response);
|
||||
}
|
||||
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$this->container->loginManager = $loginManager;
|
||||
|
||||
// Config
|
||||
$conf = $this->createMock(ConfigManager::class);
|
||||
$this->container->conf = $conf;
|
||||
|
||||
// PageBuilder
|
||||
$pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
})
|
||||
;
|
||||
$this->container->pageBuilder = $pageBuilder;
|
||||
|
||||
// Plugin Manager
|
||||
$pluginManager = $this->createMock(PluginManager::class);
|
||||
$this->container->pluginManager = $pluginManager;
|
||||
|
||||
// BookmarkService
|
||||
$bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
$this->container->bookmarkService = $bookmarkService;
|
||||
|
||||
// Formatter
|
||||
$formatterFactory = $this->createMock(FormatterFactory::class);
|
||||
$formatterFactory
|
||||
->method('getFormatter')
|
||||
->willReturnCallback(function (string $type): BookmarkFormatter {
|
||||
if ($type === 'raw') {
|
||||
return new BookmarkRawFormatter($this->container->conf, true);
|
||||
}
|
||||
})
|
||||
;
|
||||
$this->container->formatterFactory = $formatterFactory;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,11 +6,6 @@ namespace Shaarli\Front\Controller;
|
|||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Bookmark\BookmarkFilter;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Security\LoginManager;
|
||||
|
||||
/**
|
||||
* Class ShaarliControllerTest
|
||||
|
@ -20,8 +15,7 @@ use Shaarli\Security\LoginManager;
|
|||
*/
|
||||
class ShaarliControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var LoginController */
|
||||
protected $controller;
|
||||
|
@ -31,7 +25,8 @@ class ShaarliControllerTest extends TestCase
|
|||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->controller = new class($this->container) extends ShaarliController
|
||||
{
|
||||
public function assignView(string $key, $value): ShaarliController
|
||||
|
@ -51,6 +46,8 @@ class ShaarliControllerTest extends TestCase
|
|||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$this->assignTemplateVars($this->assignedValues);
|
||||
|
||||
$self = $this->controller->assignView('variableName', 'variableValue');
|
||||
|
||||
static::assertInstanceOf(ShaarliController::class, $self);
|
||||
|
@ -61,6 +58,24 @@ class ShaarliControllerTest extends TestCase
|
|||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$this->assignTemplateVars($this->assignedValues);
|
||||
|
||||
$this->container->bookmarkService
|
||||
->method('count')
|
||||
->willReturnCallback(function (string $visibility): int {
|
||||
return $visibility === BookmarkFilter::$PRIVATE ? 5 : 10;
|
||||
})
|
||||
;
|
||||
|
||||
$this->container->pluginManager
|
||||
->method('executeHooks')
|
||||
->willReturnCallback(function (string $hook, array &$data, array $params): array {
|
||||
return $data[$hook] = $params;
|
||||
});
|
||||
$this->container->pluginManager->method('getErrors')->willReturn(['error']);
|
||||
|
||||
$this->container->loginManager->method('isLoggedIn')->willReturn(true);
|
||||
|
||||
$render = $this->controller->render('templateName');
|
||||
|
||||
static::assertSame('templateName', $render);
|
||||
|
@ -76,41 +91,4 @@ class ShaarliControllerTest extends TestCase
|
|||
static::assertSame('templateName', $this->assignedValues['plugins_footer']['render_footer']['target']);
|
||||
static::assertTrue($this->assignedValues['plugins_footer']['render_footer']['loggedin']);
|
||||
}
|
||||
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
$pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$pageBuilder
|
||||
->method('assign')
|
||||
->willReturnCallback(function (string $key, $value): void {
|
||||
$this->assignedValues[$key] = $value;
|
||||
});
|
||||
$pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
});
|
||||
$this->container->pageBuilder = $pageBuilder;
|
||||
|
||||
$bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
$bookmarkService
|
||||
->method('count')
|
||||
->willReturnCallback(function (string $visibility): int {
|
||||
return $visibility === BookmarkFilter::$PRIVATE ? 5 : 10;
|
||||
});
|
||||
$this->container->bookmarkService = $bookmarkService;
|
||||
|
||||
$pluginManager = $this->createMock(PluginManager::class);
|
||||
$pluginManager
|
||||
->method('executeHooks')
|
||||
->willReturnCallback(function (string $hook, array &$data, array $params): array {
|
||||
return $data[$hook] = $params;
|
||||
});
|
||||
$pluginManager->method('getErrors')->willReturn(['error']);
|
||||
$this->container->pluginManager = $pluginManager;
|
||||
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$loginManager->method('isLoggedIn')->willReturn(true);
|
||||
$this->container->loginManager = $loginManager;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,27 +6,20 @@ namespace Shaarli\Front\Controller;
|
|||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Bookmark\BookmarkFilter;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Config\ConfigManager;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Shaarli\Security\SessionManager;
|
||||
use Slim\Http\Request;
|
||||
use Slim\Http\Response;
|
||||
|
||||
class TagCloudControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var TagCloudController */
|
||||
protected $controller;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->controller = new TagCloudController($this->container);
|
||||
}
|
||||
|
||||
|
@ -385,53 +378,4 @@ class TagCloudControllerTest extends TestCase
|
|||
static::assertSame('', $assignedVariables['search_tags']);
|
||||
static::assertCount(0, $assignedVariables['tags']);
|
||||
}
|
||||
|
||||
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$this->container->loginManager = $loginManager;
|
||||
|
||||
$sessionManager = $this->createMock(SessionManager::class);
|
||||
$this->container->sessionManager = $sessionManager;
|
||||
|
||||
// Config
|
||||
$conf = $this->createMock(ConfigManager::class);
|
||||
$this->container->conf = $conf;
|
||||
|
||||
$this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) {
|
||||
return $default;
|
||||
});
|
||||
|
||||
// PageBuilder
|
||||
$pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
})
|
||||
;
|
||||
$this->container->pageBuilder = $pageBuilder;
|
||||
|
||||
// Plugin Manager
|
||||
$pluginManager = $this->createMock(PluginManager::class);
|
||||
$this->container->pluginManager = $pluginManager;
|
||||
|
||||
// BookmarkService
|
||||
$bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
$this->container->bookmarkService = $bookmarkService;
|
||||
}
|
||||
|
||||
protected function assignTemplateVars(array &$variables): void
|
||||
{
|
||||
$this->container->pageBuilder
|
||||
->expects(static::atLeastOnce())
|
||||
->method('assign')
|
||||
->willReturnCallback(function ($key, $value) use (&$variables) {
|
||||
$variables[$key] = $value;
|
||||
|
||||
return $this;
|
||||
})
|
||||
;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,32 +5,27 @@ declare(strict_types=1);
|
|||
namespace Shaarli\Front\Controller;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shaarli\Bookmark\BookmarkServiceInterface;
|
||||
use Shaarli\Config\ConfigManager;
|
||||
use Shaarli\Container\ShaarliContainer;
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Render\PageBuilder;
|
||||
use Shaarli\Security\LoginManager;
|
||||
use Slim\Http\Request;
|
||||
use Slim\Http\Response;
|
||||
|
||||
class TagControllerTest extends TestCase
|
||||
{
|
||||
/** @var ShaarliContainer */
|
||||
protected $container;
|
||||
use FrontControllerMockHelper;
|
||||
|
||||
/** @var TagController */
|
||||
protected $controller;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->container = $this->createMock(ShaarliContainer::class);
|
||||
$this->createContainer();
|
||||
|
||||
$this->controller = new TagController($this->container);
|
||||
}
|
||||
|
||||
public function testAddTagWithReferer(): void
|
||||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$this->container->environment = ['HTTP_REFERER' => 'http://shaarli/controller/'];
|
||||
|
||||
$request = $this->createMock(Request::class);
|
||||
|
@ -48,6 +43,7 @@ class TagControllerTest extends TestCase
|
|||
public function testAddTagWithRefererAndExistingSearch(): void
|
||||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$this->container->environment = ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def'];
|
||||
|
||||
$request = $this->createMock(Request::class);
|
||||
|
@ -81,6 +77,7 @@ class TagControllerTest extends TestCase
|
|||
public function testAddTagRemoveLegacyQueryParam(): void
|
||||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$this->container->environment = ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def&addtag=abc'];
|
||||
|
||||
$request = $this->createMock(Request::class);
|
||||
|
@ -98,6 +95,7 @@ class TagControllerTest extends TestCase
|
|||
public function testAddTagResetPagination(): void
|
||||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$this->container->environment = ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def&page=12'];
|
||||
|
||||
$request = $this->createMock(Request::class);
|
||||
|
@ -115,6 +113,7 @@ class TagControllerTest extends TestCase
|
|||
public function testAddTagWithRefererAndEmptySearch(): void
|
||||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$this->container->environment = ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags='];
|
||||
|
||||
$request = $this->createMock(Request::class);
|
||||
|
@ -132,6 +131,7 @@ class TagControllerTest extends TestCase
|
|||
public function testAddTagWithoutNewTagWithReferer(): void
|
||||
{
|
||||
$this->createValidContainerMockSet();
|
||||
|
||||
$this->container->environment = ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def'];
|
||||
|
||||
$request = $this->createMock(Request::class);
|
||||
|
@ -157,35 +157,4 @@ class TagControllerTest extends TestCase
|
|||
static::assertSame(302, $result->getStatusCode());
|
||||
static::assertSame(['./'], $result->getHeader('location'));
|
||||
}
|
||||
|
||||
protected function createValidContainerMockSet(): void
|
||||
{
|
||||
// User logged out
|
||||
$loginManager = $this->createMock(LoginManager::class);
|
||||
$loginManager->method('isLoggedIn')->willReturn(false);
|
||||
$loginManager->method('canLogin')->willReturn(true);
|
||||
$this->container->loginManager = $loginManager;
|
||||
|
||||
// Config
|
||||
$conf = $this->createMock(ConfigManager::class);
|
||||
$conf->method('get')->willReturnCallback(function (string $parameter, $default) {
|
||||
return $default;
|
||||
});
|
||||
$this->container->conf = $conf;
|
||||
|
||||
// PageBuilder
|
||||
$pageBuilder = $this->createMock(PageBuilder::class);
|
||||
$pageBuilder
|
||||
->method('render')
|
||||
->willReturnCallback(function (string $template): string {
|
||||
return $template;
|
||||
})
|
||||
;
|
||||
$this->container->pageBuilder = $pageBuilder;
|
||||
|
||||
$pluginManager = $this->createMock(PluginManager::class);
|
||||
$this->container->pluginManager = $pluginManager;
|
||||
$bookmarkService = $this->createMock(BookmarkServiceInterface::class);
|
||||
$this->container->bookmarkService = $bookmarkService;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue