]> BookStack Code Mirror - bookstack/blob - tests/Entity/PageDraftTest.php
Apply fixes from StyleCI
[bookstack] / tests / Entity / PageDraftTest.php
1 <?php
2
3 namespace Tests\Entity;
4
5 use BookStack\Entities\Models\Page;
6 use BookStack\Entities\Repos\PageRepo;
7 use Tests\BrowserKitTest;
8
9 class PageDraftTest extends BrowserKitTest
10 {
11     protected $page;
12
13     /**
14      * @var PageRepo
15      */
16     protected $pageRepo;
17
18     public function setUp(): void
19     {
20         parent::setUp();
21         $this->page = \BookStack\Entities\Models\Page::first();
22         $this->pageRepo = app(PageRepo::class);
23     }
24
25     public function test_draft_content_shows_if_available()
26     {
27         $addedContent = '<p>test message content</p>';
28         $this->asAdmin()->visit($this->page->getUrl('/edit'))
29             ->dontSeeInField('html', $addedContent);
30
31         $newContent = $this->page->html . $addedContent;
32         $this->pageRepo->updatePageDraft($this->page, ['html' => $newContent]);
33         $this->asAdmin()->visit($this->page->getUrl('/edit'))
34             ->seeInField('html', $newContent);
35     }
36
37     public function test_draft_not_visible_by_others()
38     {
39         $addedContent = '<p>test message content</p>';
40         $this->asAdmin()->visit($this->page->getUrl('/edit'))
41             ->dontSeeInField('html', $addedContent);
42
43         $newContent = $this->page->html . $addedContent;
44         $newUser = $this->getEditor();
45         $this->pageRepo->updatePageDraft($this->page, ['html' => $newContent]);
46
47         $this->actingAs($newUser)->visit($this->page->getUrl('/edit'))
48             ->dontSeeInField('html', $newContent);
49     }
50
51     public function test_alert_message_shows_if_editing_draft()
52     {
53         $this->asAdmin();
54         $this->pageRepo->updatePageDraft($this->page, ['html' => 'test content']);
55         $this->asAdmin()->visit($this->page->getUrl('/edit'))
56             ->see('You are currently editing a draft');
57     }
58
59     public function test_alert_message_shows_if_someone_else_editing()
60     {
61         $nonEditedPage = \BookStack\Entities\Models\Page::take(10)->get()->last();
62         $addedContent = '<p>test message content</p>';
63         $this->asAdmin()->visit($this->page->getUrl('/edit'))
64             ->dontSeeInField('html', $addedContent);
65
66         $newContent = $this->page->html . $addedContent;
67         $newUser = $this->getEditor();
68         $this->pageRepo->updatePageDraft($this->page, ['html' => $newContent]);
69
70         $this->actingAs($newUser)
71             ->visit($this->page->getUrl('/edit'))
72             ->see('Admin has started editing this page');
73         $this->flushSession();
74         $this->visit($nonEditedPage->getUrl() . '/edit')
75             ->dontSeeInElement('.notification', 'Admin has started editing this page');
76     }
77
78     public function test_draft_pages_show_on_homepage()
79     {
80         $book = \BookStack\Entities\Models\Book::first();
81         $this->asAdmin()->visit('/')
82             ->dontSeeInElement('#recent-drafts', 'New Page')
83             ->visit($book->getUrl() . '/create-page')
84             ->visit('/')
85             ->seeInElement('#recent-drafts', 'New Page');
86     }
87
88     public function test_draft_pages_not_visible_by_others()
89     {
90         $book = \BookStack\Entities\Models\Book::first();
91         $chapter = $book->chapters->first();
92         $newUser = $this->getEditor();
93
94         $this->actingAs($newUser)->visit('/')
95             ->visit($book->getUrl('/create-page'))
96             ->visit($chapter->getUrl('/create-page'))
97             ->visit($book->getUrl())
98             ->seeInElement('.book-contents', 'New Page');
99
100         $this->asAdmin()
101             ->visit($book->getUrl())
102             ->dontSeeInElement('.book-contents', 'New Page')
103             ->visit($chapter->getUrl())
104             ->dontSeeInElement('.book-contents', 'New Page');
105     }
106
107     public function test_page_html_in_ajax_fetch_response()
108     {
109         $this->asAdmin();
110         $page = Page::query()->first();
111
112         $this->getJson('/ajax/page/' . $page->id);
113         $this->seeJson([
114             'html' => $page->html,
115         ]);
116     }
117 }