diff --git a/tests/src/Functional/PdfParseTest.php b/tests/src/Functional/PdfParseTest.php index b9940c427171b1e6c766749794d84ef52f112ee9..64453bb6d148c3851e7dda3ac755b052978e4160 100644 --- a/tests/src/Functional/PdfParseTest.php +++ b/tests/src/Functional/PdfParseTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\fillpdf\Functional; use Drupal\Core\Url; +use Drupal\Core\Config\Config; use Drupal\file\Entity\File; use Drupal\fillpdf\Component\Utility\FillPdf; use Drupal\fillpdf\Entity\FillPdfForm; @@ -27,11 +28,13 @@ class PdfParseTest extends FillPdfTestBase { // 200, we assume that we're not in an environment where we can run this // test. $this->configureLocalServiceBackend(); + $config = $this->container->get('config.factory')->get('fillpdf.settings'); if (!FillPdf::checkLocalServiceEndpoint($this->container->get('http_client'), $config)) { throw new \PHPUnit_Framework_SkippedTestError('FillPDF LocalServer unavailable, so skipping test.'); } - $this->backendTest(); + + $this->backendTest($config); } /** @@ -40,16 +43,41 @@ class PdfParseTest extends FillPdfTestBase { * @throws \PHPUnit_Framework_SkippedTestError * Thrown when test had to be skipped as local pdftk install is not * available. - * - * @todo Consolidate duplicate code with PdfPopulationTest. */ public function testParsePdftk() { $this->configureFillPdf(['backend' => 'pdftk']); + if (!FillPdf::checkPdftkPath()) { throw new \PHPUnit_Framework_SkippedTestError('pdftk not available, so skipping test.'); } - $fillpdf_form = $this->backendTest(); + $config = $this->container->get('config.factory')->get('fillpdf.settings'); + $this->backendTest($config); + } + + /** + * Tests a backend. + * + * @param \Drupal\Core\Config\Config $fillpdf_config + * FillPDF configuration object. + * + * @return \Drupal\fillpdf\FillPdfFormInterface + * The created FillPdfForm. + * + * @internal + * @todo Consolidate duplicate code with PdfPopulationTest. + * @todo This may be significantly simplified once we're initializing a + * FillPdfForm with the parsed values. + * @see https://www.drupal.org/project/fillpdf/issues/3056400 + */ + protected function backendTest(Config $fillpdf_config) { + $this->uploadTestPdf('fillpdf_Ŧäßð_v3â.pdf'); + $this->assertSession()->pageTextNotContains('No fields detected in PDF.'); + + $fillpdf_form = FillPdfForm::load($this->getLatestFillPdfForm()); + $fields = $fillpdf_form->getFormFields(); + $this->assertCount(12, $fields); + // Get the uploaded template's file ID. $previous_file_id = $fillpdf_form->file->target_id; @@ -69,10 +97,11 @@ class PdfParseTest extends FillPdfTestBase { $this->assertSession()->pageTextNotContains('Merging the FillPDF Form failed'); // Retrieve the last file ID which should be the sample file. - // @todo: The saved xfdf file leads to the file counter being increased by - // two instead of 1. + // @todo: When using pdftk, the saved xfdf file leads to the file counter + // being increased by two instead of 1. We're therefore only comparing by + // "greater than". $file_id = $this->getLastFileId(); - static::assertEquals($previous_file_id + 2, $file_id); + static::assertTrue($file_id > $previous_file_id, 'Populated PDF was saved as a new managed file.'); // Load the sample file and check it is a PDF. $file = File::load($file_id); @@ -86,9 +115,8 @@ class PdfParseTest extends FillPdfTestBase { $fillpdf_form->save(); // Create an instance of the pdftk plugin. - $config = $this->container->get('config.factory')->get('fillpdf.settings'); $backend_manager = $this->container->get('plugin.manager.fillpdf_backend'); - $backend = $backend_manager->createInstance('pdftk', $config->get()); + $backend = $backend_manager->createInstance($config->get('backend'), $config->get()); // Reparse the sample PDF file and check for each text field that the // field value equals the field name. @@ -98,21 +126,6 @@ class PdfParseTest extends FillPdfTestBase { static::assertEquals($field['name'], $value); } } - } - - /** - * Tests a backend. - * - * @return \Drupal\fillpdf\FillPdfFormInterface - * The created FillPdfForm. - */ - protected function backendTest() { - $this->uploadTestPdf('fillpdf_Ŧäßð_v3â.pdf'); - $this->assertSession()->pageTextNotContains('No fields detected in PDF.'); - - $fillpdf_form = FillPdfForm::load($this->getLatestFillPdfForm()); - $fields = $fillpdf_form->getFormFields(); - $this->assertCount(12, $fields); return $fillpdf_form; }