View source
<?php
namespace Drupal\Tests\flag\FunctionalJavascript;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\flag\Entity\Flag;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\flag\Traits\FlagCreateTrait;
use Drupal\Tests\flag\Traits\FlagPermissionsTrait;
class FlagContextualLinksTest extends WebDriverTestBase {
use FlagCreateTrait;
use FlagPermissionsTrait;
protected $defaultTheme = 'stark';
public static $modules = [
'contextual',
'field_ui',
'flag',
'node',
'system',
'toolbar',
'user',
];
protected $flag;
protected $adminUser;
protected $alice;
protected $bob;
protected $nodeType = 'article';
protected $flagService;
public function setUp() {
parent::setUp();
$this->flagService = $this->container
->get('flag');
$this
->drupalCreateContentType([
'type' => $this->nodeType,
]);
$this->adminUser = $this
->createUser([
'administer flags',
'administer flagging display',
'administer flagging fields',
'administer node display',
'administer modules',
'administer nodes',
'create ' . $this->nodeType . ' content',
'edit any ' . $this->nodeType . ' content',
'delete any ' . $this->nodeType . ' content',
'access contextual links',
'access content',
'access toolbar',
]);
$this->alice = $this
->drupalCreateUser([
'create ' . $this->nodeType . ' content',
'edit any ' . $this->nodeType . ' content',
'delete any ' . $this->nodeType . ' content',
'access contextual links',
'access content',
'access toolbar',
]);
$this->bob = $this
->drupalCreateUser([
'create ' . $this->nodeType . ' content',
'edit any ' . $this->nodeType . ' content',
'delete any ' . $this->nodeType . ' content',
'access contextual links',
'access content',
'access toolbar',
]);
$this
->drupalLogin($this->adminUser);
$this->flag = Flag::create([
'id' => 'test_label_123',
'label' => $this
->randomHTMLString(),
'entity_type' => 'node',
'bundles' => array_keys(\Drupal::service('entity_type.bundle.info')
->getBundleInfo('node')),
'flag_short' => $this
->randomHTMLString(),
'unflag_short' => $this
->randomHTMLString(),
'unflag_denied_text' => $this
->randomHTMLString(),
'flag_long' => $this
->randomHTMLString(16),
'unflag_long' => $this
->randomHTMLString(16),
'flag_message' => $this
->randomHTMLString(32),
'unflag_message' => $this
->randomHTMLString(32),
'flag_type' => $this
->getFlagType('node'),
'link_type' => 'reload',
'flagTypeConfig' => [
'show_as_field' => FALSE,
'show_on_form' => FALSE,
'show_contextual_link' => TRUE,
],
'linkTypeConfig' => [],
'global' => FALSE,
]);
$this->flag
->save();
$this
->grantFlagPermissions($this->flag);
}
public function testFlagLinks() {
$assert_session = $this
->assertSession();
$node = $this
->drupalCreateNode([
'type' => $this->nodeType,
]);
$this
->drupalLogin($this->alice);
$this
->drupalGet('node/' . $node
->id());
$main_contextual_button = $assert_session
->waitForElementVisible('css', 'button:contains("Edit")');
$this
->assertNotNull($main_contextual_button);
$main_contextual_button
->click();
$flag_contextual_links_id = 'node:node=' . $node
->id() . ':changed=' . $node
->getChangedTime() . '&flag_keys=' . $this->flag
->id() . '-flag&langcode=en';
$contextual_edit = $assert_session
->waitForElementVisible('css', 'div[data-contextual-id="' . $flag_contextual_links_id . '"] button');
$this
->assertNotNull($contextual_edit, new FormattableMarkup('Contextual link placeholder with id @id exists (flag).', [
'@id' => $flag_contextual_links_id,
]));
$contextual_edit
->click();
$flag_link1 = $assert_session
->waitForLink($this->flag
->getShortText('flag'));
$this
->assertNotNull($flag_link1);
$flag_link1
->click();
$unflag_contextual_links_id = 'node:node=' . $node
->id() . ':changed=' . $node
->getChangedTime() . '&flag_keys=' . $this->flag
->id() . '-unflag&langcode=en';
$contextual_edit2 = $assert_session
->waitForElementVisible('css', 'div[data-contextual-id="' . $unflag_contextual_links_id . '"] button');
$this
->assertNotNull($contextual_edit2, new FormattableMarkup('Contextual link placeholder with id @id exists (unflag).', [
'@id' => $unflag_contextual_links_id,
]));
$contextual_edit2
->click();
$unflag_link1 = $assert_session
->waitForLink($this->flag
->getShortText('unflag'));
$this
->assertNotNull($unflag_link1);
$this
->drupalLogin($this->bob);
$this
->drupalGet('node/' . $node
->id());
$contextual_edit3 = $assert_session
->waitForElementVisible('css', 'div[data-contextual-id="' . $flag_contextual_links_id . '"] button');
$this
->assertNotNull($contextual_edit3, new FormattableMarkup('Contextual link placeholder with id @id exists.', [
'@id' => $flag_contextual_links_id,
]));
$contextual_edit3
->click();
$flag_link2 = $assert_session
->waitForLink($this->flag
->getShortText('flag'));
$this
->assertNotNull($flag_link2);
}
}