Added deletion of revisions on page delete

Added testing to cover.
Closes #2668
This commit is contained in:
Dan Brown 2021-05-26 16:40:56 +01:00
parent d326417edc
commit eb76e882c5
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 43 additions and 3 deletions

View File

@ -75,11 +75,23 @@ class Page extends BookChild
/**
* Get the associated page revisions, ordered by created date.
* @return mixed
* Only provides actual saved page revision instances, Not drafts.
*/
public function revisions()
public function revisions(): HasMany
{
return $this->hasMany(PageRevision::class)->where('type', '=', 'version')->orderBy('created_at', 'desc')->orderBy('id', 'desc');
return $this->allRevisions()
->where('type', '=', 'version')
->orderBy('created_at', 'desc')
->orderBy('id', 'desc');
}
/**
* Get all revision instances assigned to this page.
* Includes all types of revisions.
*/
public function allRevisions(): HasMany
{
return $this->hasMany(PageRevision::class);
}
/**

View File

@ -151,6 +151,7 @@ class TrashCan
protected function destroyPage(Page $page): int
{
$this->destroyCommonRelations($page);
$page->allRevisions()->delete();
// Delete Attached Files
$attachmentService = app(AttachmentService::class);

View File

@ -71,6 +71,33 @@ class PageTest extends TestCase
$redirectReq->assertNotificationContains('Page Successfully Deleted');
}
public function test_page_full_delete_removes_all_revisions()
{
/** @var Page $page */
$page = Page::query()->first();
$page->revisions()->create([
'html' => '<p>ducks</p>',
'name' => 'my page revision',
'type' => 'draft',
]);
$page->revisions()->create([
'html' => '<p>ducks</p>',
'name' => 'my page revision',
'type' => 'revision',
]);
$this->assertDatabaseHas('page_revisions', [
'page_id' => $page->id,
]);
$this->asEditor()->delete($page->getUrl());
$this->asAdmin()->post('/settings/recycle-bin/empty');
$this->assertDatabaseMissing('page_revisions', [
'page_id' => $page->id,
]);
}
public function test_page_copy()
{
$page = Page::first();