diff --git a/Changelog.md b/Changelog.md index e96ed8bed562a4036b3cd727d98ad8f104b1da46..a1c9a5496fcd31e30a0189854354ddaf1dbfc698 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,6 +8,7 @@ * Prevent duplicate mention notifications when the post is received twice [#7721](https://github.com/diaspora/diaspora/pull/7721) * Fixed a compatiblitiy issue with non-diaspora\* webfingers [#7718](https://github.com/diaspora/diaspora/pull/7718) * Don't retry federation for accounts without a valid public key [#7717](https://github.com/diaspora/diaspora/pull/7717) +* Fix stream generation for tagged posts with many followed tags [#7715](https://github.com/diaspora/diaspora/pull/7715) ## Features * Add basic html5 audio/video embedding support [#6418](https://github.com/diaspora/diaspora/pull/6418) diff --git a/app/models/status_message.rb b/app/models/status_message.rb index a44afca90a726c2af5ef324cbcaa3b750cd2a56c..17d267797f924ef6b43f71175967b24647686925 100644 --- a/app/models/status_message.rb +++ b/app/models/status_message.rb @@ -46,7 +46,7 @@ class StatusMessage < Post end def self.public_tag_stream(tag_ids) - all_public.tag_stream(tag_ids) + all_public.select("DISTINCT #{table_name}.*").tag_stream(tag_ids) end def self.tag_stream(tag_ids) diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb index 8dfca6f67e9e5f4952a8e114faf772d766f1c41f..bd9d809ce401b1c1d80fea4c4480c004fd5b0a1f 100644 --- a/spec/models/status_message_spec.rb +++ b/spec/models/status_message_spec.rb @@ -51,6 +51,14 @@ describe StatusMessage, type: :model do it "returns public status messages tagged with the tag" do expect(StatusMessage.public_tag_stream([@tag_id])).to eq([@status_message_1]) end + + it "returns a post with two tags only once" do + status_message = FactoryGirl.create(:status_message, text: "#hashtag #test", public: true) + test_tag_id = ActsAsTaggableOn::Tag.where(name: "test").first.id + + expect(StatusMessage.public_tag_stream([@tag_id, test_tag_id])) + .to match_array([@status_message_1, status_message]) + end end describe ".user_tag_stream" do