annotate core/modules/book/tests/src/Functional/BookContentModerationTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\book\Functional;
Chris@0 4
Chris@0 5 use Drupal\Tests\BrowserTestBase;
Chris@17 6 use Drupal\Tests\content_moderation\Traits\ContentModerationTestTrait;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Tests Book and Content Moderation integration.
Chris@0 10 *
Chris@0 11 * @group book
Chris@0 12 */
Chris@0 13 class BookContentModerationTest extends BrowserTestBase {
Chris@0 14
Chris@0 15 use BookTestTrait;
Chris@17 16 use ContentModerationTestTrait;
Chris@0 17
Chris@0 18 /**
Chris@0 19 * Modules to install.
Chris@0 20 *
Chris@0 21 * @var array
Chris@0 22 */
Chris@0 23 public static $modules = ['book', 'block', 'book_test', 'content_moderation'];
Chris@0 24
Chris@0 25 /**
Chris@0 26 * {@inheritdoc}
Chris@0 27 */
Chris@0 28 protected function setUp() {
Chris@0 29 parent::setUp();
Chris@0 30
Chris@0 31 $this->drupalPlaceBlock('system_breadcrumb_block');
Chris@0 32 $this->drupalPlaceBlock('page_title_block');
Chris@0 33
Chris@17 34 $workflow = $this->createEditorialWorkflow();
Chris@0 35 $workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'book');
Chris@0 36 $workflow->save();
Chris@0 37
Chris@0 38 // We need a user with additional content moderation permissions.
Chris@0 39 $this->bookAuthor = $this->drupalCreateUser(['create new books', 'create book content', 'edit own book content', 'add content to books', 'access printer-friendly version', 'view any unpublished content', 'use editorial transition create_new_draft', 'use editorial transition publish']);
Chris@0 40 }
Chris@0 41
Chris@0 42 /**
Chris@0 43 * Tests that book drafts can not modify the book outline.
Chris@0 44 */
Chris@0 45 public function testBookWithPendingRevisions() {
Chris@0 46 // Create two books.
Chris@0 47 $book_1_nodes = $this->createBook(['moderation_state[0][state]' => 'published']);
Chris@0 48 $book_1 = $this->book;
Chris@0 49
Chris@0 50 $this->createBook(['moderation_state[0][state]' => 'published']);
Chris@0 51 $book_2 = $this->book;
Chris@0 52
Chris@0 53 $this->drupalLogin($this->bookAuthor);
Chris@0 54
Chris@0 55 // Check that book pages display along with the correct outlines.
Chris@0 56 $this->book = $book_1;
Chris@0 57 $this->checkBookNode($book_1, [$book_1_nodes[0], $book_1_nodes[3], $book_1_nodes[4]], FALSE, FALSE, $book_1_nodes[0], []);
Chris@0 58 $this->checkBookNode($book_1_nodes[0], [$book_1_nodes[1], $book_1_nodes[2]], $book_1, $book_1, $book_1_nodes[1], [$book_1]);
Chris@0 59
Chris@0 60 // Create a new book page without actually attaching it to a book and create
Chris@0 61 // a draft.
Chris@0 62 $edit = [
Chris@0 63 'title[0][value]' => $this->randomString(),
Chris@0 64 'moderation_state[0][state]' => 'published',
Chris@0 65 ];
Chris@0 66 $this->drupalPostForm('node/add/book', $edit, t('Save'));
Chris@0 67 $node = $this->drupalGetNodeByTitle($edit['title[0][value]']);
Chris@0 68 $this->assertTrue($node);
Chris@0 69
Chris@0 70 $edit = [
Chris@0 71 'moderation_state[0][state]' => 'draft',
Chris@0 72 ];
Chris@0 73 $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save'));
Chris@0 74 $this->assertSession()->pageTextNotContains('You can only change the book outline for the published version of this content.');
Chris@0 75
Chris@0 76 // Create a book draft with no changes, then publish it.
Chris@0 77 $edit = [
Chris@0 78 'moderation_state[0][state]' => 'draft',
Chris@0 79 ];
Chris@0 80 $this->drupalPostForm('node/' . $book_1->id() . '/edit', $edit, t('Save'));
Chris@0 81 $this->assertSession()->pageTextNotContains('You can only change the book outline for the published version of this content.');
Chris@0 82 $edit = [
Chris@0 83 'moderation_state[0][state]' => 'published',
Chris@0 84 ];
Chris@0 85 $this->drupalPostForm('node/' . $book_1->id() . '/edit', $edit, t('Save'));
Chris@0 86
Chris@0 87 // Try to move Node 2 to a different parent.
Chris@0 88 $edit = [
Chris@0 89 'book[pid]' => $book_1_nodes[3]->id(),
Chris@0 90 'moderation_state[0][state]' => 'draft',
Chris@0 91 ];
Chris@0 92 $this->drupalPostForm('node/' . $book_1_nodes[1]->id() . '/edit', $edit, t('Save'));
Chris@0 93
Chris@0 94 $this->assertSession()->pageTextContains('You can only change the book outline for the published version of this content.');
Chris@0 95
Chris@0 96 // Check that the book outline did not change.
Chris@0 97 $this->book = $book_1;
Chris@0 98 $this->checkBookNode($book_1, [$book_1_nodes[0], $book_1_nodes[3], $book_1_nodes[4]], FALSE, FALSE, $book_1_nodes[0], []);
Chris@0 99 $this->checkBookNode($book_1_nodes[0], [$book_1_nodes[1], $book_1_nodes[2]], $book_1, $book_1, $book_1_nodes[1], [$book_1]);
Chris@0 100
Chris@0 101 // Try to move Node 2 to a different book.
Chris@0 102 $edit = [
Chris@0 103 'book[bid]' => $book_2->id(),
Chris@0 104 'moderation_state[0][state]' => 'draft',
Chris@0 105 ];
Chris@0 106 $this->drupalPostForm('node/' . $book_1_nodes[1]->id() . '/edit', $edit, t('Save'));
Chris@0 107
Chris@0 108 $this->assertSession()->pageTextContains('You can only change the book outline for the published version of this content.');
Chris@0 109
Chris@0 110 // Check that the book outline did not change.
Chris@0 111 $this->book = $book_1;
Chris@0 112 $this->checkBookNode($book_1, [$book_1_nodes[0], $book_1_nodes[3], $book_1_nodes[4]], FALSE, FALSE, $book_1_nodes[0], []);
Chris@0 113 $this->checkBookNode($book_1_nodes[0], [$book_1_nodes[1], $book_1_nodes[2]], $book_1, $book_1, $book_1_nodes[1], [$book_1]);
Chris@0 114
Chris@0 115 // Try to change the weight of Node 2.
Chris@0 116 $edit = [
Chris@0 117 'book[weight]' => 2,
Chris@0 118 'moderation_state[0][state]' => 'draft',
Chris@0 119 ];
Chris@0 120 $this->drupalPostForm('node/' . $book_1_nodes[1]->id() . '/edit', $edit, t('Save'));
Chris@0 121
Chris@0 122 $this->assertSession()->pageTextContains('You can only change the book outline for the published version of this content.');
Chris@0 123
Chris@0 124 // Check that the book outline did not change.
Chris@0 125 $this->book = $book_1;
Chris@0 126 $this->checkBookNode($book_1, [$book_1_nodes[0], $book_1_nodes[3], $book_1_nodes[4]], FALSE, FALSE, $book_1_nodes[0], []);
Chris@0 127 $this->checkBookNode($book_1_nodes[0], [$book_1_nodes[1], $book_1_nodes[2]], $book_1, $book_1, $book_1_nodes[1], [$book_1]);
Chris@0 128
Chris@0 129 // Save a new draft revision for the node without any changes and check that
Chris@0 130 // the error message is not displayed.
Chris@0 131 $edit = [
Chris@0 132 'moderation_state[0][state]' => 'draft',
Chris@0 133 ];
Chris@0 134 $this->drupalPostForm('node/' . $book_1_nodes[1]->id() . '/edit', $edit, t('Save'));
Chris@0 135
Chris@0 136 $this->assertSession()->pageTextNotContains('You can only change the book outline for the published version of this content.');
Chris@0 137 }
Chris@0 138
Chris@0 139 }