diff --git a/src/Tests/ModerationRevisionsViewTest.php b/src/Tests/ModerationRevisionsViewTest.php index ae73e5e..96c175f 100644 --- a/src/Tests/ModerationRevisionsViewTest.php +++ b/src/Tests/ModerationRevisionsViewTest.php @@ -7,6 +7,8 @@ namespace Drupal\moderation_state\Tests; +use Symfony\Component\CssSelector\CssSelector; + /** * Tests moderation state integration with the content revisions View. * @@ -41,7 +43,10 @@ class ModerationRevisionsViewTest extends ModerationStateTestBase { */ public function testRevisionsView() { $this->drupalLogin($this->adminUser); - $node = $this->drupalCreateNode(['type' => 'moderated_content', 'moderation_state' => 'draft']); + $node = $this->drupalCreateNode([ + 'type' => 'moderated_content', + 'moderation_state' => 'draft' + ]); $node->moderation_state = 'needs_review'; $node->save(); $node->moderation_state = 'published'; @@ -49,6 +54,50 @@ class ModerationRevisionsViewTest extends ModerationStateTestBase { $this->drupalGet('node/' . $node->id() . '/revisions'); $this->assertResponse(200); + $states = $this->cssSelect('td.views-field-moderation-state'); + $this->assertEqual(trim((string) $states[0]), 'Draft'); + $this->assertEqual(trim((string) $states[1]), 'Needs Review'); + $this->assertEqual(trim((string) $states[2]), 'Published'); + + + $this->assertRows([ + [ + 'moderation_state' => 'Draft', + 'operations' => ['Set current', 'View', 'Delete'], + ], + [ + 'moderation_state' => 'Needs Review', + 'operations' => ['Set current', 'View', 'Delete'], + ], + [ + 'moderation_state' => 'Published', + 'operations' => ['View'], + ] + ]); + } + + /** + * Asserts rendered view rows have correct operations. + * + * @param array $expected + * The expected rows of the result. + */ + protected function assertRows($expected = []) { + $actual = []; + $rows = $this->cssSelect('.views-table tbody tr'); + foreach ($rows as $row) { + $state = trim((string) $row->xpath(CssSelector::toXPath('td.views-field-moderation-state'))[0]); + $ops_elems = $row->xpath(CssSelector::toXPath('ul.dropbutton li')); + $operations = []; + foreach ($ops_elems as $elem) { + $operations[] = trim($elem->xpath(CssSelector::toXPath('a'))[0]); + } + $actual[] = [ + 'moderation_state' => $state, + 'operations' => $operations, + ]; + } + $this->assertEqual($actual, $expected); } } diff --git a/src/Tests/ModerationStateTestTrait.php b/src/Tests/ModerationStateTestTrait.php index b7f1dfa..61e87df 100644 --- a/src/Tests/ModerationStateTestTrait.php +++ b/src/Tests/ModerationStateTestTrait.php @@ -27,8 +27,8 @@ trait ModerationStateTestTrait { /* @var \Drupal\user\RoleInterface $role */ $role_id = reset($role_ids); $role = Role::load($role_id); - $role->grantPermission(sprintf('create %s content', $content_type_id)); - $role->grantPermission(sprintf('edit any %s content', $content_type_id)); + $role->grantPermission("create $content_type_id content"); + $role->grantPermission("edit any $content_type_id content"); $role->grantPermission('view all revisions'); $role->grantPermission('revert all revisions'); $role->grantPermission('delete all revisions');