mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 11:44:49 +08:00
FIX: prevents creating post from impacting the app (#28518)
Create a topic can fail in many different ways and we don't want this to impact the rest of the application, the call will now be wrapped in a begin/rescue block and log an error if it fails.
This commit is contained in:
parent
5a8e7c5f29
commit
6bdda3cb71
|
@ -60,14 +60,19 @@ DiscourseAutomation::Scriptable.add(DiscourseAutomation::Scripts::TOPIC) do
|
|||
end
|
||||
|
||||
tags = fields.dig("tags", "value") || []
|
||||
new_post =
|
||||
PostCreator.new(
|
||||
creator,
|
||||
raw: topic_raw,
|
||||
title: title,
|
||||
category: category.id,
|
||||
tags: tags,
|
||||
).create!
|
||||
begin
|
||||
new_post =
|
||||
PostCreator.new(
|
||||
creator,
|
||||
raw: topic_raw,
|
||||
title: title,
|
||||
category: category.id,
|
||||
tags: tags,
|
||||
).create!
|
||||
rescue StandardError => e
|
||||
Rails.logger.warn "[discourse-automation] couldn't create post: #{e.message}"
|
||||
next
|
||||
end
|
||||
|
||||
if context["kind"] == DiscourseAutomation::Triggers::USER_UPDATED && new_post.persisted?
|
||||
user.user_custom_fields.create(name: automation.name, value: "true")
|
||||
|
|
|
@ -165,5 +165,25 @@ describe "Topic" do
|
|||
}.by(1)
|
||||
end
|
||||
end
|
||||
|
||||
context "when creating the post fails" do
|
||||
before do
|
||||
@orig_logger = Rails.logger
|
||||
Rails.logger = @fake_logger = FakeLogger.new
|
||||
end
|
||||
|
||||
after { Rails.logger = @orig_logger }
|
||||
|
||||
it "logs a warning" do
|
||||
expect { UserUpdater.new(user, user).update(location: "Japan") }.to change {
|
||||
Topic.count
|
||||
}.by(1)
|
||||
expect { UserUpdater.new(user, user).update(location: "Japan") }.not_to change {
|
||||
Topic.count
|
||||
}
|
||||
|
||||
expect(Rails.logger.warnings.first).to match(/Title has already been used/)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user