FIX: Hide live-loaded posts from ignored users

FIX: Hide live-loaded posts from ignored users

diff --git a/app/assets/javascripts/discourse/models/post-stream.js.es6 b/app/assets/javascripts/discourse/models/post-stream.js.es6
index a426fc2..51e5369 100644
--- a/app/assets/javascripts/discourse/models/post-stream.js.es6
+++ b/app/assets/javascripts/discourse/models/post-stream.js.es6
@@ -609,9 +609,14 @@ export default RestModel.extend({
         this.set("loadingLastPost", true);
         return this.findPostsByIds([postId])
           .then(posts => {
-            const ignoredUsers = this.get("currentUser.ignored_users");
+            const ignoredUsers =
+              Discourse.User.current() &&
+              Discourse.User.current().get("ignored_users");
             posts.forEach(p => {
-              if (ignoredUsers && ignoredUsers.includes(p.username)) return;
+              if (ignoredUsers && ignoredUsers.includes(p.username)) {
+                this.stream.removeObject(postId);
+                return;
+              }
               this.appendPost(p);
             });
           })
diff --git a/test/javascripts/models/post-stream-test.js.es6 b/test/javascripts/models/post-stream-test.js.es6
index c5153f1..eb99d81 100644
--- a/test/javascripts/models/post-stream-test.js.es6
+++ b/test/javascripts/models/post-stream-test.js.es6
@@ -803,12 +803,14 @@ QUnit.test("comitting and triggerNewPostInStream race condition", assert => {
 QUnit.test("triggerNewPostInStream for ignored posts", async assert => {
   const postStream = buildStream(280, [1]);
   const store = postStream.store;
-  postStream.currentUser = Discourse.User.create({
-    username: "eviltrout",
-    name: "eviltrout",
-    id: 321,
-    ignored_users: ["ignoreduser"]
-  });
+  Discourse.User.resetCurrent(
+    Discourse.User.create({
+      username: "eviltrout",
+      name: "eviltrout",
+      id: 321,
+      ignored_users: ["ignoreduser"]
+    })
+  );
 
   postStream.appendPost(store.createRecord("post", { id: 1, post_number: 1 }));
 
@@ -829,13 +831,31 @@ QUnit.test("triggerNewPostInStream for ignored posts", async assert => {
     .returns(Promise.resolve([post2]));
 
   await postStream.triggerNewPostInStream(101);
-  assert.equal(postStream.get("posts.length"), 2, "it added the regular post");
+  assert.equal(
+    postStream.posts.length,
+    2,
+    "it added the regular post to the posts"
+  );
+  assert.equal(
+    postStream.get("stream.length"),
+    2,
+    "it added the regular post to the stream"
+  );
 
   stub.restore();
   sandbox.stub(postStream, "findPostsByIds").returns(Promise.resolve([post3]));
 
-  postStream.triggerNewPostInStream(102);
-  assert.equal(postStream.posts.length, 2, "it does not add the ignored post");
+  await postStream.triggerNewPostInStream(102);
+  assert.equal(
+    postStream.posts.length,
+    2,
+    "it does not add the ignored post to the posts"
+  );
+  assert.equal(
+    postStream.stream.length,
+    2,
+    "it does not add the ignored post to the stream"
+  );
 });
 
 QUnit.test("postsWithPlaceholders", assert => {

GitHub sha: 4f1382a5

Can you explain why you did this instead of this.currentUser? They should be the same, and in the long term we want to remove Discourse.XYZ constants.

currentUser doesn’t get injected into models. It only gets injected into components, routes and controllers.

1 Like

In that case we should be passing the current user into the finder method instead

1 Like

This commit has been mentioned on Discourse Meta. There might be relevant details there: