]> BookStack Code Mirror - bookstack/blob - tests/Entity/ExportTest.php
Update common.php
[bookstack] / tests / Entity / ExportTest.php
1 <?php namespace Tests;
2
3
4 use BookStack\Entities\Chapter;
5 use BookStack\Entities\Page;
6 use BookStack\Uploads\HttpFetcher;
7
8 class ExportTest extends TestCase
9 {
10
11     public function test_page_text_export()
12     {
13         $page = Page::first();
14         $this->asEditor();
15
16         $resp = $this->get($page->getUrl('/export/plaintext'));
17         $resp->assertStatus(200);
18         $resp->assertSee($page->name);
19         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.txt"');
20     }
21
22     public function test_page_pdf_export()
23     {
24         $page = Page::first();
25         $this->asEditor();
26
27         $resp = $this->get($page->getUrl('/export/pdf'));
28         $resp->assertStatus(200);
29         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.pdf"');
30     }
31
32     public function test_page_html_export()
33     {
34         $page = Page::first();
35         $this->asEditor();
36
37         $resp = $this->get($page->getUrl('/export/html'));
38         $resp->assertStatus(200);
39         $resp->assertSee($page->name);
40         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.html"');
41     }
42
43     public function test_book_text_export()
44     {
45         $page = Page::first();
46         $book = $page->book;
47         $this->asEditor();
48
49         $resp = $this->get($book->getUrl('/export/plaintext'));
50         $resp->assertStatus(200);
51         $resp->assertSee($book->name);
52         $resp->assertSee($page->name);
53         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.txt"');
54     }
55
56     public function test_book_pdf_export()
57     {
58         $page = Page::first();
59         $book = $page->book;
60         $this->asEditor();
61
62         $resp = $this->get($book->getUrl('/export/pdf'));
63         $resp->assertStatus(200);
64         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.pdf"');
65     }
66
67     public function test_book_html_export()
68     {
69         $page = Page::first();
70         $book = $page->book;
71         $this->asEditor();
72
73         $resp = $this->get($book->getUrl('/export/html'));
74         $resp->assertStatus(200);
75         $resp->assertSee($book->name);
76         $resp->assertSee($page->name);
77         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.html"');
78     }
79
80     public function test_book_html_export_shows_chapter_descriptions()
81     {
82         $chapterDesc = 'My custom test chapter description ' . str_random(12);
83         $chapter = Chapter::query()->first();
84         $chapter->description = $chapterDesc;
85         $chapter->save();
86
87         $book = $chapter->book;
88         $this->asEditor();
89
90         $resp = $this->get($book->getUrl('/export/html'));
91         $resp->assertSee($chapterDesc);
92     }
93
94     public function test_chapter_text_export()
95     {
96         $chapter = Chapter::first();
97         $page = $chapter->pages[0];
98         $this->asEditor();
99
100         $resp = $this->get($chapter->getUrl('/export/plaintext'));
101         $resp->assertStatus(200);
102         $resp->assertSee($chapter->name);
103         $resp->assertSee($page->name);
104         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.txt"');
105     }
106
107     public function test_chapter_pdf_export()
108     {
109         $chapter = Chapter::first();
110         $this->asEditor();
111
112         $resp = $this->get($chapter->getUrl('/export/pdf'));
113         $resp->assertStatus(200);
114         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.pdf"');
115     }
116
117     public function test_chapter_html_export()
118     {
119         $chapter = Chapter::first();
120         $page = $chapter->pages[0];
121         $this->asEditor();
122
123         $resp = $this->get($chapter->getUrl('/export/html'));
124         $resp->assertStatus(200);
125         $resp->assertSee($chapter->name);
126         $resp->assertSee($page->name);
127         $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.html"');
128     }
129
130     public function test_page_html_export_contains_custom_head_if_set()
131     {
132         $page = Page::first();
133
134         $customHeadContent = "<style>p{color: red;}</style>";
135         $this->setSettings(['app-custom-head' => $customHeadContent]);
136
137         $resp = $this->asEditor()->get($page->getUrl('/export/html'));
138         $resp->assertSee($customHeadContent);
139     }
140
141     public function test_page_html_export_use_absolute_dates()
142     {
143         $page = Page::first();
144
145         $resp = $this->asEditor()->get($page->getUrl('/export/html'));
146         $resp->assertSee($page->created_at->toDayDateTimeString());
147         $resp->assertDontSee($page->created_at->diffForHumans());
148         $resp->assertSee($page->updated_at->toDayDateTimeString());
149         $resp->assertDontSee($page->updated_at->diffForHumans());
150     }
151
152     public function test_page_export_sets_right_data_type_for_svg_embeds()
153     {
154         $page = Page::first();
155         $page->html = '<img src="http://example.com/image.svg">';
156         $page->save();
157
158         $this->asEditor();
159         $this->mockHttpFetch('<svg></svg>');
160         $resp = $this->get($page->getUrl('/export/html'));
161         $resp->assertStatus(200);
162         $resp->assertSee('<img src="data:image/svg+xml;base64');
163     }
164
165 }
Morty Proxy This is a proxified and sanitized view of the page, visit original site.