FIX: return proper error message when replying to a closed or deleted topic
This commit is contained in:
parent
a09d471514
commit
484ae8b6b7
|
@ -151,6 +151,7 @@ en:
|
||||||
other: "Sorry, new users can only put %{count} links in a post."
|
other: "Sorry, new users can only put %{count} links in a post."
|
||||||
spamming_host: "Sorry you cannot post a link to that host."
|
spamming_host: "Sorry you cannot post a link to that host."
|
||||||
user_is_suspended: "Suspended users are not allowed to post."
|
user_is_suspended: "Suspended users are not allowed to post."
|
||||||
|
topic_not_found: "Something has gone wrong. Perhaps this topic was closed or deleted while you were looking at it?"
|
||||||
|
|
||||||
just_posted_that: "is too similar to what you recently posted"
|
just_posted_that: "is too similar to what you recently posted"
|
||||||
has_already_been_used: "has already been used"
|
has_already_been_used: "has already been used"
|
||||||
|
@ -2322,4 +2323,3 @@ en:
|
||||||
Flagging is critical to the health of your community. If you notice any posts that require moderator attention please
|
Flagging is critical to the health of your community. If you notice any posts that require moderator attention please
|
||||||
do not hesitate to flag. You may also use the flagging dialog to send <b>private messages</b> to users once you reach
|
do not hesitate to flag. You may also use the flagging dialog to send <b>private messages</b> to users once you reach
|
||||||
trust level 1.
|
trust level 1.
|
||||||
|
|
||||||
|
|
|
@ -204,7 +204,11 @@ class PostCreator
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
topic = Topic.find_by(id: @opts[:topic_id])
|
topic = Topic.find_by(id: @opts[:topic_id])
|
||||||
guardian.ensure_can_create!(Post, topic)
|
if (topic.blank? || !guardian.can_create?(Post, topic))
|
||||||
|
@errors = Post.new.errors
|
||||||
|
@errors.add(:base, I18n.t(:topic_not_found))
|
||||||
|
raise ActiveRecord::Rollback.new
|
||||||
|
end
|
||||||
end
|
end
|
||||||
@topic = topic
|
@topic = topic
|
||||||
end
|
end
|
||||||
|
|
|
@ -332,7 +332,10 @@ describe PostCreator do
|
||||||
|
|
||||||
it 'ensures the user can create the post' do
|
it 'ensures the user can create the post' do
|
||||||
Guardian.any_instance.expects(:can_create?).with(Post, topic).returns(false)
|
Guardian.any_instance.expects(:can_create?).with(Post, topic).returns(false)
|
||||||
expect { creator.create }.to raise_error(Discourse::InvalidAccess)
|
post = creator.create
|
||||||
|
expect(post).to be_blank
|
||||||
|
expect(creator.errors.count).to eq 1
|
||||||
|
expect(creator.errors.messages[:base][0]).to match I18n.t(:topic_not_found)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'success' do
|
context 'success' do
|
||||||
|
@ -347,6 +350,30 @@ describe PostCreator do
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'closed topic' do
|
||||||
|
let!(:topic) { Fabricate(:topic, user: user, closed: true) }
|
||||||
|
let(:creator) { PostCreator.new(user, raw: 'test reply', topic_id: topic.id, reply_to_post_number: 4) }
|
||||||
|
|
||||||
|
it 'responds with an error message' do
|
||||||
|
post = creator.create
|
||||||
|
expect(post).to be_blank
|
||||||
|
expect(creator.errors.count).to eq 1
|
||||||
|
expect(creator.errors.messages[:base][0]).to match I18n.t(:topic_not_found)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'missing topic' do
|
||||||
|
let!(:topic) { Fabricate(:topic, user: user, deleted_at: 5.minutes.ago) }
|
||||||
|
let(:creator) { PostCreator.new(user, raw: 'test reply', topic_id: topic.id, reply_to_post_number: 4) }
|
||||||
|
|
||||||
|
it 'responds with an error message' do
|
||||||
|
post = creator.create
|
||||||
|
expect(post).to be_blank
|
||||||
|
expect(creator.errors.count).to eq 1
|
||||||
|
expect(creator.errors.messages[:base][0]).to match I18n.t(:topic_not_found)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "cooking options" do
|
context "cooking options" do
|
||||||
let(:raw) { "this is my awesome message body hello world" }
|
let(:raw) { "this is my awesome message body hello world" }
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ describe SpamRulesEnforcer do
|
||||||
|
|
||||||
Invariant { expect(Guardian.new(spammer).can_create_topic?(nil)).to be false }
|
Invariant { expect(Guardian.new(spammer).can_create_topic?(nil)).to be false }
|
||||||
Invariant { expect{PostCreator.create(spammer, {title: 'limited time offer for you', raw: 'better buy this stuff ok', archetype_id: 1})}.to raise_error(Discourse::InvalidAccess) }
|
Invariant { expect{PostCreator.create(spammer, {title: 'limited time offer for you', raw: 'better buy this stuff ok', archetype_id: 1})}.to raise_error(Discourse::InvalidAccess) }
|
||||||
Invariant { expect{PostCreator.create(spammer, {topic_id: another_topic.id, raw: 'my reply is spam in your topic', archetype_id: 1})}.to raise_error(Discourse::InvalidAccess) }
|
Invariant { PostCreator.create(spammer, {topic_id: another_topic.id, raw: 'my reply is spam in your topic', archetype_id: 1}).should == nil }
|
||||||
|
|
||||||
Then { expect(spammer.reload).to be_blocked }
|
Then { expect(spammer.reload).to be_blocked }
|
||||||
And { expect(spam_post.reload).to be_hidden }
|
And { expect(spam_post.reload).to be_hidden }
|
||||||
|
|
Loading…
Reference in New Issue