86 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Tests\Exports;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use BookStack\Entities\Models\Book;
							 | 
						||
| 
								 | 
							
								use Tests\TestCase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MarkdownExportTest extends TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function test_page_markdown_export()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $page = $this->entities->page();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $resp = $this->asEditor()->get($page->getUrl('/export/markdown'));
							 | 
						||
| 
								 | 
							
								        $resp->assertStatus(200);
							 | 
						||
| 
								 | 
							
								        $resp->assertSee($page->name);
							 | 
						||
| 
								 | 
							
								        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.md"');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function test_page_markdown_export_uses_existing_markdown_if_apparent()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $page = $this->entities->page()->forceFill([
							 | 
						||
| 
								 | 
							
								            'markdown' => '# A header',
							 | 
						||
| 
								 | 
							
								            'html'     => '<h1>Dogcat</h1>',
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $page->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $resp = $this->asEditor()->get($page->getUrl('/export/markdown'));
							 | 
						||
| 
								 | 
							
								        $resp->assertSee('A header');
							 | 
						||
| 
								 | 
							
								        $resp->assertDontSee('Dogcat');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function test_page_markdown_export_converts_html_where_no_markdown()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $page = $this->entities->page()->forceFill([
							 | 
						||
| 
								 | 
							
								            'markdown' => '',
							 | 
						||
| 
								 | 
							
								            'html'     => '<h1>Dogcat</h1><p>Some <strong>bold</strong> text</p>',
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $page->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $resp = $this->asEditor()->get($page->getUrl('/export/markdown'));
							 | 
						||
| 
								 | 
							
								        $resp->assertSee("# Dogcat\n\nSome **bold** text");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function test_chapter_markdown_export()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $chapter = $this->entities->chapter();
							 | 
						||
| 
								 | 
							
								        $page = $chapter->pages()->first();
							 | 
						||
| 
								 | 
							
								        $resp = $this->asEditor()->get($chapter->getUrl('/export/markdown'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $resp->assertSee('# ' . $chapter->name);
							 | 
						||
| 
								 | 
							
								        $resp->assertSee('# ' . $page->name);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function test_book_markdown_export()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $book = Book::query()->whereHas('pages')->whereHas('chapters')->first();
							 | 
						||
| 
								 | 
							
								        $chapter = $book->chapters()->first();
							 | 
						||
| 
								 | 
							
								        $page = $chapter->pages()->first();
							 | 
						||
| 
								 | 
							
								        $resp = $this->asEditor()->get($book->getUrl('/export/markdown'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $resp->assertSee('# ' . $book->name);
							 | 
						||
| 
								 | 
							
								        $resp->assertSee('# ' . $chapter->name);
							 | 
						||
| 
								 | 
							
								        $resp->assertSee('# ' . $page->name);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function test_book_markdown_export_concats_immediate_pages_with_newlines()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        /** @var Book $book */
							 | 
						||
| 
								 | 
							
								        $book = Book::query()->whereHas('pages')->first();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->asEditor()->get($book->getUrl('/create-page'));
							 | 
						||
| 
								 | 
							
								        $this->get($book->getUrl('/create-page'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        [$pageA, $pageB] = $book->pages()->where('chapter_id', '=', 0)->get();
							 | 
						||
| 
								 | 
							
								        $pageA->html = '<p>hello tester</p>';
							 | 
						||
| 
								 | 
							
								        $pageA->save();
							 | 
						||
| 
								 | 
							
								        $pageB->name = 'The second page in this test';
							 | 
						||
| 
								 | 
							
								        $pageB->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $resp = $this->get($book->getUrl('/export/markdown'));
							 | 
						||
| 
								 | 
							
								        $resp->assertDontSee('hello tester# The second page in this test');
							 | 
						||
| 
								 | 
							
								        $resp->assertSee("hello tester\n\n# The second page in this test");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |