You are here

public function WebformSubmissionImportExportFunctionalTest::testSubmissionExport in Webform 8.5

Same name and namespace in other branches
  1. 6.x modules/webform_submission_export_import/tests/src/Functional/WebformSubmissionImportExportFunctionalTest.php \Drupal\Tests\webform_submission_export_import\Functional\WebformSubmissionImportExportFunctionalTest::testSubmissionExport()

Test submission import.

File

modules/webform_submission_export_import/tests/src/Functional/WebformSubmissionImportExportFunctionalTest.php, line 31

Class

WebformSubmissionImportExportFunctionalTest
Webform submission export/import test.

Namespace

Drupal\Tests\webform_submission_export_import\Functional

Code

public function testSubmissionExport() {
  $this
    ->drupalLogin($this->rootUser);
  $export_csv_uri = 'public://test_submission_export_import-export.csv';
  $export_csv_url = file_create_url('public://test_submission_export_import-export.csv');
  $webform = Webform::load('test_submission_export_import');

  /** @var \Drupal\webform_submission_export_import\WebformSubmissionExportImportImporterInterface $importer */
  $importer = \Drupal::service('webform_submission_export_import.importer');
  $importer
    ->setWebform($webform);
  $importer
    ->setImportUri($export_csv_url);

  // Create 3 submissions.

  /** @var \Drupal\webform\WebformSubmissionInterface[] $submissions */
  $submissions = [
    WebformSubmission::load($this
      ->postSubmissionTest($webform)),
    WebformSubmission::load($this
      ->postSubmissionTest($webform)),
    WebformSubmission::load($this
      ->postSubmissionTest($webform)),
  ];

  // Create CSV export.
  $this
    ->drupalPostForm('/admin/structure/webform/manage/test_submission_export_import/results/download', [
    'exporter' => 'webform_submission_export_import',
  ], 'Download');
  file_put_contents($export_csv_uri, $this
    ->getRawContent());

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

  // Import CSV export without any changes.
  $actual_stats = $importer
    ->import();
  WebformElementHelper::convertRenderMarkupToStrings($actual_stats);
  $expected_stats = [
    'created' => 0,
    'updated' => 3,
    'skipped' => 0,
    'total' => 3,
    'warnings' => [
      1 => [],
      2 => [],
      3 => [],
    ],
    'errors' => [
      1 => [],
      2 => [],
      3 => [],
    ],
  ];
  $this
    ->assertEquals($expected_stats, $actual_stats);

  // Check that submission values are unchanged.
  foreach ($submissions as $original_submission) {
    $expected_values = $original_submission
      ->toArray(TRUE);
    $updated_submission = $this
      ->loadSubmissionByProperty('uuid', $original_submission
      ->uuid());
    $actual_values = $updated_submission
      ->toArray(TRUE);
    $this
      ->assertEquals($expected_values, $actual_values);
  }

  // Alter the first submission.
  $submissions[0]
    ->setCompletedTime(time() - 1000);
  $submissions[0]
    ->setNotes('This is a note');
  $submissions[0]
    ->save();

  // @todo Determine why the below test is failing via DrupalCI.
  return;

  // Deleted the third submission.
  $file_uri = file_create_url(File::load($submissions[2]
    ->getElementData('file'))
    ->getFileUri());
  $files_uri = file_create_url(File::load($submissions[2]
    ->getElementData('files')[0])
    ->getFileUri());
  $submissions[2]
    ->delete();
  unset($submissions[2]);

  // Import CSV export without any changes.
  $actual_stats = $importer
    ->import();
  WebformElementHelper::convertRenderMarkupToStrings($actual_stats);
  $this
    ->debug($actual_stats);
  $expected_stats = [
    'created' => 1,
    'updated' => 2,
    'skipped' => 0,
    'total' => 3,
    'warnings' => [
      1 => [],
      2 => [],
      3 => [
        0 => '[file] Unable to read file from URL (' . $file_uri . ').',
        1 => '[files] Unable to read file from URL (' . $files_uri . ').',
      ],
    ],
    'errors' => [
      1 => [],
      2 => [],
      3 => [],
    ],
  ];
  $this
    ->assertEquals($expected_stats, $actual_stats);

  // Check that submission 1 values reset to original values.
  $original_submission = $submissions[0];
  $expected_values = $original_submission
    ->toArray(TRUE);
  $updated_submission = $this
    ->loadSubmissionByProperty('uuid', $original_submission
    ->uuid());
  $actual_values = $updated_submission
    ->toArray(TRUE);

  // Check that changes and notes were updated.
  $this
    ->assertNotEqual($expected_values['completed'], $actual_values['completed']);
  $this
    ->assertNotEqual($expected_values['notes'], $actual_values['notes']);

  // Check that notes was reset.
  $this
    ->assertEqual('This is a note', $expected_values['notes']);
  $this
    ->assertEqual('', $actual_values['notes']);

  // Unset changed and notes.
  unset($expected_values['completed'], $expected_values['notes']);
  unset($actual_values['completed'], $actual_values['notes']);

  // Check all other values remained the same.
  $this
    ->assertEquals($expected_values, $actual_values);
}