FIX: removing hidden tag bumps topic when all tags are removed

JS sends empty string to remove all tags.
This commit is contained in:
Neil Lalonde 2019-06-07 14:25:42 -04:00
parent af08ab5b7b
commit a08b2589d4
2 changed files with 9 additions and 1 deletions

View File

@ -527,7 +527,7 @@ class PostRevisor
modifications = post_changes.merge(@topic_changes.diff)
if modifications.keys.size == 1 && tags_diff = modifications["tags"]
a, b = tags_diff[0] || [], tags_diff[1] || []
changed_tags = (a + b) - (a & b)
changed_tags = ((a + b) - (a & b)).map(&:presence).compact
if (changed_tags - DiscourseTagging.hidden_tag_names(nil)).empty?
return true
end

View File

@ -762,6 +762,14 @@ describe PostRevisor do
}.to_not change { topic.reload.bumped_at }
end
it "doesn't bump topic if empty string is given" do
topic.tags = Tag.where(name: ['important', 'secret']).to_a
expect {
result = subject.revise!(Fabricate(:admin), raw: post.raw, tags: [""])
expect(result).to eq(true)
}.to_not change { topic.reload.bumped_at }
end
it "creates a hidden revision" do
subject.revise!(Fabricate(:admin), raw: post.raw, tags: topic.tags.map(&:name) + ['secret'])
expect(post.reload.revisions.first.hidden).to eq(true)