0
0
Fork 0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-04-27 21:36:18 +00:00

Fixed page copying not retaining content

Was when there was no markdown content.
Added tests to cover both HTML and markdown scenarios.
Also removed old console.log

Related to 
This commit is contained in:
Dan Brown 2021-01-09 19:39:09 +00:00
parent 831f441879
commit 526be33ab2
No known key found for this signature in database
GPG key ID: 46D9F943C24A2EF9
4 changed files with 92 additions and 71 deletions
app/Entities/Repos
resources/js/components
tests/Entity

View file

@ -210,7 +210,7 @@ class PageRepo
}
$pageContent = new PageContent($page);
if (isset($input['markdown'])) {
if (!empty($input['markdown'] ?? '')) {
$pageContent->setNewMarkdown($input['markdown']);
} else {
$pageContent->setNewHTML($input['html']);

View file

@ -74,7 +74,6 @@ class PageEditor {
}
setInitialFocus() {
console.log({'HAS': this.hasDefaultTitle});
if (this.hasDefaultTitle) {
return this.titleElem.select();
}

View file

@ -54,4 +54,95 @@ class PageTest extends TestCase
$redirectReq = $this->get($deleteReq->baseResponse->headers->get('location'));
$redirectReq->assertNotificationContains('Page Successfully Deleted');
}
public function test_page_copy()
{
$page = Page::first();
$page->html = '<p>This is some test content</p>';
$page->save();
$currentBook = $page->book;
$newBook = Book::where('id', '!=', $currentBook->id)->first();
$resp = $this->asEditor()->get($page->getUrl('/copy'));
$resp->assertSee('Copy Page');
$movePageResp = $this->post($page->getUrl('/copy'), [
'entity_selection' => 'book:' . $newBook->id,
'name' => 'My copied test page'
]);
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
$movePageResp->assertRedirect($pageCopy->getUrl());
$this->assertTrue($pageCopy->book->id == $newBook->id, 'Page was copied to correct book');
$this->assertStringContainsString('This is some test content', $pageCopy->html);
}
public function test_page_copy_with_markdown_has_both_html_and_markdown()
{
$page = Page::first();
$page->html = '<h1>This is some test content</h1>';
$page->markdown = '# This is some test content';
$page->save();
$newBook = Book::where('id', '!=', $page->book->id)->first();
$this->asEditor()->post($page->getUrl('/copy'), [
'entity_selection' => 'book:' . $newBook->id,
'name' => 'My copied test page'
]);
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
$this->assertStringContainsString('This is some test content', $pageCopy->html);
$this->assertEquals('# This is some test content', $pageCopy->markdown);
}
public function test_page_copy_with_no_destination()
{
$page = Page::first();
$currentBook = $page->book;
$resp = $this->asEditor()->get($page->getUrl('/copy'));
$resp->assertSee('Copy Page');
$movePageResp = $this->post($page->getUrl('/copy'), [
'name' => 'My copied test page'
]);
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
$movePageResp->assertRedirect($pageCopy->getUrl());
$this->assertTrue($pageCopy->book->id == $currentBook->id, 'Page was copied to correct book');
$this->assertTrue($pageCopy->id !== $page->id, 'Page copy is not the same instance');
}
public function test_page_can_be_copied_without_edit_permission()
{
$page = Page::first();
$currentBook = $page->book;
$newBook = Book::where('id', '!=', $currentBook->id)->first();
$viewer = $this->getViewer();
$resp = $this->actingAs($viewer)->get($page->getUrl());
$resp->assertDontSee($page->getUrl('/copy'));
$newBook->owned_by = $viewer->id;
$newBook->save();
$this->giveUserPermissions($viewer, ['page-create-own']);
$this->regenEntityPermissions($newBook);
$resp = $this->actingAs($viewer)->get($page->getUrl());
$resp->assertSee($page->getUrl('/copy'));
$movePageResp = $this->post($page->getUrl('/copy'), [
'entity_selection' => 'book:' . $newBook->id,
'name' => 'My copied test page'
]);
$movePageResp->assertRedirect();
$this->assertDatabaseHas('pages', [
'name' => 'My copied test page',
'created_by' => $viewer->id,
'book_id' => $newBook->id,
]);
}
}

View file

@ -239,73 +239,4 @@ class SortTest extends TestCase
$checkResp->assertSee($newBook->name);
}
public function test_page_copy()
{
$page = Page::first();
$currentBook = $page->book;
$newBook = Book::where('id', '!=', $currentBook->id)->first();
$resp = $this->asEditor()->get($page->getUrl('/copy'));
$resp->assertSee('Copy Page');
$movePageResp = $this->post($page->getUrl('/copy'), [
'entity_selection' => 'book:' . $newBook->id,
'name' => 'My copied test page'
]);
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
$movePageResp->assertRedirect($pageCopy->getUrl());
$this->assertTrue($pageCopy->book->id == $newBook->id, 'Page was copied to correct book');
}
public function test_page_copy_with_no_destination()
{
$page = Page::first();
$currentBook = $page->book;
$resp = $this->asEditor()->get($page->getUrl('/copy'));
$resp->assertSee('Copy Page');
$movePageResp = $this->post($page->getUrl('/copy'), [
'name' => 'My copied test page'
]);
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
$movePageResp->assertRedirect($pageCopy->getUrl());
$this->assertTrue($pageCopy->book->id == $currentBook->id, 'Page was copied to correct book');
$this->assertTrue($pageCopy->id !== $page->id, 'Page copy is not the same instance');
}
public function test_page_can_be_copied_without_edit_permission()
{
$page = Page::first();
$currentBook = $page->book;
$newBook = Book::where('id', '!=', $currentBook->id)->first();
$viewer = $this->getViewer();
$resp = $this->actingAs($viewer)->get($page->getUrl());
$resp->assertDontSee($page->getUrl('/copy'));
$newBook->owned_by = $viewer->id;
$newBook->save();
$this->giveUserPermissions($viewer, ['page-create-own']);
$this->regenEntityPermissions($newBook);
$resp = $this->actingAs($viewer)->get($page->getUrl());
$resp->assertSee($page->getUrl('/copy'));
$movePageResp = $this->post($page->getUrl('/copy'), [
'entity_selection' => 'book:' . $newBook->id,
'name' => 'My copied test page'
]);
$movePageResp->assertRedirect();
$this->assertDatabaseHas('pages', [
'name' => 'My copied test page',
'created_by' => $viewer->id,
'book_id' => $newBook->id,
]);
}
}