]> BookStack Code Mirror - bookstack/commitdiff
Comments: Fixed wrong identification of parent comment
authorDan Brown <redacted>
Fri, 15 Sep 2023 12:38:02 +0000 (13:38 +0100)
committerDan Brown <redacted>
Fri, 15 Sep 2023 12:38:02 +0000 (13:38 +0100)
Would cause comment reply notifications to not be sent to expected user.
Updated test to cover problem case.

For #4548

app/Activity/Models/Comment.php
tests/Activity/WatchTest.php

index bcbed6c56f03d7fd3dfe753b395c9dc6d2fc5d5e..6efa3df6ff0049a1a6ed3cac13cc092e5a62b470 100644 (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);
     }
 
     /**
index fa50d8c79f1d5e0d584784210460571fcaf28348..464886155f4ae12fb2aeda9b1864cc7127bc4d54 100644 (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);
     }