]> BookStack Code Mirror - bookstack/blob - tests/Entity/PageDraftTest.php
fix image delete confirm text
[bookstack] / tests / Entity / PageDraftTest.php
1 <?php namespace Tests\Entity;
2
3 use BookStack\Entities\Models\Page;
4 use BookStack\Entities\Repos\PageRepo;
5 use Tests\BrowserKitTest;
6
7 class PageDraftTest extends BrowserKitTest
8 {
9     protected $page;
10
11     /**
12      * @var PageRepo
13      */
14     protected $pageRepo;
15
16     public function setUp(): void
17     {
18         parent::setUp();
19         $this->page = \BookStack\Entities\Models\Page::first();
20         $this->pageRepo = app(PageRepo::class);
21     }
22
23     public function test_draft_content_shows_if_available()
24     {
25         $addedContent = '<p>test message content</p>';
26         $this->asAdmin()->visit($this->page->getUrl('/edit'))
27             ->dontSeeInField('html', $addedContent);
28
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);
33     }
34
35     public function test_draft_not_visible_by_others()
36     {
37         $addedContent = '<p>test message content</p>';
38         $this->asAdmin()->visit($this->page->getUrl('/edit'))
39             ->dontSeeInField('html', $addedContent);
40
41         $newContent = $this->page->html . $addedContent;
42         $newUser = $this->getEditor();
43         $this->pageRepo->updatePageDraft($this->page, ['html' => $newContent]);
44
45         $this->actingAs($newUser)->visit($this->page->getUrl('/edit'))
46             ->dontSeeInField('html', $newContent);
47     }
48
49     public function test_alert_message_shows_if_editing_draft()
50     {
51         $this->asAdmin();
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');
55     }
56
57     public function test_alert_message_shows_if_someone_else_editing()
58     {
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);
63
64         $newContent = $this->page->html . $addedContent;
65         $newUser = $this->getEditor();
66         $this->pageRepo->updatePageDraft($this->page, ['html' => $newContent]);
67
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');
74     }
75
76     public function test_draft_pages_show_on_homepage()
77     {
78         $book = \BookStack\Entities\Models\Book::first();
79         $this->asAdmin()->visit('/')
80             ->dontSeeInElement('#recent-drafts', 'New Page')
81             ->visit($book->getUrl() . '/create-page')
82             ->visit('/')
83             ->seeInElement('#recent-drafts', 'New Page');
84     }
85
86     public function test_draft_pages_not_visible_by_others()
87     {
88         $book = \BookStack\Entities\Models\Book::first();
89         $chapter = $book->chapters->first();
90         $newUser = $this->getEditor();
91
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');
97
98         $this->asAdmin()
99             ->visit($book->getUrl())
100             ->dontSeeInElement('.book-contents', 'New Page')
101             ->visit($chapter->getUrl())
102             ->dontSeeInElement('.book-contents', 'New Page');
103     }
104
105     public function test_page_html_in_ajax_fetch_response()
106     {
107         $this->asAdmin();
108         $page = Page::query()->first();
109
110         $this->getJson('/ajax/page/' . $page->id);
111         $this->seeJson([
112             'html' => $page->html,
113         ]);
114     }
115
116 }
Morty Proxy This is a proxified and sanitized view of the page, visit original site.