NelmioApiDocBundle/Tests/Render/Html/GetNelmioAssetTest.php
2021-12-21 13:41:49 +01:00

115 lines
3.5 KiB
PHP

<?php
/*
* This file is part of the NelmioApiDocBundle package.
*
* (c) Nelmio
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Nelmio\ApiDocBundle\Tests\Render\Html;
use Nelmio\ApiDocBundle\Render\Html\AssetsMode;
use Nelmio\ApiDocBundle\Render\Html\GetNelmioAsset;
use Nelmio\ApiDocBundle\Tests\Functional\WebTestCase;
use Twig\TwigFunction;
class GetNelmioAssetTest extends WebTestCase
{
/** @dataProvider provideAsset */
public function test($mode, $asset, $expectedContent)
{
static::bootKernel();
/** @var GetNelmioAsset $getNelmioAsset */
$getNelmioAsset = static::getContainer()->get('nelmio_api_doc.render_docs.html.asset');
/** @var TwigFunction */
$twigFunction = $getNelmioAsset->getFunctions()[0];
self::assertSame($expectedContent, $twigFunction->getCallable()->__invoke($mode, $asset));
}
public function provideAsset()
{
$cdnDir = 'https://cdn.jsdelivr.net/gh/nelmio/NelmioApiDocBundle/Resources/public';
$resourceDir = __DIR__.'/../../../Resources/public';
return $this->provideCss($cdnDir, $resourceDir)
+ $this->provideJs($cdnDir, $resourceDir)
+ $this->provideImage($cdnDir);
}
private function provideCss($cdnDir, $resourceDir)
{
return [
'bundled css' => [
AssetsMode::BUNDLE,
'style.css',
'<link rel="stylesheet" href="/bundles/nelmioapidoc/style.css">',
],
'cdn css' => [
AssetsMode::CDN,
'style.css',
'<link rel="stylesheet" href="'.$cdnDir.'/style.css">',
],
'offline css' => [
AssetsMode::OFFLINE,
'style.css',
'<style>'.file_get_contents($resourceDir.'/style.css').'</style>',
],
'external css' => [
AssetsMode::BUNDLE,
'https://cdn.com/my.css',
'<link rel="stylesheet" href="https://cdn.com/my.css">',
],
];
}
private function provideJs($cdnDir, $resourceDir)
{
return [
'bundled js' => [
AssetsMode::BUNDLE,
'init-swagger-ui.js',
'<script src="/bundles/nelmioapidoc/init-swagger-ui.js"></script>',
],
'cdn js' => [
AssetsMode::CDN,
'init-swagger-ui.js',
'<script src="'.$cdnDir.'/init-swagger-ui.js"></script>',
],
'offline js' => [
AssetsMode::OFFLINE,
'init-swagger-ui.js',
'<script>'.file_get_contents($resourceDir.'/init-swagger-ui.js').'</script>',
],
'external js' => [
AssetsMode::BUNDLE,
'https://cdn.com/my.js',
'<script src="https://cdn.com/my.js"></script>',
],
];
}
private function provideImage($cdnDir)
{
return [
'bundled image' => [
AssetsMode::BUNDLE,
'logo.png',
'/bundles/nelmioapidoc/logo.png',
],
'cdn image' => [
AssetsMode::CDN,
'logo.png',
$cdnDir.'/logo.png',
],
'offline image fallbacks to cdn' => [
AssetsMode::OFFLINE,
'logo.png',
$cdnDir.'/logo.png',
],
];
}
}