Merge pull request #4225 from tgxworld/fix_a_gazillion_tag_custom_fields

FIX: Ensure unique fields in `TopicList.preloaded_custom_fields`.
This commit is contained in:
Guo Xiang Tan 2016-05-16 18:05:40 +08:00
commit 8c9de2198d
3 changed files with 43 additions and 9 deletions

View File

@ -4,7 +4,7 @@ class TopicList
include ActiveModel::Serialization
cattr_accessor :preloaded_custom_fields
self.preloaded_custom_fields = []
self.preloaded_custom_fields = Set.new
attr_accessor :more_topics_url,
:prev_topics_url,
@ -20,6 +20,8 @@ class TopicList
@current_user = current_user
@topics_input = topics
@opts = opts || {}
preloaded_custom_fields << DiscourseTagging::TAGS_FIELD_NAME if SiteSetting.tagging_enabled
end
def preload_key
@ -81,11 +83,8 @@ class TopicList
ft.topic_list = self
end
preload_custom_fields = TopicList.preloaded_custom_fields
preload_custom_fields << DiscourseTagging::TAGS_FIELD_NAME if SiteSetting.tagging_enabled
if preload_custom_fields.present?
Topic.preload_custom_fields(@topics, preload_custom_fields)
if preloaded_custom_fields.present?
Topic.preload_custom_fields(@topics, preloaded_custom_fields)
end
@topics

View File

@ -0,0 +1,35 @@
require 'rails_helper'
describe TopicList do
let!(:topic) { Fabricate(:topic) }
let(:user) { topic.user }
let(:topic_list) { TopicList.new("liked", user, [topic]) }
after do
TopicList.preloaded_custom_fields.clear
end
describe ".preloaded_custom_fields" do
it "should return a unique set of values" do
TopicList.preloaded_custom_fields << "test"
TopicList.preloaded_custom_fields << "test"
TopicList.preloaded_custom_fields << "apple"
expect(TopicList.preloaded_custom_fields).to eq(Set.new(%w{test apple}))
end
end
context "DiscourseTagging enabled" do
before do
SiteSetting.tagging_enabled = true
end
after do
SiteSetting.tagging_enabled = false
end
it "should add tags to preloaded custom fields" do
expect(topic_list.preloaded_custom_fields).to eq(Set.new([DiscourseTagging::TAGS_FIELD_NAME]))
end
end
end