Files
piratepoet/mailpoet/tests/integration/Config/RendererTest.php
2022-06-08 15:25:41 +02:00

115 lines
3.5 KiB
PHP

<?php
namespace MailPoet\Test\Config;
use Codeception\Stub;
use Codeception\Stub\Expected;
use MailPoet\Config\Env;
use MailPoet\Config\Renderer;
use MailPoet\Config\RendererFactory;
use MailPoetVendor\Twig\Environment as TwigEnvironment;
use MailPoetVendor\Twig\Loader\FilesystemLoader as TwigFileSystem;
class RendererTest extends \MailPoetTest {
/** @var Renderer */
public $renderer;
public function _before() {
parent::_before();
$this->renderer = (new RendererFactory())->getRenderer();
}
public function testItUsesCorrectAssetsManifestFilenames() {
$renderer = Stub::make(new Renderer(
false,
Env::$cachePath,
new TwigFileSystem(Env::$viewsPath)
),
['getAssetManifest' => function($manifest) {
return $manifest;
}]
);
$renderer->__construct(
false,
Env::$cachePath,
new TwigFileSystem(Env::$viewsPath)
);
expect($renderer->assetsManifestJs)->equals(Env::$assetsPath . '/dist/js/manifest.json');
expect($renderer->assetsManifestCss)->equals(Env::$assetsPath . '/dist/css/manifest.json');
}
public function testItGetsAssetManifest() {
$assetsManifestJs = [
'script1.js' => 'script1.hash.js',
'script2.js' => 'script2.hash.js',
];
$assetsManifestCss = [
'style1.css' => 'style1.hash.css',
'style2.css' => 'style2.hash.css',
];
file_put_contents(Env::$tempPath . '/js.json', json_encode($assetsManifestJs));
file_put_contents(Env::$tempPath . '/css.json', json_encode($assetsManifestCss));
expect($this->renderer->getAssetManifest(Env::$tempPath . '/js.json'))->equals($assetsManifestJs);
expect($this->renderer->getAssetManifest(Env::$tempPath . '/css.json'))->equals($assetsManifestCss);
}
public function testItReturnsFalseAssetManifestDoesNotExist() {
expect($this->renderer->getAssetManifest(Env::$tempPath . '/js.json'))->false();
}
public function testItCanGetCssAsset() {
$assetsManifestCss = [
'style1.css' => 'style1.hash.css',
'style2.css' => 'style2.hash.css',
];
$renderer = $this->renderer;
$renderer->assetsManifestCss = $assetsManifestCss;
expect($renderer->getCssAsset('style1.css'))->equals('style1.hash.css');
expect($renderer->getCssAsset('style2.css'))->equals('style2.hash.css');
}
public function testItCanGetJsAsset() {
$assetsManifestJs = [
'script1.js' => 'script1.hash.js',
'script2.js' => 'script2.hash.js',
];
$renderer = $this->renderer;
$renderer->assetsManifestJs = $assetsManifestJs;
expect($renderer->getJsAsset('script1.js'))->equals('script1.hash.js');
expect($renderer->getJsAsset('script2.js'))->equals('script2.hash.js');
}
public function testItDelegatesRenderingToTwig() {
$renderer = Stub::construct(
$this->renderer,
[
false,
Env::$cachePath,
new TwigFileSystem(Env::$viewsPath)
],
[
'renderer' => Stub::makeEmpty(TwigEnvironment::class,
[
'render' => Expected::atLeastOnce(function() {
return 'test render';
}),
],
$this
),
]
);
expect($renderer->render('non-existing-template.html', ['somekey' => 'someval']))->equals('test render');
}
public function _after() {
$this->_removeAssetsManifests();
}
public function _removeAssetsManifests() {
if (is_readable(Env::$tempPath . '/js.json')) unlink(Env::$tempPath . '/js.json');
if (is_readable(Env::$tempPath . '/css.json')) unlink(Env::$tempPath . '/css.json');
}
}