You are here

public function WebformEntityPrintFunctionalTest::testEntityPrint in Webform 8.5

Same name and namespace in other branches
  1. 6.x modules/webform_entity_print/tests/src/Functional/WebformEntityPrintFunctionalTest.php \Drupal\Tests\webform_entity_print\Functional\WebformEntityPrintFunctionalTest::testEntityPrint()

Test entity print.

File

modules/webform_entity_print/tests/src/Functional/WebformEntityPrintFunctionalTest.php, line 26

Class

WebformEntityPrintFunctionalTest
Webform entity print test.

Namespace

Drupal\Tests\webform_entity_print\Functional

Code

public function testEntityPrint() {
  global $base_path;
  $this
    ->drupalLogin($this->rootUser);

  /**************************************************************************/

  // PDF link default.

  /**************************************************************************/
  $webform = Webform::load('test_entity_print');
  $sid = $this
    ->postSubmissionTest($webform);
  $submission = WebformSubmission::load($sid);

  // Check PDF link to html mode enabled.
  $this
    ->drupalGet("/admin/structure/webform/manage/test_entity_print/submission/{$sid}");
  $this
    ->assertRaw('<div class="webform-entity-print-links"><a href="' . $base_path . 'print/pdf/webform_submission/' . $sid . '?view_mode=html" class="button webform-entity-print-link webform-entity-print-link-pdf">Download PDF</a></div>');

  // Check PDF link to table mode enabled.
  $this
    ->drupalGet("/admin/structure/webform/manage/test_entity_print/submission/{$sid}/table");
  $this
    ->assertRaw('<div class="webform-entity-print-links"><a href="' . $base_path . 'print/pdf/webform_submission/' . $sid . '?view_mode=table" class="button webform-entity-print-link webform-entity-print-link-pdf">Download PDF</a></div>');

  // Check PDF document HTML view mode.
  $this
    ->drupalGet("/print/pdf/webform_submission/{$sid}/debug", [
    'query' => [
      'view_mode' => 'html',
    ],
  ]);
  $this
    ->assertRaw('<div class="webform-entity-print-header"><h1>' . Html::escape($submission
    ->label()) . '</h1></div>');
  $this
    ->assertRaw('<label>textfield</label>');

  // Check PDF document includes custom style tag with webform and
  // webform entity print global css.
  $this
    ->assertRaw('<style type="text/css" media="all">
/** custom webform css **/
/* Remove page margins and padding and rely on the PDF generator\'s default margins. */
body {
  margin: 0;
}

.page {
  padding: 0;
}
</style>');

  // Check PDF document Table view mode.
  $this
    ->drupalGet("/print/pdf/webform_submission/{$sid}/debug", [
    'query' => [
      'view_mode' => 'table',
    ],
  ]);
  $this
    ->assertRaw('<div class="webform-entity-print-header"><h1>' . Html::escape($submission
    ->label()) . '</h1></div>');
  $this
    ->assertNoRaw('<label>textfield</label>');
  $this
    ->assertRaw('<th>textfield</th>');
  $this
    ->assertRaw('<table class="webform-submission-table" data-striping="1">');
  $this
    ->drupalLogout();

  // Check PDF link token support.
  // Allow anonymous users to access print version.
  $role_object = Role::load(AccountInterface::ANONYMOUS_ROLE);
  $role_object
    ->grantPermission('entity print access type webform_submission');
  $role_object
    ->save();
  $token = $submission
    ->getToken();
  $this
    ->drupalGet("/webform/test_entity_print/submissions/{$sid}", [
    'query' => [
      'token' => $token,
    ],
  ]);
  $this
    ->assertLinkByHref("{$base_path}print/pdf/webform_submission/{$sid}?view_mode=html&token={$token}");
  $this
    ->drupalLogin($this->rootUser);

  // Check PDF link customizable.
  $edit = [
    'third_party_settings[webform_entity_print][export_types][pdf][link_text]' => 'Generate PDF',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/config', $edit, 'Save configuration');
  $this
    ->drupalGet("/admin/structure/webform/manage/test_entity_print/submission/{$sid}");
  $this
    ->assertNoLink('Download PDF');
  $this
    ->assertLink('Generate PDF');

  // Check PDF link disabled.
  $edit = [
    'third_party_settings[webform_entity_print][export_types][pdf][enabled]' => FALSE,
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/config', $edit, 'Save configuration');
  $this
    ->drupalGet("/admin/structure/webform/manage/test_entity_print/submission/{$sid}");
  $this
    ->assertNoLink('Download PDF');

  /**************************************************************************/

  // Exporter.

  /**************************************************************************/

  /** @var \Drupal\webform\WebformSubmissionExporterInterface $submission_exporter */
  $submission_exporter = \Drupal::service('webform_submission.exporter');
  $submission_exporter
    ->setWebform($webform);
  $submission_exporter
    ->setExporter();

  // Download tar ball archive with PDF documents.
  $edit = [
    'exporter' => 'webform_entity_print:pdf',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/test_entity_print/results/download', $edit, 'Download');

  // Load the tar and get a list of files.
  $files = $this
    ->getArchiveContents($submission_exporter
    ->getArchiveFilePath());
  $this
    ->assertEquals([
    "submission-{$sid}.pdf" => "submission-{$sid}.pdf",
  ], $files);

  /**************************************************************************/

  // PDF link custom.

  /**************************************************************************/
  $webform = Webform::load('test_entity_print_custom');
  $sid = $this
    ->postSubmissionTest($webform);

  // Check custom PDF link to html mode enabled.
  $this
    ->drupalGet("/admin/structure/webform/manage/test_entity_print_custom/submission/{$sid}");
  $this
    ->assertRaw('<div class="webform-entity-print-links"><a href="' . $base_path . 'print/pdf/webform_submission/' . $sid . '?view_mode=html" style="color: red" class="custom-class webform-entity-print-link webform-entity-print-link-pdf">{custom link text}</a></div>');

  // Check custom PDF document HTML view mode.
  $this
    ->drupalGet("/print/pdf/webform_submission/{$sid}/debug", [
    'query' => [
      'view_mode' => 'html',
    ],
  ]);
  $this
    ->assertRaw('<div class="webform-entity-print-header"><div>{custom header}</div></div>');
  $this
    ->assertRaw('<div class="webform-entity-print-footer"><div>{custom footer}</div></div>');

  // Check PDF document includes custom style tag with webform and
  // webform entity print global css.
  $this
    ->assertRaw('<style type="text/css" media="all">
/** custom webform css **/
/* Remove page margins and padding and rely on the PDF generator\'s default margins. */
body {
  margin: 0;
}

.page {
  padding: 0;
}
/** custom webform print css **/
</style>');
}