You are here

public function ProgrammaticTest::testSubmissionWorkflow in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php \Drupal\Tests\system\Kernel\Form\ProgrammaticTest::testSubmissionWorkflow()

Tests the programmatic form submission workflow.

File

core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php, line 26

Class

ProgrammaticTest
Tests the programmatic form submission behavior.

Namespace

Drupal\Tests\system\Kernel\Form

Code

public function testSubmissionWorkflow() {

  // Backup the current batch status and reset it to avoid conflicts while
  // processing the dummy form submit handler.
  $current_batch = $batch =& batch_get();
  $batch = [];

  // Test that a programmatic form submission is rejected when a required
  // textfield is omitted and correctly processed when it is provided.
  $this
    ->doSubmitForm([], FALSE);
  $this
    ->doSubmitForm([
    'textfield' => 'test 1',
  ], TRUE);
  $this
    ->doSubmitForm([], FALSE);
  $this
    ->doSubmitForm([
    'textfield' => 'test 2',
  ], TRUE);

  // Test that a programmatic form submission can turn on and off checkboxes
  // which are, by default, checked.
  $this
    ->doSubmitForm([
    'textfield' => 'dummy value',
    'checkboxes' => [
      1 => 1,
      2 => 2,
    ],
  ], TRUE);
  $this
    ->doSubmitForm([
    'textfield' => 'dummy value',
    'checkboxes' => [
      1 => 1,
      2 => NULL,
    ],
  ], TRUE);
  $this
    ->doSubmitForm([
    'textfield' => 'dummy value',
    'checkboxes' => [
      1 => NULL,
      2 => 2,
    ],
  ], TRUE);
  $this
    ->doSubmitForm([
    'textfield' => 'dummy value',
    'checkboxes' => [
      1 => NULL,
      2 => NULL,
    ],
  ], TRUE);

  // Test that a programmatic form submission can correctly click a button
  // that limits validation errors based on user input. Since we do not
  // submit any values for "textfield" here and the textfield is required, we
  // only expect form validation to pass when validation is limited to a
  // different field.
  $this
    ->doSubmitForm([
    'op' => 'Submit with limited validation',
    'field_to_validate' => 'all',
  ], FALSE);
  $this
    ->doSubmitForm([
    'op' => 'Submit with limited validation',
    'field_to_validate' => 'textfield',
  ], FALSE);
  $this
    ->doSubmitForm([
    'op' => 'Submit with limited validation',
    'field_to_validate' => 'field_to_validate',
  ], TRUE);

  // Restore the current batch status.
  $batch = $current_batch;
}