0cf76ccb47
It contains mostly read only information about the current Shaarli instance, PHP version, extensions, file and folder permissions, etc. Also action buttons to clear the cache or sync thumbnails. Part of the content of this page is also displayed on the install page, to check server requirement before installing Shaarli config file. Fixes #40 Fixes #185
184 lines
6.8 KiB
PHP
184 lines
6.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Shaarli\Front\Controller\Admin;
|
|
|
|
use Shaarli\Config\ConfigManager;
|
|
use Shaarli\Security\SessionManager;
|
|
use Shaarli\TestCase;
|
|
use Slim\Http\Request;
|
|
use Slim\Http\Response;
|
|
|
|
/**
|
|
* Test Server administration controller.
|
|
*/
|
|
class ServerControllerTest extends TestCase
|
|
{
|
|
use FrontAdminControllerMockHelper;
|
|
|
|
/** @var ServerController */
|
|
protected $controller;
|
|
|
|
public function setUp(): void
|
|
{
|
|
$this->createContainer();
|
|
|
|
$this->controller = new ServerController($this->container);
|
|
|
|
// initialize dummy cache
|
|
@mkdir('sandbox/');
|
|
foreach (['pagecache', 'tmp', 'cache'] as $folder) {
|
|
@mkdir('sandbox/' . $folder);
|
|
@touch('sandbox/' . $folder . '/.htaccess');
|
|
@touch('sandbox/' . $folder . '/1');
|
|
@touch('sandbox/' . $folder . '/2');
|
|
}
|
|
}
|
|
|
|
public function tearDown(): void
|
|
{
|
|
foreach (['pagecache', 'tmp', 'cache'] as $folder) {
|
|
@unlink('sandbox/' . $folder . '/.htaccess');
|
|
@unlink('sandbox/' . $folder . '/1');
|
|
@unlink('sandbox/' . $folder . '/2');
|
|
@rmdir('sandbox/' . $folder);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test default display of server administration page.
|
|
*/
|
|
public function testIndex(): void
|
|
{
|
|
$request = $this->createMock(Request::class);
|
|
$response = new Response();
|
|
|
|
// Save RainTPL assigned variables
|
|
$assignedVariables = [];
|
|
$this->assignTemplateVars($assignedVariables);
|
|
|
|
$result = $this->controller->index($request, $response);
|
|
|
|
static::assertSame(200, $result->getStatusCode());
|
|
static::assertSame('server', (string) $result->getBody());
|
|
|
|
static::assertSame(PHP_VERSION, $assignedVariables['php_version']);
|
|
static::assertArrayHasKey('php_has_reached_eol', $assignedVariables);
|
|
static::assertArrayHasKey('php_eol', $assignedVariables);
|
|
static::assertArrayHasKey('php_extensions', $assignedVariables);
|
|
static::assertArrayHasKey('permissions', $assignedVariables);
|
|
static::assertEmpty($assignedVariables['permissions']);
|
|
|
|
static::assertRegExp(
|
|
'#https://github\.com/shaarli/Shaarli/releases/tag/v\d+\.\d+\.\d+#',
|
|
$assignedVariables['release_url']
|
|
);
|
|
static::assertRegExp('#v\d+\.\d+\.\d+#', $assignedVariables['latest_version']);
|
|
static::assertRegExp('#(v\d+\.\d+\.\d+|dev)#', $assignedVariables['current_version']);
|
|
static::assertArrayHasKey('index_url', $assignedVariables);
|
|
static::assertArrayHasKey('client_ip', $assignedVariables);
|
|
static::assertArrayHasKey('trusted_proxies', $assignedVariables);
|
|
|
|
static::assertSame('Server administration - Shaarli', $assignedVariables['pagetitle']);
|
|
}
|
|
|
|
/**
|
|
* Test clearing the main cache
|
|
*/
|
|
public function testClearMainCache(): void
|
|
{
|
|
$this->container->conf = $this->createMock(ConfigManager::class);
|
|
$this->container->conf->method('get')->willReturnCallback(function (string $key, $default) {
|
|
if ($key === 'resource.page_cache') {
|
|
return 'sandbox/pagecache';
|
|
} elseif ($key === 'resource.raintpl_tmp') {
|
|
return 'sandbox/tmp';
|
|
} elseif ($key === 'resource.thumbnails_cache') {
|
|
return 'sandbox/cache';
|
|
} else {
|
|
return $default;
|
|
}
|
|
});
|
|
|
|
$this->container->sessionManager
|
|
->expects(static::once())
|
|
->method('setSessionParameter')
|
|
->with(SessionManager::KEY_SUCCESS_MESSAGES, ['Shaarli\'s cache folder has been cleared!'])
|
|
;
|
|
|
|
$request = $this->createMock(Request::class);
|
|
$request->method('getQueryParam')->with('type')->willReturn('main');
|
|
$response = new Response();
|
|
|
|
$result = $this->controller->clearCache($request, $response);
|
|
|
|
static::assertSame(302, $result->getStatusCode());
|
|
static::assertSame('/subfolder/admin/server', (string) $result->getHeaderLine('Location'));
|
|
|
|
static::assertFileNotExists('sandbox/pagecache/1');
|
|
static::assertFileNotExists('sandbox/pagecache/2');
|
|
static::assertFileNotExists('sandbox/tmp/1');
|
|
static::assertFileNotExists('sandbox/tmp/2');
|
|
|
|
static::assertFileExists('sandbox/pagecache/.htaccess');
|
|
static::assertFileExists('sandbox/tmp/.htaccess');
|
|
static::assertFileExists('sandbox/cache');
|
|
static::assertFileExists('sandbox/cache/.htaccess');
|
|
static::assertFileExists('sandbox/cache/1');
|
|
static::assertFileExists('sandbox/cache/2');
|
|
}
|
|
|
|
/**
|
|
* Test clearing thumbnails cache
|
|
*/
|
|
public function testClearThumbnailsCache(): void
|
|
{
|
|
$this->container->conf = $this->createMock(ConfigManager::class);
|
|
$this->container->conf->method('get')->willReturnCallback(function (string $key, $default) {
|
|
if ($key === 'resource.page_cache') {
|
|
return 'sandbox/pagecache';
|
|
} elseif ($key === 'resource.raintpl_tmp') {
|
|
return 'sandbox/tmp';
|
|
} elseif ($key === 'resource.thumbnails_cache') {
|
|
return 'sandbox/cache';
|
|
} else {
|
|
return $default;
|
|
}
|
|
});
|
|
|
|
$this->container->sessionManager
|
|
->expects(static::once())
|
|
->method('setSessionParameter')
|
|
->willReturnCallback(function (string $key, array $value): SessionManager {
|
|
static::assertSame(SessionManager::KEY_WARNING_MESSAGES, $key);
|
|
static::assertCount(1, $value);
|
|
static::assertStringStartsWith('Thumbnails cache has been cleared.', $value[0]);
|
|
|
|
return $this->container->sessionManager;
|
|
});
|
|
;
|
|
|
|
$request = $this->createMock(Request::class);
|
|
$request->method('getQueryParam')->with('type')->willReturn('thumbnails');
|
|
$response = new Response();
|
|
|
|
$result = $this->controller->clearCache($request, $response);
|
|
|
|
static::assertSame(302, $result->getStatusCode());
|
|
static::assertSame('/subfolder/admin/server', (string) $result->getHeaderLine('Location'));
|
|
|
|
static::assertFileNotExists('sandbox/cache/1');
|
|
static::assertFileNotExists('sandbox/cache/2');
|
|
|
|
static::assertFileExists('sandbox/cache/.htaccess');
|
|
static::assertFileExists('sandbox/pagecache');
|
|
static::assertFileExists('sandbox/pagecache/.htaccess');
|
|
static::assertFileExists('sandbox/pagecache/1');
|
|
static::assertFileExists('sandbox/pagecache/2');
|
|
static::assertFileExists('sandbox/tmp');
|
|
static::assertFileExists('sandbox/tmp/.htaccess');
|
|
static::assertFileExists('sandbox/tmp/1');
|
|
static::assertFileExists('sandbox/tmp/2');
|
|
}
|
|
}
|