mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-11-03 02:13:16 +03:00 
			
		
		
		
	Added regenerate-references command test
Also updated model resolvers to only fetch model ID, to prevent bringing back way more data from database than desired.
This commit is contained in:
		@@ -19,7 +19,7 @@ class BookLinkModelResolver implements CrossLinkModelResolver
 | 
				
			|||||||
        $bookSlug = $matches[1];
 | 
					        $bookSlug = $matches[1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /** @var ?Book $model */
 | 
					        /** @var ?Book $model */
 | 
				
			||||||
        $model = Book::query()->where('slug', '=',  $bookSlug)->first();
 | 
					        $model = Book::query()->where('slug', '=',  $bookSlug)->first(['id']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $model;
 | 
					        return $model;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@ class BookshelfLinkModelResolver implements CrossLinkModelResolver
 | 
				
			|||||||
        $shelfSlug = $matches[1];
 | 
					        $shelfSlug = $matches[1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /** @var ?Bookshelf $model */
 | 
					        /** @var ?Bookshelf $model */
 | 
				
			||||||
        $model = Bookshelf::query()->where('slug', '=',  $shelfSlug)->first();
 | 
					        $model = Bookshelf::query()->where('slug', '=',  $shelfSlug)->first(['id']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $model;
 | 
					        return $model;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ class ChapterLinkModelResolver implements CrossLinkModelResolver
 | 
				
			|||||||
        $chapterSlug = $matches[2];
 | 
					        $chapterSlug = $matches[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /** @var ?Chapter $model */
 | 
					        /** @var ?Chapter $model */
 | 
				
			||||||
        $model = Chapter::query()->whereSlugs($bookSlug, $chapterSlug)->first();
 | 
					        $model = Chapter::query()->whereSlugs($bookSlug, $chapterSlug)->first(['id']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $model;
 | 
					        return $model;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ class PageLinkModelResolver implements CrossLinkModelResolver
 | 
				
			|||||||
        $pageSlug = $matches[2];
 | 
					        $pageSlug = $matches[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /** @var ?Page $model */
 | 
					        /** @var ?Page $model */
 | 
				
			||||||
        $model = Page::query()->whereSlugs($bookSlug, $pageSlug)->first();
 | 
					        $model = Page::query()->whereSlugs($bookSlug, $pageSlug)->first(['id']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $model;
 | 
					        return $model;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ class PagePermalinkModelResolver implements CrossLinkModelResolver
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $id = intval($matches[1]);
 | 
					        $id = intval($matches[1]);
 | 
				
			||||||
        /** @var ?Page $model */
 | 
					        /** @var ?Page $model */
 | 
				
			||||||
        $model = Page::query()->find($id);
 | 
					        $model = Page::query()->find($id, ['id']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $model;
 | 
					        return $model;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ class ReferenceService
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        Reference::query()
 | 
					        Reference::query()
 | 
				
			||||||
            ->where('from_type', '=', (new Page())->getMorphClass())
 | 
					            ->where('from_type', '=', (new Page())->getMorphClass())
 | 
				
			||||||
            ->truncate();
 | 
					            ->delete();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Page::query()->select(['id', 'html'])->chunk(100, function(Collection $pages) {
 | 
					        Page::query()->select(['id', 'html'])->chunk(100, function(Collection $pages) {
 | 
				
			||||||
            $this->updateForPages($pages->all());
 | 
					            $this->updateForPages($pages->all());
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										32
									
								
								tests/Commands/RegenerateReferencesCommandTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								tests/Commands/RegenerateReferencesCommandTest.php
									
									
									
									
									
										Normal file
									
								
							@@ -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(),
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user