improvements-2.x-dev/modules/improvements_form/tests/src/Functional/ImprovementsFormTest.php
modules/improvements_form/tests/src/Functional/ImprovementsFormTest.php
<?php
namespace Drupal\Tests\improvements_form\Functional;
use Drupal\improvements_form\Ajax\AddClassCommand;
use Drupal\improvements_form\Ajax\ConsoleLogCommand;
use Drupal\improvements_form\Ajax\FormResetCommand;
use Drupal\improvements_form\Ajax\HistoryReplaceStateCommand;
use Drupal\improvements_form\Ajax\PageReloadCommand;
use Drupal\improvements_form\Ajax\RemoveClassCommand;
use Drupal\Tests\block\Traits\BlockCreationTrait;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\improvements\Traits\ImprovementsTestTrait;
use Drupal\Tests\node\Traits\NodeCreationTrait;
class ImprovementsFormTest extends BrowserTestBase {
use BlockCreationTrait;
use ImprovementsTestTrait;
use NodeCreationTrait;
/**
* {@inheritDoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritDoc}
*/
protected static $modules = ['improvements_form'];
/**
* {@inheritDoc}
*/
protected function setUp(): void {
parent::setUp();
}
/**
* Test ajax commands.
*/
public function testAjaxCommands(): void {
(new AddClassCommand('.selector', 'class-name'))->render();
(new ConsoleLogCommand('message'))->render();
(new FormResetCommand('.form-selector', TRUE))->render();
(new HistoryReplaceStateCommand('/new-url'))->render();
(new PageReloadCommand())->render();
(new RemoveClassCommand('.selector', 'class-name'))->render();
}
/**
* Test "date" widget functionality.
*/
public function testFieldWidgetDateRemoveFielset(): void {
$this->installModule('node', 'field', 'datetime');
$this->createContentType(['type' => 'page', 'name' => 'Page']);
$this->createField(
entity_type: 'node',
entity_bundle: 'page',
field_name: 'field_date',
field_type: 'datetime',
field_label: 'Test date field',
widget_type: 'datetime_default',
);
$this->drupalLoginAsRoot();
$this->drupalGet('/node/add/page');
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->elementExists('css', '.field--name-field-date');
$web_assert->elementExists('css', '#edit-field-date-0-value-date');
$web_assert->elementNotExists('css', '.field--name-field-date fieldset');
}
/**
* Test "option" element attributes.
*/
public function testFormSelectOptionsAttributes(): void {
$this->installModule('improvements_form_test', 'jquery_ui_slider');
$this->drupalGet('/improvements-test/test-form');
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->elementExists('css', 'select[name="select1"] option[value="foo"]');
$web_assert->elementExists('css', 'select[name="select2"] option[value="foo"][data-custom-attribute="foo-custom-attribute"].foo-test-class');
$web_assert->elementExists('css', 'select[name="select2"] option[value="bar"]:disabled');
$web_assert->elementExists('css', 'select[name="select2"] option[value="baz"]');
$this->submitForm([
'select1' => 'bar',
'select2' => 'baz',
], 'Submit');
$this->dontSeeErrorMessage();
$web_assert->pageTextContains('[select1] => bar');
$web_assert->pageTextContains('[select2] => baz');
}
/**
* Test "managed_file" element improvements.
*/
public function testFormManagedFileImprovements(): void {
$this->installModule('improvements_form_test', 'jquery_ui_slider', 'file');
$this->drupalGet('/improvements-test/test-form');
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->elementExists('css', '#edit-file-without-autoupload-upload');
$web_assert->elementExists('css', '#edit-file-without-autoupload-upload.js-form-file--no-autoupload');
$web_assert->elementExists('css', '#edit-file-without-autoupload-upload-button.js-hide');
$web_assert->elementExists('css', '#edit-file-with-button-upload-button');
$web_assert->elementNotExists('css', '#edit-file-with-button-upload-button.js-hide');
$web_assert->elementNotExists('css', '#edit-file-without-button-upload-button');
}
/**
* Test '#title_display'=>'placeholder'.
*/
public function testFormInputTitleDisplayPlaceholder(): void {
$this->installModule('improvements_form_test', 'jquery_ui_slider');
$this->drupalGet('/improvements-test/test-form');
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->elementAttributeContains('css', '#edit-label-in-placeholder', 'placeholder', 'Label in placeholder');
$this->submitForm([
'label_in_placeholder' => 'foo',
], 'Submit');
$this->dontSeeErrorMessage();
$web_assert->pageTextContains('[label_in_placeholder] => foo');
}
/**
* Test '#type'=>'range_slider'.
*
* @covers \Drupal\improvements_form\Element\RangeSlider
*/
public function testFormElementRangeSlider(): void {
$this->installModule('improvements_form_test', 'jquery_ui_slider');
$this->drupalGet('/improvements-test/test-form');
$this->dontSeeErrorMessage();
$this->submitForm([
'range_slider[min]' => 5,
'range_slider[max]' => 60,
], 'Submit');
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->pageTextContains('[min] => 5');
$web_assert->pageTextContains('[max] => 60');
}
/**
* Test tracking form submit functionality.
*
* @covers ::improvements_form_page_attachments()
*/
public function testFormTrackingSubmit(): void {
$this->installModule('improvements_form_test', 'jquery_ui_slider');
$this->drupalGet('/improvements-test/test-form');
$this->dontSeeErrorMessage();
$this->submitForm([], 'Submit');
$this->dontSeeErrorMessage();
$drupal_settings = $this->getDrupalSettings();
$this->assertSame('improvements_test_form', $drupal_settings['submittedForms'][0]);
}
}
