1 <?php namespace Tests\Entity;
3 use BookStack\Entities\Models\Page;
4 use BookStack\Entities\Repos\PageRepo;
5 use Tests\BrowserKitTest;
7 class PageDraftTest extends BrowserKitTest
16 public function setUp(): void
19 $this->page = \BookStack\Entities\Models\Page::first();
20 $this->pageRepo = app(PageRepo::class);
23 public function test_draft_content_shows_if_available()
25 $addedContent = '<p>test message content</p>';
26 $this->asAdmin()->visit($this->page->getUrl('/edit'))
27 ->dontSeeInField('html', $addedContent);
29 $newContent = $this->page->html . $addedContent;
30 $this->pageRepo->updatePageDraft($this->page, ['html' => $newContent]);
31 $this->asAdmin()->visit($this->page->getUrl('/edit'))
32 ->seeInField('html', $newContent);
35 public function test_draft_not_visible_by_others()
37 $addedContent = '<p>test message content</p>';
38 $this->asAdmin()->visit($this->page->getUrl('/edit'))
39 ->dontSeeInField('html', $addedContent);
41 $newContent = $this->page->html . $addedContent;
42 $newUser = $this->getEditor();
43 $this->pageRepo->updatePageDraft($this->page, ['html' => $newContent]);
45 $this->actingAs($newUser)->visit($this->page->getUrl('/edit'))
46 ->dontSeeInField('html', $newContent);
49 public function test_alert_message_shows_if_editing_draft()
52 $this->pageRepo->updatePageDraft($this->page, ['html' => 'test content']);
53 $this->asAdmin()->visit($this->page->getUrl('/edit'))
54 ->see('You are currently editing a draft');
57 public function test_alert_message_shows_if_someone_else_editing()
59 $nonEditedPage = \BookStack\Entities\Models\Page::take(10)->get()->last();
60 $addedContent = '<p>test message content</p>';
61 $this->asAdmin()->visit($this->page->getUrl('/edit'))
62 ->dontSeeInField('html', $addedContent);
64 $newContent = $this->page->html . $addedContent;
65 $newUser = $this->getEditor();
66 $this->pageRepo->updatePageDraft($this->page, ['html' => $newContent]);
68 $this->actingAs($newUser)
69 ->visit($this->page->getUrl('/edit'))
70 ->see('Admin has started editing this page');
71 $this->flushSession();
72 $this->visit($nonEditedPage->getUrl() . '/edit')
73 ->dontSeeInElement('.notification', 'Admin has started editing this page');
76 public function test_draft_pages_show_on_homepage()
78 $book = \BookStack\Entities\Models\Book::first();
79 $this->asAdmin()->visit('/')
80 ->dontSeeInElement('#recent-drafts', 'New Page')
81 ->visit($book->getUrl() . '/create-page')
83 ->seeInElement('#recent-drafts', 'New Page');
86 public function test_draft_pages_not_visible_by_others()
88 $book = \BookStack\Entities\Models\Book::first();
89 $chapter = $book->chapters->first();
90 $newUser = $this->getEditor();
92 $this->actingAs($newUser)->visit('/')
93 ->visit($book->getUrl('/create-page'))
94 ->visit($chapter->getUrl('/create-page'))
95 ->visit($book->getUrl())
96 ->seeInElement('.book-contents', 'New Page');
99 ->visit($book->getUrl())
100 ->dontSeeInElement('.book-contents', 'New Page')
101 ->visit($chapter->getUrl())
102 ->dontSeeInElement('.book-contents', 'New Page');
105 public function test_page_html_in_ajax_fetch_response()
108 $page = Page::query()->first();
110 $this->getJson('/ajax/page/' . $page->id);
112 'html' => $page->html,