]> BookStack Code Mirror - bookstack/commitdiff
Fixed restore revision save order, Added restore summary testing
authorDan Brown <redacted>
Sat, 2 Jan 2021 16:42:05 +0000 (16:42 +0000)
committerDan Brown <redacted>
Sat, 2 Jan 2021 16:42:05 +0000 (16:42 +0000)
Found during review of #2353, A revision would be stored before a
restore which would result with a duplicate revision and the new summary
would be assigned against the wrong content.
This change saves the revison after restore and adds test to check the
content and summary text.

app/Entities/Repos/PageRepo.php
resources/lang/en/entities.php
tests/Entity/PageRevisionTest.php

index 60ae855109a469ab9e3b94508c0a57c85af0b1e7..721485b11f0d7faa16e81c574e92cf7a666266e7 100644 (file)
@@ -220,7 +220,7 @@ class PageRepo
     /**
      * Saves a page revision into the system.
      */
-    protected function savePageRevision(Page $page, string $summary = null)
+    protected function savePageRevision(Page $page, string $summary = null): PageRevision
     {
         $revision = new PageRevision($page->getAttributes());
 
@@ -287,8 +287,6 @@ class PageRepo
     {
         $page->revision_count++;
         $revision = $page->revisions()->where('id', '=', $revisionId)->first();
-        $summary = trans('entities.pages_revision_restored_from', ['id' => strval($revisionId), 'summary' => $revision->summary]);
-        $this->savePageRevision($page, $summary);
 
         $page->fill($revision->toArray());
         $content = new PageContent($page);
@@ -296,8 +294,11 @@ class PageRepo
         $page->updated_by = user()->id;
         $page->refreshSlug();
         $page->save();
-
         $page->indexForSearch();
+
+        $summary = trans('entities.pages_revision_restored_from', ['id' => strval($revisionId), 'summary' => $revision->summary]);
+        $this->savePageRevision($page, $summary);
+
         Activity::addForEntity($page, ActivityType::PAGE_RESTORE);
         return $page;
     }
index f668c618162c413b236c56f224bc8a5806d0ec88..6c0980fab380d430f50d12ca8928f69be522b203 100644 (file)
@@ -210,7 +210,7 @@ return [
     'pages_revisions' => 'Page Revisions',
     'pages_revisions_named' => 'Page Revisions for :pageName',
     'pages_revision_named' => 'Page Revision for :pageName',
-    'pages_revision_restored_from' => 'Restored from #:id ":summary"',
+    'pages_revision_restored_from' => 'Restored from #:id; :summary',
     'pages_revisions_created_by' => 'Created By',
     'pages_revisions_date' => 'Revision Date',
     'pages_revisions_number' => '#',
index 6eaea129c0ace0a333393bc853b09dc2fb9934f2..68a8f01a9ef347a362b545b7db633435bc26b33f 100644 (file)
@@ -66,6 +66,28 @@ class PageRevisionTest extends TestCase
         $pageView->assertSee('def456');
     }
 
+    public function test_page_revision_restore_sets_new_revision_with_summary()
+    {
+        $this->asEditor();
+
+        $pageRepo = app(PageRepo::class);
+        $page = Page::first();
+        $pageRepo->update($page, ['name' => 'updated page abc123', 'html' => '<p>new contente def456</p>', 'summary' => 'My first update']);
+        $pageRepo->update($page, ['name' => 'updated page again', 'html' => '<p>new content</p>', 'summary' => '']);
+        $page->refresh();
+
+        $revToRestore = $page->revisions()->where('name', 'like', '%abc123')->first();
+        $this->put($page->getUrl() . '/revisions/' . $revToRestore->id . '/restore');
+        $page->refresh();
+
+        $this->assertDatabaseHas('page_revisions', [
+            'page_id' => $page->id,
+            'text' => 'new contente def456',
+            'type' => 'version',
+            'summary' => "Restored from #{$revToRestore->id}; My first update",
+        ]);
+    }
+
     public function test_page_revision_count_increments_on_update()
     {
         $page = Page::first();