1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2024-11-23 11:22:33 +01:00

Comments: Fixed wrong identification of parent comment

Would cause comment reply notifications to not be sent to expected user.
Updated test to cover problem case.

For #4548
This commit is contained in:
Dan Brown 2023-09-15 13:38:02 +01:00
parent 99eb3e5f71
commit 45b8d6cd0c
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
2 changed files with 14 additions and 4 deletions

View File

@ -12,10 +12,12 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
* @property int $id
* @property string $text
* @property string $html
* @property int|null $parent_id
* @property int|null $parent_id - Relates to local_id, not id
* @property int $local_id
* @property string $entity_type
* @property int $entity_id
* @property int $created_by
* @property int $updated_by
*/
class Comment extends Model implements Loggable
{
@ -38,7 +40,9 @@ class Comment extends Model implements Loggable
*/
public function parent(): BelongsTo
{
return $this->belongsTo(Comment::class);
return $this->belongsTo(Comment::class, 'parent_id', 'local_id', 'parent')
->where('entity_type', '=', $this->entity_type)
->where('entity_id', '=', $this->entity_id);
}
/**

View File

@ -210,16 +210,22 @@ class WatchTest extends TestCase
$prefs = new UserNotificationPreferences($editor);
$prefs->updateFromSettingsArray(['comment-replies' => 'true']);
// Create some existing comments to pad IDs to help potentially error
// on mis-identification of parent via ids used.
Comment::factory()->count(5)
->for($entities['page'], 'entity')
->create(['created_by' => $this->users->admin()->id]);
$notifications = Notification::fake();
$this->actingAs($editor)->post("/comment/{$entities['page']->id}", [
'text' => 'My new comment'
]);
$comment = $entities['page']->comments()->first();
$comment = $entities['page']->comments()->orderBy('id', 'desc')->first();
$this->asAdmin()->post("/comment/{$entities['page']->id}", [
'text' => 'My new comment response',
'parent_id' => $comment->id,
'parent_id' => $comment->local_id,
]);
$notifications->assertSentTo($editor, CommentCreationNotification::class);
}