4 use BookStack\Repos\EntityRepo;
6 class PageContentTest extends TestCase
9 public function test_page_includes()
11 $page = Page::first();
12 $secondPage = Page::where('id', '!=', $page->id)->first();
14 $secondPage->html = "<p id='section1'>Hello, This is a test</p><p id='section2'>This is a second block of content</p>";
19 $pageContent = $this->get($page->getUrl());
20 $pageContent->assertDontSee('Hello, This is a test');
22 $originalHtml = $page->html;
23 $page->html .= "{{@{$secondPage->id}}}";
26 $pageContent = $this->get($page->getUrl());
27 $pageContent->assertSee('Hello, This is a test');
28 $pageContent->assertSee('This is a second block of content');
30 $page->html = $originalHtml . " Well {{@{$secondPage->id}#section2}}";
33 $pageContent = $this->get($page->getUrl());
34 $pageContent->assertDontSee('Hello, This is a test');
35 $pageContent->assertSee('Well This is a second block of content');
38 public function test_saving_page_with_includes()
40 $page = Page::first();
41 $secondPage = Page::where('id', '!=', $page->id)->first();
43 $page->html = "<p>{{@$secondPage->id}}</p>";
45 $resp = $this->put($page->getUrl(), ['name' => $page->name, 'html' => $page->html, 'summary' => '']);
47 $resp->assertStatus(302);
49 $page = Page::find($page->id);
50 $this->assertContains("{{@$secondPage->id}}", $page->html);
53 public function test_page_includes_do_not_break_tables()
55 $page = Page::first();
56 $secondPage = Page::where('id', '!=', $page->id)->first();
58 $content = '<table id="table"><tbody><tr><td>test</td></tr></tbody></table>';
59 $secondPage->html = $content;
62 $page->html = "{{@{$secondPage->id}#table}}";
66 $pageResp = $this->get($page->getUrl());
67 $pageResp->assertSee($content);
70 public function test_page_revision_views_viewable()
74 $entityRepo = $this->app[EntityRepo::class];
75 $page = Page::first();
76 $entityRepo->updatePage($page, $page->book_id, ['name' => 'updated page', 'html' => '<p>new content</p>', 'summary' => 'page revision testing']);
77 $pageRevision = $page->revisions->last();
79 $revisionView = $this->get($page->getUrl() . '/revisions/' . $pageRevision->id);
80 $revisionView->assertStatus(200);
81 $revisionView->assertSee('new content');
83 $revisionView = $this->get($page->getUrl() . '/revisions/' . $pageRevision->id . '/changes');
84 $revisionView->assertStatus(200);
85 $revisionView->assertSee('new content');
88 public function test_page_revision_restore_updates_content()
92 $entityRepo = $this->app[EntityRepo::class];
93 $page = Page::first();
94 $entityRepo->updatePage($page, $page->book_id, ['name' => 'updated page abc123', 'html' => '<p>new contente def456</p>', 'summary' => 'initial page revision testing']);
95 $entityRepo->updatePage($page, $page->book_id, ['name' => 'updated page again', 'html' => '<p>new content</p>', 'summary' => 'page revision testing']);
96 $page = Page::find($page->id);
99 $pageView = $this->get($page->getUrl());
100 $pageView->assertDontSee('abc123');
101 $pageView->assertDontSee('def456');
103 $revToRestore = $page->revisions()->where('name', 'like', '%abc123')->first();
104 $restoreReq = $this->get($page->getUrl() . '/revisions/' . $revToRestore->id . '/restore');
105 $page = Page::find($page->id);
107 $restoreReq->assertStatus(302);
108 $restoreReq->assertRedirect($page->getUrl());
110 $pageView = $this->get($page->getUrl());
111 $pageView->assertSee('abc123');
112 $pageView->assertSee('def456');