From 32f2b2d58fb7a0e9412de06ceb236ff13e84a3e0 Mon Sep 17 00:00:00 2001 From: Michael Kohl Date: Fri, 30 Oct 2020 20:46:10 +0700 Subject: [PATCH] Automatically mark tag supported when adding mod (#11151) * Automatically mark tag a supported when adding mod * Add data update script --- app/labor/assign_tag_moderator.rb | 1 + ...030015634_make_tags_with_mods_supported.rb | 25 +++++++++++++++++++ spec/labor/assign_tag_moderator_spec.rb | 8 +++++- .../make_tags_with_mods_supported_spec.rb | 19 ++++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 lib/data_update_scripts/20201030015634_make_tags_with_mods_supported.rb create mode 100644 spec/lib/data_update_scripts/make_tags_with_mods_supported_spec.rb diff --git a/app/labor/assign_tag_moderator.rb b/app/labor/assign_tag_moderator.rb index e6bc7a405..087856a3b 100644 --- a/app/labor/assign_tag_moderator.rb +++ b/app/labor/assign_tag_moderator.rb @@ -17,6 +17,7 @@ module AssignTagModerator add_tag_mod_role(user, tag) add_trusted_role(user) add_to_chat_channels(user, tag) + tag.update(supported: true) unless tag.supported? NotifyMailer.with(user: user, tag: tag, channel_slug: chat_channel_slug(tag)) .tag_moderator_confirmation_email diff --git a/lib/data_update_scripts/20201030015634_make_tags_with_mods_supported.rb b/lib/data_update_scripts/20201030015634_make_tags_with_mods_supported.rb new file mode 100644 index 000000000..60a6debe3 --- /dev/null +++ b/lib/data_update_scripts/20201030015634_make_tags_with_mods_supported.rb @@ -0,0 +1,25 @@ +module DataUpdateScripts + class MakeTagsWithModsSupported + def run + ActiveRecord::Base.connection.execute(<<~SQL.squish) + WITH unsupported_tags_with_mods_ids AS ( + SELECT + tags.id + FROM + tags + JOIN roles ON (roles.name = 'tag_moderator' + AND resource_id = tags.id) + WHERE + supported = FALSE) + UPDATE + tags + SET + supported = TRUE + FROM + unsupported_tags_with_mods_ids AS cte + WHERE + tags.id = cte.id; + SQL + end + end +end diff --git a/spec/labor/assign_tag_moderator_spec.rb b/spec/labor/assign_tag_moderator_spec.rb index d4fc6bc00..f86280feb 100644 --- a/spec/labor/assign_tag_moderator_spec.rb +++ b/spec/labor/assign_tag_moderator_spec.rb @@ -5,7 +5,7 @@ RSpec.describe AssignTagModerator, type: :labor do let(:user_two) { create(:user) } let(:mod_relator) { create(:user) } let(:tag_one) { create(:tag) } - let(:tag_two) { create(:tag) } + let(:tag_two) { create(:tag, supported: false) } let!(:channel) do create(:chat_channel, slug: "tag-moderators", @@ -67,4 +67,10 @@ RSpec.describe AssignTagModerator, type: :labor do expect { add_tag_moderators }.not_to raise_error(NoMethodError) end end + + it "marks tags as supported if they aren't already" do + expect do + add_tag_moderators + end.to change { tag_two.reload.supported? }.from(false).to(true) + end end diff --git a/spec/lib/data_update_scripts/make_tags_with_mods_supported_spec.rb b/spec/lib/data_update_scripts/make_tags_with_mods_supported_spec.rb new file mode 100644 index 000000000..5f2daeb46 --- /dev/null +++ b/spec/lib/data_update_scripts/make_tags_with_mods_supported_spec.rb @@ -0,0 +1,19 @@ +require "rails_helper" +require Rails.root.join( + "lib/data_update_scripts/20201030015634_make_tags_with_mods_supported.rb", +) + +describe DataUpdateScripts::MakeTagsWithModsSupported do + let!(:tag1) { create(:tag, name: "Test1", supported: false) } + let!(:tag2) { create(:tag, name: "Test2", supported: false) } + let!(:user) { create(:user) } + + it "sets tags with moderators to supported", :aggregate_failures do + user.add_role(:tag_moderator, tag1) + + expect do + described_class.new.run + end.to change { tag1.reload.supported? }.from(false).to(true) + expect(tag2.reload.supported).to be false + end +end