From 413cac23aee584b0831f3e3fba79e91ee6fac7cf Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Fri, 1 May 2020 23:41:47 +0100 Subject: [PATCH] Added command to regenerate comment content --- app/Actions/CommentRepo.php | 2 +- .../Commands/RegenerateCommentContent.php | 61 +++++++++++++++++++ .../Commands/RegeneratePermissions.php | 2 - tests/CommandsTest.php | 24 ++++++++ 4 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 app/Console/Commands/RegenerateCommentContent.php diff --git a/app/Actions/CommentRepo.php b/app/Actions/CommentRepo.php index 0d8a12ce9..4dfe3ddb6 100644 --- a/app/Actions/CommentRepo.php +++ b/app/Actions/CommentRepo.php @@ -70,7 +70,7 @@ class CommentRepo /** * Convert the given comment markdown text to HTML. */ - protected function commentToHtml(string $commentText): string + public function commentToHtml(string $commentText): string { $converter = new CommonMarkConverter([ 'html_input' => 'strip', diff --git a/app/Console/Commands/RegenerateCommentContent.php b/app/Console/Commands/RegenerateCommentContent.php new file mode 100644 index 000000000..587a5edb3 --- /dev/null +++ b/app/Console/Commands/RegenerateCommentContent.php @@ -0,0 +1,61 @@ +commentRepo = $commentRepo; + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $connection = \DB::getDefaultConnection(); + if ($this->option('database') !== null) { + \DB::setDefaultConnection($this->option('database')); + } + + Comment::query()->chunk(100, function ($comments) { + foreach ($comments as $comment) { + $comment->html = $this->commentRepo->commentToHtml($comment->text); + $comment->save(); + } + }); + + \DB::setDefaultConnection($connection); + $this->comment('Comment HTML content has been regenerated'); + } +} diff --git a/app/Console/Commands/RegeneratePermissions.php b/app/Console/Commands/RegeneratePermissions.php index 430b8fcb0..4fde08e6b 100644 --- a/app/Console/Commands/RegeneratePermissions.php +++ b/app/Console/Commands/RegeneratePermissions.php @@ -30,8 +30,6 @@ class RegeneratePermissions extends Command /** * Create a new command instance. - * - * @param \BookStack\Auth\\BookStack\Auth\Permissions\PermissionService $permissionService */ public function __construct(PermissionService $permissionService) { diff --git a/tests/CommandsTest.php b/tests/CommandsTest.php index e55b047d4..bfc0ac0eb 100644 --- a/tests/CommandsTest.php +++ b/tests/CommandsTest.php @@ -1,5 +1,7 @@ expectException(RuntimeException::class); $this->artisan('bookstack:update-url https://cats.example.com'); } + + public function test_regenerate_comment_content_command() + { + Comment::query()->forceCreate([ + 'html' => 'some_old_content', + 'text' => 'some_fresh_content', + ]); + + $this->assertDatabaseHas('comments', [ + 'html' => 'some_old_content', + ]); + + $exitCode = \Artisan::call('bookstack:regenerate-comment-content'); + $this->assertTrue($exitCode === 0, 'Command executed successfully'); + + $this->assertDatabaseMissing('comments', [ + 'html' => 'some_old_content', + ]); + $this->assertDatabaseHas('comments', [ + 'html' => "

some_fresh_content

\n", + ]); + } }