3 namespace Drupal\Tests\action\FunctionalJavascript;
6 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
7 use Drupal\system\Entity\Action;
10 * Tests action plugins using Javascript.
14 class ActionFormAjaxTest extends WebDriverTestBase {
19 protected static $modules = ['action', 'action_form_ajax_test'];
24 protected function setUp() {
26 $user = $this->drupalCreateUser(['administer actions']);
27 $this->drupalLogin($user);
31 * Tests action plugins with AJAX save their configuration.
33 public function testActionConfigurationWithAjax() {
34 $url = Url::fromRoute('action.admin_add', ['action_id' => 'action_form_ajax_test']);
35 $this->drupalGet($url);
36 $page = $this->getSession()->getPage();
39 $this->assertSession()->waitForElementVisible('named', ['button', 'Edit'])->press();
40 $this->assertSession()->waitForElementVisible('css', '[name="id"]')->setValue($id);
42 $page->find('css', '[name="having_a_party"]')
44 $this->assertSession()->waitForElementVisible('css', '[name="party_time"]');
46 $party_time = 'Evening';
47 $page->find('css', '[name="party_time"]')
48 ->setValue($party_time);
50 $page->find('css', '[value="Save"]')
53 $url = Url::fromRoute('entity.action.collection');
54 $this->assertSession()->pageTextContains('The action has been successfully saved.');
55 $this->assertSession()->addressEquals($url);
58 $instance = Action::load($id);
59 $configuration = $instance->getPlugin()->getConfiguration();
60 $this->assertEquals(['party_time' => $party_time], $configuration);
62 // Configuration should be shown in edit form.
63 $this->drupalGet($instance->toUrl('edit-form'));
64 $this->assertSession()->checkboxChecked('having_a_party');
65 $this->assertSession()->fieldValueEquals('party_time', $party_time);