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 }
|