4 use BookStack\Entities\Chapter;
5 use BookStack\Entities\Page;
6 use BookStack\Uploads\HttpFetcher;
8 class ExportTest extends TestCase
11 public function test_page_text_export()
13 $page = Page::first();
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"');
22 public function test_page_pdf_export()
24 $page = Page::first();
27 $resp = $this->get($page->getUrl('/export/pdf'));
28 $resp->assertStatus(200);
29 $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.pdf"');
32 public function test_page_html_export()
34 $page = Page::first();
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"');
43 public function test_book_text_export()
45 $page = Page::first();
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"');
56 public function test_book_pdf_export()
58 $page = Page::first();
62 $resp = $this->get($book->getUrl('/export/pdf'));
63 $resp->assertStatus(200);
64 $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.pdf"');
67 public function test_book_html_export()
69 $page = Page::first();
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"');
80 public function test_book_html_export_shows_chapter_descriptions()
82 $chapterDesc = 'My custom test chapter description ' . str_random(12);
83 $chapter = Chapter::query()->first();
84 $chapter->description = $chapterDesc;
87 $book = $chapter->book;
90 $resp = $this->get($book->getUrl('/export/html'));
91 $resp->assertSee($chapterDesc);
94 public function test_chapter_text_export()
96 $chapter = Chapter::first();
97 $page = $chapter->pages[0];
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"');
107 public function test_chapter_pdf_export()
109 $chapter = Chapter::first();
112 $resp = $this->get($chapter->getUrl('/export/pdf'));
113 $resp->assertStatus(200);
114 $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.pdf"');
117 public function test_chapter_html_export()
119 $chapter = Chapter::first();
120 $page = $chapter->pages[0];
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"');
130 public function test_page_html_export_contains_custom_head_if_set()
132 $page = Page::first();
134 $customHeadContent = "<style>p{color: red;}</style>";
135 $this->setSettings(['app-custom-head' => $customHeadContent]);
137 $resp = $this->asEditor()->get($page->getUrl('/export/html'));
138 $resp->assertSee($customHeadContent);
141 public function test_page_html_export_use_absolute_dates()
143 $page = Page::first();
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());
152 public function test_page_export_sets_right_data_type_for_svg_embeds()
154 $page = Page::first();
155 $page->html = '<img src="http://example.com/image.svg">';
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');