185 lines
6.8 KiB
PHP
185 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');
|
||
|
}
|
||
|
}
|