class OffCanvasDialogTest

Same name and namespace in other branches
  1. 11.x core/modules/system/tests/src/Functional/Ajax/OffCanvasDialogTest.php \Drupal\Tests\system\Functional\Ajax\OffCanvasDialogTest
  2. 10 core/modules/system/tests/src/Functional/Ajax/OffCanvasDialogTest.php \Drupal\Tests\system\Functional\Ajax\OffCanvasDialogTest
  3. 8.9.x core/modules/system/tests/src/Functional/Ajax/OffCanvasDialogTest.php \Drupal\Tests\system\Functional\Ajax\OffCanvasDialogTest

Performs tests on opening and manipulating dialogs via AJAX commands.

@group Ajax

Hierarchy

Expanded class hierarchy of OffCanvasDialogTest

File

core/modules/system/tests/src/Functional/Ajax/OffCanvasDialogTest.php, line 15

Namespace

Drupal\Tests\system\Functional\Ajax
View source
class OffCanvasDialogTest extends BrowserTestBase {
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  
  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'ajax_test',
  ];
  
  /**
   * Tests sending AJAX requests to open and manipulate off-canvas dialog.
   *
   * @dataProvider dialogPosition
   */
  public function testDialog($position) {
    // Ensure the elements render without notices or exceptions.
    $this->drupalGet('ajax-test/dialog');
    // Set up variables for this test.
    $dialog_renderable = AjaxTestController::dialogContents();
    $dialog_contents = \Drupal::service('renderer')->renderRoot($dialog_renderable);
    $off_canvas_expected_response = [
      'command' => 'openDialog',
      'selector' => '#drupal-off-canvas',
      'settings' => NULL,
      'data' => $dialog_contents,
      'dialogOptions' => [
        'title' => 'AJAX Dialog & contents',
        'modal' => FALSE,
        'autoResize' => FALSE,
        'resizable' => 'w',
        'draggable' => FALSE,
        'drupalAutoButtons' => FALSE,
        'drupalOffCanvasPosition' => $position ?: 'side',
        'buttons' => [],
        'dialogClass' => 'ui-dialog-off-canvas ui-dialog-position-' . ($position ?: 'side'),
        'width' => 300,
      ],
      'effect' => 'fade',
      'speed' => 1000,
    ];
    // Emulate going to the JS version of the page and check the JSON response.
    $wrapper_format = $position && $position !== 'side' ? 'drupal_dialog.off_canvas_' . $position : 'drupal_dialog.off_canvas';
    $ajax_result = $this->drupalGet('ajax-test/dialog-contents', [
      'query' => [
        MainContentViewSubscriber::WRAPPER_FORMAT => $wrapper_format,
      ],
    ]);
    $ajax_result = Json::decode($ajax_result);
    $this->assertEquals($off_canvas_expected_response, $ajax_result[4], 'off-canvas dialog JSON response matches.');
  }
  
  /**
   * The data provider for potential dialog positions.
   *
   * @return array
   */
  public static function dialogPosition() {
    return [
      [
        NULL,
      ],
      [
        'side',
      ],
      [
        'top',
      ],
    ];
  }

}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.