View source
<?php
namespace Drupal\Tests\entity_print\Kernel;
use Drupal\KernelTests\KernelTestBase;
use Drupal\node\Entity\NodeType;
use Drupal\Tests\node\Traits\NodeCreationTrait;
class PrintBuilderTest extends KernelTestBase {
use NodeCreationTrait;
public static $modules = [
'system',
'user',
'node',
'filter',
'entity_print',
'entity_print_test',
];
public function setUp() : void {
parent::setUp();
$this
->installEntitySchema('node');
$this
->installEntitySchema('user');
$this
->installConfig([
'system',
'filter',
]);
$this->container
->get('theme_installer')
->install([
'stark',
]);
$node_type = NodeType::create([
'name' => 'Page',
'type' => 'page',
]);
$node_type
->setDisplaySubmitted(FALSE);
$node_type
->save();
}
public function testOutputtedFilename($print_engine_id, $file_name) {
$print_engine = $this->container
->get('plugin.manager.entity_print.print_engine')
->createInstance($print_engine_id);
$node = $this
->createNode([
'title' => 'myfile',
]);
ob_start();
$this->container
->get('entity_print.print_builder')
->deliverPrintable([
$node,
], $print_engine, TRUE);
$contents = ob_get_contents();
ob_end_clean();
$this
->assertTrue(strpos($contents, $file_name) !== FALSE, "The {$file_name} file was found in {$contents}");
}
public function outputtedFileDataProvider() {
return [
'PDF file' => [
'testprintengine',
'myfile.pdf',
],
'Word doc file' => [
'test_word_print_engine',
'myfile.docx',
],
];
}
public function testNoEntities() {
$print_engine = $this->container
->get('plugin.manager.entity_print.print_engine')
->createInstance('testprintengine');
$this
->expectException(\InvalidArgumentException::class);
$this
->expectExceptionMessage('You must pass at least 1 entity');
$this->container
->get('entity_print.print_builder')
->deliverPrintable([], $print_engine, TRUE);
}
public function testEntityPrintThemeCss() {
$theme = 'entity_print_test_theme';
$this->container
->get('theme_installer')
->install([
$theme,
]);
$this
->config('system.theme')
->set('default', $theme)
->save();
$node = $this
->createNode();
$html = $this->container
->get('entity_print.print_builder')
->printHtml($node, TRUE, FALSE);
$this
->assertStringContainsString('entity-print.css', $html);
$html = $this->container
->get('entity_print.print_builder')
->printHtml($node, FALSE, FALSE);
$this
->assertStringNotContainsString('entity-print.css', $html);
$this
->assertStringContainsString('entityprint-all.css', $html);
$this
->assertStringContainsString('entityprint-page.css', $html);
$this
->assertStringContainsString('entityprint-node.css', $html);
$this
->assertStringContainsString('entityprint-module.css', $html);
}
public function testFileSaved() {
$builder = $this->container
->get('entity_print.print_builder');
$print_engine = $this->container
->get('plugin.manager.entity_print.print_engine')
->createInstance('testprintengine');
$node = $this
->createNode([]);
$uri = $builder
->savePrintable([
$node,
], $print_engine);
$this
->assertRegExp('#public://(.*)\\.pdf#', $uri);
$filename = $this
->randomMachineName() . 'pdf';
$uri = $builder
->savePrintable([
$node,
], $print_engine, 'public', $filename);
$this
->assertEquals("public://{$filename}", $uri);
$this
->assertEquals('Using testprintengine', file_get_contents($uri));
}
}