You are here

public function AjaxLinkTest::testDomUpdate in Flag 8.4

Tests DOM update.

Click on flag and then unflag links verifying that the link cycles as expected and flag flash message functions.

File

tests/src/FunctionalJavascript/AjaxLinkTest.php, line 109

Class

AjaxLinkTest
Javascript test for AjaxLinks.

Namespace

Drupal\Tests\flag\FunctionalJavascript

Code

public function testDomUpdate() {

  // Get Page.
  $node_path = '/node/' . $this->node
    ->id();
  $this
    ->drupalGet($node_path);
  $session = $this
    ->getSession();
  $assert_session = $this
    ->assertSession();

  // Verify initially flag link is on the page.
  $page = $session
    ->getPage();
  $flag_link = $page
    ->findLink($this->flag
    ->getShortText('flag'));
  $this
    ->assertTrue($flag_link
    ->isVisible(), 'flag link exists.');
  $flag_link
    ->click();

  // Verify flags message appears.
  $flag_message = $this->flag
    ->getMessage('flag');
  $p_flash = $assert_session
    ->waitForElementVisible('css', 'p.js-flag-message');
  $this
    ->assertEquals($flag_message, $p_flash
    ->getText(), 'DOM update(1): The flag message is flashed.');
  $assert_session
    ->assertNoElementAfterWait('css', 'p.js-flag-message');
  $assert_session
    ->pageTextNotContains($flag_message);

  // Verify new link.
  $unflag_link = $session
    ->getPage()
    ->findLink($this->flag
    ->getShortText('unflag'));
  $this
    ->assertTrue($unflag_link
    ->isVisible(), 'unflag link exists.');
  $unflag_link
    ->click();

  // Verfy unflag message appears.
  $unflag_message = $this->flag
    ->getMessage('unflag');
  $p_flash2 = $this
    ->assertSession()
    ->waitForElementVisible('css', 'p.js-flag-message');
  $this
    ->assertEquals($unflag_message, $p_flash2
    ->getText(), 'DOM update(3): The unflag message is flashed.');
  $assert_session
    ->assertNoElementAfterWait('css', 'p.js-flag-message');
  $assert_session
    ->pageTextNotContains($unflag_message);

  // Verify the cycle completes and flag returns.
  $flag_link2 = $session
    ->getPage()
    ->findLink($this->flag
    ->getShortText('flag'));
  $this
    ->assertTrue($flag_link2
    ->isVisible(), 'flag cycle return to start.');
}