]> BookStack Code Mirror - bookstack/commitdiff
Added regenerate-references command test
authorDan Brown <redacted>
Wed, 17 Aug 2022 15:59:23 +0000 (16:59 +0100)
committerDan Brown <redacted>
Wed, 17 Aug 2022 15:59:23 +0000 (16:59 +0100)
Also updated model resolvers to only fetch model ID, to prevent bringing
back way more data from database than desired.

app/References/ModelResolvers/BookLinkModelResolver.php
app/References/ModelResolvers/BookshelfLinkModelResolver.php
app/References/ModelResolvers/ChapterLinkModelResolver.php
app/References/ModelResolvers/PageLinkModelResolver.php
app/References/ModelResolvers/PagePermalinkModelResolver.php
app/References/ReferenceService.php
tests/Commands/RegenerateReferencesCommandTest.php [new file with mode: 0644]

index f33d97b8405a7b469d49ed911d91de83fbfa373e..459b13644e985cf5b2a5d89754ab41fe1e37fc7c 100644 (file)
@@ -19,7 +19,7 @@ class BookLinkModelResolver implements CrossLinkModelResolver
         $bookSlug = $matches[1];
 
         /** @var ?Book $model */
-        $model = Book::query()->where('slug', '=',  $bookSlug)->first();
+        $model = Book::query()->where('slug', '=',  $bookSlug)->first(['id']);
 
         return $model;
     }
index ca5b8ca5f8796fe5f090729d6c2c4f31e78a713b..7d163668989efee9af960131e5f8ea270deafc80 100644 (file)
@@ -19,7 +19,7 @@ class BookshelfLinkModelResolver implements CrossLinkModelResolver
         $shelfSlug = $matches[1];
 
         /** @var ?Bookshelf $model */
-        $model = Bookshelf::query()->where('slug', '=',  $shelfSlug)->first();
+        $model = Bookshelf::query()->where('slug', '=',  $shelfSlug)->first(['id']);
 
         return $model;
     }
index e15dba2588f39206fef88a4d970f52918b2f0990..fbe75c4f644771beff1d2411342a2c086aea87e2 100644 (file)
@@ -20,7 +20,7 @@ class ChapterLinkModelResolver implements CrossLinkModelResolver
         $chapterSlug = $matches[2];
 
         /** @var ?Chapter $model */
-        $model = Chapter::query()->whereSlugs($bookSlug, $chapterSlug)->first();
+        $model = Chapter::query()->whereSlugs($bookSlug, $chapterSlug)->first(['id']);
 
         return $model;
     }
index f22f2734b97a81f22aabeb4c3360eb4b25d2582e..ead17e0a9a5a11b00a1d420bbf6ac36a7b53b63e 100644 (file)
@@ -20,7 +20,7 @@ class PageLinkModelResolver implements CrossLinkModelResolver
         $pageSlug = $matches[2];
 
         /** @var ?Page $model */
-        $model = Page::query()->whereSlugs($bookSlug, $pageSlug)->first();
+        $model = Page::query()->whereSlugs($bookSlug, $pageSlug)->first(['id']);
 
         return $model;
     }
index 45396d54a624c9ef28cb93821a796f920b220a75..d59d41925d89e1488d2cc2540cb14c9bdb96deb1 100644 (file)
@@ -18,7 +18,7 @@ class PagePermalinkModelResolver implements CrossLinkModelResolver
 
         $id = intval($matches[1]);
         /** @var ?Page $model */
-        $model = Page::query()->find($id);
+        $model = Page::query()->find($id, ['id']);
 
         return $model;
     }
index 7a1cf2fedcc0e4a17c58610a03fed171c891ad5a..fd7f74ae11f1330c9a985fc5a7a639ef18ad402d 100644 (file)
@@ -23,7 +23,7 @@ class ReferenceService
     {
         Reference::query()
             ->where('from_type', '=', (new Page())->getMorphClass())
-            ->truncate();
+            ->delete();
 
         Page::query()->select(['id', 'html'])->chunk(100, function(Collection $pages) {
             $this->updateForPages($pages->all());
diff --git a/tests/Commands/RegenerateReferencesCommandTest.php b/tests/Commands/RegenerateReferencesCommandTest.php
new file mode 100644 (file)
index 0000000..8906474
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+namespace Tests\Commands;
+
+use BookStack\Entities\Models\Page;
+use Illuminate\Support\Facades\DB;
+use Tests\TestCase;
+
+class RegenerateReferencesCommandTest extends TestCase
+{
+    public function test_regenerate_references_command()
+    {
+        /** @var Page $page */
+        $page = Page::query()->first();
+        $book = $page->book;
+
+        $page->html = '<a href="' . $book->getUrl() . '">Book Link</a>';
+        $page->save();
+
+        DB::table('references')->delete();
+
+        $this->artisan('bookstack:regenerate-references')
+            ->assertExitCode(0);
+
+        $this->assertDatabaseHas('references', [
+            'from_id' => $page->id,
+            'from_type' => $page->getMorphClass(),
+            'to_id' => $book->id,
+            'to_type' => $book->getMorphClass(),
+        ]);
+    }
+}