diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 74675f1c3..08bb60faa 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -30,6 +30,7 @@ @import "legislation"; @import "legislation_process"; @import "legislation_process_form"; +@import "moderation_actions"; @import "notification_item"; @import "community"; @import "stats"; diff --git a/app/assets/stylesheets/moderation_actions.scss b/app/assets/stylesheets/moderation_actions.scss new file mode 100644 index 000000000..c73206718 --- /dev/null +++ b/app/assets/stylesheets/moderation_actions.scss @@ -0,0 +1,10 @@ +.moderation-actions { + &, + form { + display: inline; + } + + button { + @include link; + } +} diff --git a/app/components/shared/moderation_actions_component.html.erb b/app/components/shared/moderation_actions_component.html.erb index 5d37fed88..c56a95e74 100644 --- a/app/components/shared/moderation_actions_component.html.erb +++ b/app/components/shared/moderation_actions_component.html.erb @@ -1,12 +1,25 @@ - +
<% if can? :hide, record %> - <%= link_to t("admin.actions.hide").capitalize, hide_path, - method: :put, remote: true, data: { confirm: confirm_hide_text } %> + <%= render Admin::ActionComponent.new( + :hide, + record, + path: hide_path, + method: :put, + remote: true, + confirm: true + ) %> <% end %> - <% if can? :hide, record.author %> + <% if can? :hide, author %> <%= raw separator %> - <%= link_to t("admin.actions.block_author").capitalize, block_moderation_user_path(record.author_id), - method: :put, data: { confirm: confirm_block_author_text } %> + + <%= render Admin::ActionComponent.new( + :block_author, + author, + path: block_moderation_user_path(author), + id: dom_id(author, "#{dom_id(record)}_block_author"), + method: :put, + confirm: true + ) %> <% end %> - +
diff --git a/app/components/shared/moderation_actions_component.rb b/app/components/shared/moderation_actions_component.rb index 94f3212b6..2207e340d 100644 --- a/app/components/shared/moderation_actions_component.rb +++ b/app/components/shared/moderation_actions_component.rb @@ -7,23 +7,19 @@ class Shared::ModerationActionsComponent < ApplicationComponent end def render? - can?(:hide, record) || can?(:hide, record.author) + can?(:hide, record) || can?(:hide, author) end private + def author + record.author + end + def hide_path polymorphic_path([:moderation, record], action: :hide) end - def confirm_hide_text - t("admin.actions.confirm_action", action: t("admin.actions.hide"), name: record.human_name) - end - - def confirm_block_author_text - t("admin.actions.confirm_action", action: t("admin.actions.block_author"), name: record.author.name) - end - def separator if record.is_a?(Comment) " • " diff --git a/spec/components/shared/moderation_actions_component_spec.rb b/spec/components/shared/moderation_actions_component_spec.rb index be6237c7d..f305a14d6 100644 --- a/spec/components/shared/moderation_actions_component_spec.rb +++ b/spec/components/shared/moderation_actions_component_spec.rb @@ -4,13 +4,15 @@ describe Shared::ModerationActionsComponent do include Rails.application.routes.url_helpers before { sign_in(create(:administrator).user) } - describe "Hide link" do + describe "Hide button" do it "is shown for debates" do debate = create(:debate) render_inline Shared::ModerationActionsComponent.new(debate) - expect(page).to have_link "Hide", href: hide_moderation_debate_path(debate) + page.find("form[action='#{hide_moderation_debate_path(debate)}']") do + expect(page).to have_button "Hide" + end end it "is shown for proposals" do @@ -18,7 +20,9 @@ describe Shared::ModerationActionsComponent do render_inline Shared::ModerationActionsComponent.new(proposal) - expect(page).to have_link "Hide", href: hide_moderation_proposal_path(proposal) + page.find("form[action='#{hide_moderation_proposal_path(proposal)}']") do + expect(page).to have_button "Hide" + end end it "is shown for proposal notifications" do @@ -26,7 +30,9 @@ describe Shared::ModerationActionsComponent do render_inline Shared::ModerationActionsComponent.new(notification) - expect(page).to have_link "Hide", href: hide_moderation_proposal_notification_path(notification) + page.find("form[action='#{hide_moderation_proposal_notification_path(notification)}']") do + expect(page).to have_button "Hide" + end end it "is shown for comments" do @@ -34,7 +40,9 @@ describe Shared::ModerationActionsComponent do render_inline Shared::ModerationActionsComponent.new(comment) - expect(page).to have_link "Hide", href: hide_moderation_comment_path(comment) + page.find("form[action='#{hide_moderation_comment_path(comment)}']") do + expect(page).to have_button "Hide" + end end it "is shown for budget investments" do @@ -42,7 +50,9 @@ describe Shared::ModerationActionsComponent do render_inline Shared::ModerationActionsComponent.new(investment) - expect(page).to have_link "Hide", href: hide_moderation_budget_investment_path(investment) + page.find("form[action='#{hide_moderation_budget_investment_path(investment)}']") do + expect(page).to have_button "Hide" + end end it "is shown for legislation proposals" do @@ -50,7 +60,9 @@ describe Shared::ModerationActionsComponent do render_inline Shared::ModerationActionsComponent.new(proposal) - expect(page).to have_link "Hide", href: hide_moderation_legislation_proposal_path(proposal) + page.find("form[action='#{hide_moderation_legislation_proposal_path(proposal)}']") do + expect(page).to have_button "Hide" + end end end end diff --git a/spec/system/admin/activity_spec.rb b/spec/system/admin/activity_spec.rb index e501de72f..537fe6c34 100644 --- a/spec/system/admin/activity_spec.rb +++ b/spec/system/admin/activity_spec.rb @@ -14,7 +14,7 @@ describe "Admin activity" do visit proposal_path(proposal) within("#proposal_#{proposal.id}") do - accept_confirm("Are you sure? Hide \"#{proposal.title}\"") { click_link "Hide" } + accept_confirm("Are you sure? Hide \"#{proposal.title}\"") { click_button "Hide" } end expect(page).to have_css("#proposal_#{proposal.id}.faded") @@ -82,7 +82,7 @@ describe "Admin activity" do visit debate_path(debate) within("#debate_#{debate.id}") do - accept_confirm("Are you sure? Hide \"#{debate.title}\"") { click_link "Hide" } + accept_confirm("Are you sure? Hide \"#{debate.title}\"") { click_button "Hide" } end expect(page).to have_css("#debate_#{debate.id}.faded") @@ -150,7 +150,7 @@ describe "Admin activity" do visit debate_path(debate) within("#comment_#{comment.id}") do - accept_confirm("Are you sure? Hide \"#{comment.body}\"") { click_link "Hide" } + accept_confirm("Are you sure? Hide \"#{comment.body}\"") { click_button "Hide" } expect(page).to have_css(".faded") end @@ -217,7 +217,7 @@ describe "Admin activity" do visit proposal_path(proposal) within("#proposal_#{proposal.id}") do - accept_confirm("Are you sure? Block author \"#{proposal.author.name}\"") { click_link "Block author" } + accept_confirm("Are you sure? Block author \"#{proposal.author.name}\"") { click_button "Block author" } expect(page).to have_current_path(proposals_path) end diff --git a/spec/system/admin/hidden_comments_spec.rb b/spec/system/admin/hidden_comments_spec.rb index b73651257..d92b811cd 100644 --- a/spec/system/admin/hidden_comments_spec.rb +++ b/spec/system/admin/hidden_comments_spec.rb @@ -13,7 +13,7 @@ describe "Admin hidden comments", :admin do visit proposal_path(proposal) within("#proposal_#{proposal.id}") do - accept_confirm("Are you sure? Block author \"#{proposal.author.name}\"") { click_link "Block author" } + accept_confirm("Are you sure? Block author \"#{proposal.author.name}\"") { click_button "Block author" } end expect(page).to have_current_path proposals_path diff --git a/spec/system/moderation/budget_investments_spec.rb b/spec/system/moderation/budget_investments_spec.rb index aafd765f9..f24291c73 100644 --- a/spec/system/moderation/budget_investments_spec.rb +++ b/spec/system/moderation/budget_investments_spec.rb @@ -10,7 +10,7 @@ describe "Moderate budget investments" do login_as(mod.user) visit budget_investment_path(budget, investment) - accept_confirm("Are you sure? Hide \"#{investment.title}\"") { click_link "Hide" } + accept_confirm("Are you sure? Hide \"#{investment.title}\"") { click_button "Hide" } expect(page).to have_css(".faded", count: 2) @@ -23,7 +23,7 @@ describe "Moderate budget investments" do login_as(mod.user) visit budget_investment_path(budget, investment) - accept_confirm("Are you sure? Block author \"#{investment.author.name}\"") { click_link "Block author" } + accept_confirm("Are you sure? Block author \"#{investment.author.name}\"") { click_button "Block author" } expect(page).to have_current_path(budget_investments_path(budget)) expect(page).not_to have_content(investment.title) @@ -36,8 +36,8 @@ describe "Moderate budget investments" do visit budget_investment_path(budget, investment) within "#budget_investment_#{investment.id}" do - expect(page).not_to have_link("Hide") - expect(page).not_to have_link("Block author") + expect(page).not_to have_button "Hide" + expect(page).not_to have_button "Block author" end end diff --git a/spec/system/moderation/comments_spec.rb b/spec/system/moderation/comments_spec.rb index 8321f2c2f..aeaf5c280 100644 --- a/spec/system/moderation/comments_spec.rb +++ b/spec/system/moderation/comments_spec.rb @@ -11,7 +11,7 @@ describe "Moderate comments" do visit debate_path(comment.commentable) within("#comment_#{comment.id}") do - accept_confirm("Are you sure? Hide") { click_link "Hide" } + accept_confirm("Are you sure? Hide") { click_button "Hide" } expect(page).to have_css(".comment .faded") end @@ -31,8 +31,8 @@ describe "Moderate comments" do visit debate_path(comment.commentable) within("#comment_#{comment.id}") do - expect(page).not_to have_link("Hide") - expect(page).not_to have_link("Block author") + expect(page).not_to have_button "Hide" + expect(page).not_to have_button "Block author" end end diff --git a/spec/system/moderation/debates_spec.rb b/spec/system/moderation/debates_spec.rb index 085682d53..8cd734858 100644 --- a/spec/system/moderation/debates_spec.rb +++ b/spec/system/moderation/debates_spec.rb @@ -11,7 +11,7 @@ describe "Moderate debates" do visit debate_path(debate) within("#debate_#{debate.id}") do - accept_confirm("Are you sure? Hide") { click_link "Hide" } + accept_confirm("Are you sure? Hide") { click_button "Hide" } end expect(find("div#debate_#{debate.id}.faded")).to have_text debate.title @@ -30,8 +30,8 @@ describe "Moderate debates" do visit debate_path(debate) within("#debate_#{debate.id}") do - expect(page).not_to have_link("Hide") - expect(page).not_to have_link("Block author") + expect(page).not_to have_button "Hide" + expect(page).not_to have_button "Block author" end end diff --git a/spec/system/moderation/legislation_proposals_spec.rb b/spec/system/moderation/legislation_proposals_spec.rb index 98f7ea48a..3da95c244 100644 --- a/spec/system/moderation/legislation_proposals_spec.rb +++ b/spec/system/moderation/legislation_proposals_spec.rb @@ -11,7 +11,7 @@ describe "Moderate legislation proposals" do visit legislation_process_proposal_path(legislation_process, legislation_proposal) within("#legislation_proposal_#{legislation_proposal.id}") do - accept_confirm("Are you sure? Hide \"#{legislation_proposal.title}\"") { click_link "Hide" } + accept_confirm("Are you sure? Hide \"#{legislation_proposal.title}\"") { click_button "Hide" } end expect(page).to have_css("#legislation_proposal_#{legislation_proposal.id}.faded") @@ -21,6 +21,6 @@ describe "Moderate legislation proposals" do visit legislation_process_proposals_path(legislation_process) expect(page).to have_css(".proposal-content", count: 0) - expect(page).not_to have_link("Hide") + expect(page).not_to have_button "Hide" end end diff --git a/spec/system/moderation/proposal_notifications_spec.rb b/spec/system/moderation/proposal_notifications_spec.rb index 6515c6566..d2ad9b7d2 100644 --- a/spec/system/moderation/proposal_notifications_spec.rb +++ b/spec/system/moderation/proposal_notifications_spec.rb @@ -12,7 +12,7 @@ describe "Moderate proposal notifications" do click_link "Notifications (1)" within("#proposal_notification_#{proposal_notification.id}") do - accept_confirm("Are you sure? Hide") { click_link "Hide" } + accept_confirm("Are you sure? Hide") { click_button "Hide" } end expect(page).to have_css("#proposal_notification_#{proposal_notification.id}.faded") @@ -34,8 +34,8 @@ describe "Moderate proposal notifications" do click_link "Notifications (1)" within("#proposal_notification_#{proposal_notification.id}") do - expect(page).not_to have_link("Hide") - expect(page).not_to have_link("Block author") + expect(page).not_to have_button "Hide" + expect(page).not_to have_button "Block author" end end diff --git a/spec/system/moderation/proposals_spec.rb b/spec/system/moderation/proposals_spec.rb index 9ab06e314..ceef0bf86 100644 --- a/spec/system/moderation/proposals_spec.rb +++ b/spec/system/moderation/proposals_spec.rb @@ -10,7 +10,7 @@ describe "Moderate proposals" do visit proposal_path(proposal) within("#proposal_#{proposal.id}") do - accept_confirm("Are you sure? Hide") { click_link "Hide" } + accept_confirm("Are you sure? Hide") { click_button "Hide" } end expect(page).to have_css("#proposal_#{proposal.id}.faded") @@ -29,8 +29,8 @@ describe "Moderate proposals" do visit proposal_path(proposal) within("#proposal_#{proposal.id}") do - expect(page).to have_link("Hide") - expect(page).not_to have_link("Block author") + expect(page).to have_button "Hide" + expect(page).not_to have_button "Block author" end end diff --git a/spec/system/moderation/users_spec.rb b/spec/system/moderation/users_spec.rb index cd4c83ef2..fa2ace29f 100644 --- a/spec/system/moderation/users_spec.rb +++ b/spec/system/moderation/users_spec.rb @@ -24,7 +24,7 @@ describe "Moderate users" do visit debate_path(debate1) within("#debate_#{debate1.id}") do - accept_confirm("Are you sure? Block author \"#{debate1.author.name}\"") { click_link "Block author" } + accept_confirm("Are you sure? Block author \"#{debate1.author.name}\"") { click_button "Block author" } end expect(page).to have_current_path(debates_path)