View source
<?php
namespace Drupal\Tests\fillpdf\Functional;
use Drupal\Core\Url;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\fillpdf\Traits\TestFillPdfTrait;
class FillPdfSettingsFormTest extends BrowserTestBase {
public static $modules = [
'fillpdf_test',
'file_test',
];
use TestFillPdfTrait;
protected $strictConfigSchema = FALSE;
protected $defaultTheme = 'stark';
protected function setUp() : void {
parent::setUp();
$this
->initializeUser();
}
public function testSettingsFormDefaults() {
$this
->drupalGet(Url::fromRoute('fillpdf.settings'));
$this
->assertSession()
->pageTextContains('Public files (site default)');
$this
->assertSession()
->checkboxChecked('edit-template-scheme-public');
$this
->assertSession()
->checkboxChecked('edit-backend-fillpdf-service');
$config = $this->container
->get('config.factory')
->getEditable('system.file')
->set('default_scheme', 'private');
$config
->save();
$this
->drupalGet(Url::fromRoute('fillpdf.settings'));
$this
->assertSession()
->pageTextContains('Private files (site default)');
$this
->assertSession()
->checkboxChecked('edit-template-scheme-private');
$this
->assertSession()
->checkboxChecked('edit-backend-fillpdf-service');
}
public function testTemplateSchemeDummyRemote() {
$this
->drupalGet(Url::fromRoute('fillpdf.settings'));
$this
->assertSession()
->elementExists('css', '#edit-template-scheme-dummy-remote');
$this
->configureFillPdf([
'template_scheme' => 'dummy_remote',
]);
$this
->assertTrue(\Drupal::service('module_installer')
->uninstall([
'file_test',
]), "Module 'file_test' has been uninstalled.");
$this
->assertFalse(\Drupal::moduleHandler()
->moduleExists('file_test'), "Module 'file_test' is no longer present.");
$this
->drupalGet(Url::fromRoute('fillpdf.settings'));
$this
->assertSession()
->elementNotExists('css', '#edit-template-scheme-dummy-remote');
$this
->assertSession()
->pageTextContains('Your previously used file storage dummy_remote:// is no longer available');
}
public function testTemplateSchemePrivate() {
$this
->configureFillPdf();
$this
->drupalPostForm(Url::fromRoute('fillpdf.settings'), [
'template_scheme' => 'private',
], 'Save configuration');
$this
->assertSession()
->pageTextContains('The configuration options have been saved.');
$this
->assertSession()
->fieldValueEquals('template_scheme', 'private');
$this
->assertEqual($this
->config('fillpdf.settings')
->get('template_scheme'), 'private');
$this
->writeSettings([
'settings' => [
'file_private_path' => (object) [
'value' => '',
'required' => TRUE,
],
],
]);
$this
->rebuildContainer();
$this
->drupalGet(Url::fromRoute('fillpdf.settings'));
$this
->assertSession()
->elementNotExists('css', '#edit-template-scheme-private');
$this
->assertSession()
->pageTextContains('Your previously used file storage private:// is no longer available');
$this
->assertSession()
->fieldValueEquals('template_scheme', $this
->config('system.file')
->get('default_scheme'));
$this
->assertEqual($this
->config('fillpdf.settings')
->get('template_scheme'), 'private');
}
public function testTemplateSchemePublic() {
$this
->configureFillPdf();
$this
->drupalGet(Url::fromRoute('fillpdf.settings'));
$this
->assertSession()
->fieldValueEquals('template_scheme', 'public');
$this
->assertEqual($this
->config('fillpdf.settings')
->get('template_scheme'), 'public');
$directory = 'public://fillpdf';
$this
->assertFalse(is_dir($directory), 'Directory does not exist prior to testing.');
$this
->drupalPostForm(NULL, [], 'Save configuration');
$this
->assertSession()
->pageTextContains('The configuration options have been saved.');
$this
->assertTrue(is_dir($directory), 'Directory exists now.');
$this
->assertTrue(\Drupal::service('file_system')
->prepareDirectory($directory), 'Directory is writeable.');
$file_system = $this->container
->get('file_system');
$file_system
->rmdir($directory);
\Drupal::service('file_system')
->copy('public://.htaccess', $directory);
$this
->drupalPostForm(NULL, [], 'Save configuration');
$this
->assertSession()
->pageTextNotContains('The configuration options have been saved.');
$this
->assertSession()
->pageTextContains('Could not automatically create the subdirectory');
}
public function testBackendFillPdfService() {
$this
->drupalPostForm(Url::fromRoute('fillpdf.settings'), NULL, 'Save configuration');
$this
->assertSession()
->pageTextContains('The configuration options have been saved.');
$this
->assertSession()
->fieldValueEquals('backend', 'fillpdf_service');
$this
->assertEqual($this
->config('fillpdf.settings')
->get('backend'), 'fillpdf_service');
$this
->drupalPostForm(NULL, [
'fillpdf_service_api_key' => 'Invalid, just playing around.',
], 'Save configuration');
$this
->assertSession()
->pageTextContains('The configuration options have been saved.');
$this
->assertSession()
->fieldValueEquals('fillpdf_service_api_key', 'Invalid, just playing around.');
$this
->assertEqual($this
->config('fillpdf.settings')
->get('fillpdf_service_api_key'), 'Invalid, just playing around.');
}
public function testBackendPdftk() {
$edit = [
'template_scheme' => 'private',
'backend' => 'pdftk',
'pdftk_path' => 'xyz',
];
$this
->drupalPostForm(Url::fromRoute('fillpdf.settings'), $edit, 'Save configuration');
$this
->assertSession()
->pageTextNotContains('The configuration options have been saved.');
$this
->assertSession()
->pageTextContains('The path you have entered for pdftk is invalid. Please enter a valid path.');
foreach ($edit as $field => $value) {
$this
->assertSession()
->fieldValueEquals($field, $value);
$this
->assertEqual($this
->config('fillpdf.settings')
->get($field), NULL);
}
}
public function testBackendTest() {
$this
->drupalGet(Url::fromRoute('fillpdf.settings'));
$this
->assertSession()
->pageTextContainsOnce('plugin for testing');
$this
->assertSession()
->pageTextContains('Form-altered pass-through plugin for testing');
$edit = [
'template_scheme' => 'private',
'backend' => 'test',
'example_setting' => 'x',
'fillpdf_service_api_key' => 'Invalid, just playing around.',
];
$this
->drupalPostForm(NULL, $edit, 'Save configuration');
$this
->assertSession()
->pageTextNotContains('An illegal choice has been detected.');
$this
->assertSession()
->pageTextNotContains('The configuration options have been saved.');
$this
->assertSession()
->pageTextContains('Not a valid value.');
foreach ($edit as $field => $value) {
$this
->assertSession()
->fieldValueEquals($field, $value);
$this
->assertEqual($this
->config('fillpdf.settings')
->get($field), NULL);
}
$edit['example_setting'] = 'xyz';
$this
->drupalPostForm(NULL, $edit, 'Save configuration');
$this
->assertSession()
->pageTextNotContains('Not a valid value.');
$this
->assertSession()
->pageTextContains('The configuration options have been saved.');
$expected = [
'fillpdf_service_api_key' => NULL,
] + $edit;
foreach ($expected as $field => $value) {
$this
->assertSession()
->fieldValueEquals($field, $value);
$this
->assertEqual($this
->config('fillpdf.settings')
->get($field), $value);
}
}
}