FIX: allow both meta_data and custom_fields when creating a topic

For some reasons, we have two ways of associating "custom fields" to a new topic:
using 'meta_data' and 'custom_fields'.

However, if we were to provide both arguments, the 'meta_data' would be overwritten
by any 'custom_fields' provided.

This commit ensures we can use both and merges the 'custom_fields' with the 'meta_data'.
This commit is contained in:
Régis Hanol 2020-02-05 10:32:03 +01:00
parent 5133e03b99
commit 13d4b05963
2 changed files with 14 additions and 1 deletions

View File

@ -35,8 +35,9 @@ class TopicCreator
def create
topic = Topic.new(setup_topic_params)
setup_tags(topic)
if fields = @opts[:custom_fields]
topic.custom_fields = fields
topic.custom_fields.merge!(fields)
end
DiscourseEvent.trigger(:before_create_topic, topic, self)

View File

@ -36,6 +36,18 @@ describe TopicCreator do
expect(TopicCreator.create(moderator, Guardian.new(moderator), valid_attrs)).to be_valid
end
it "supports both meta_data and custom_fields" do
opts = valid_attrs.merge(
meta_data: { import_topic_id: "foo" },
custom_fields: { import_id: "bar" }
)
topic = TopicCreator.create(admin, Guardian.new(admin), opts)
expect(topic.custom_fields["import_topic_id"]).to eq("foo")
expect(topic.custom_fields["import_id"]).to eq("bar")
end
context 'regular user' do
before { SiteSetting.min_trust_to_create_topic = TrustLevel[0] }