Make moderation tests easier to read

- reuse aria-labels instead of DOM selectors when checking moderation checkboxes
- drop redundant 'first' in the within
This commit is contained in:
taitus
2025-11-14 13:41:37 +01:00
parent a3a44f527b
commit a9129158c1

View File

@@ -1,7 +1,7 @@
require "rails_helper" require "rails_helper"
describe "Admin activity" do describe "Admin activity" do
let(:admin) { create(:administrator) } let(:admin) { create(:administrator, user: create(:user, username: "Admin Smith")) }
before do before do
login_as(admin.user) login_as(admin.user)
@@ -9,135 +9,117 @@ describe "Admin activity" do
context "Proposals" do context "Proposals" do
scenario "Shows moderation activity on proposals" do scenario "Shows moderation activity on proposals" do
proposal = create(:proposal, description: "<p>Description with html tag</p>") proposal = create(:proposal, description: "<p>Description with html tag</p>", title: "Sample proposal")
visit proposal_path(proposal) visit proposal_path(proposal)
within("#proposal_#{proposal.id}") do accept_confirm('Are you sure? Hide "Sample proposal"') { click_button "Hide" }
accept_confirm("Are you sure? Hide \"#{proposal.title}\"") { click_button "Hide" }
end
expect(page).to have_css("#proposal_#{proposal.id}.faded")
visit admin_activity_path expect(page).to have_css "#proposal_#{proposal.id}.faded"
within first("tbody tr") do visit admin_activity_path(filter: "on_proposals")
expect(page).to have_content(proposal.title)
expect(page).to have_content("Hidden") within "tbody tr" do
expect(page).to have_content(admin.user.username) expect(page).to have_content "Sample proposal"
expect(page).to have_css("p", exact_text: "Description with html tag") expect(page).to have_content "Hidden"
expect(page).to have_content "Admin Smith"
expect(page).to have_css "p", exact_text: "Description with html tag"
end end
end end
scenario "Shows moderation activity from moderation screen" do scenario "Shows moderation activity from moderation screen" do
proposal1 = create(:proposal) create(:proposal, title: "Sample proposal 1")
proposal2 = create(:proposal) create(:proposal, title: "Sample proposal 2")
proposal3 = create(:proposal) create(:proposal, title: "Sample proposal 3")
visit moderation_proposals_path(filter: "all") visit moderation_proposals_path(filter: "all")
within("#proposal_#{proposal1.id}") do check "Sample proposal 1"
check "proposal_#{proposal1.id}_check" check "Sample proposal 3"
end
within("#proposal_#{proposal3.id}") do
check "proposal_#{proposal3.id}_check"
end
accept_confirm("Are you sure? Hide proposals") { click_button "Hide proposals" } accept_confirm("Are you sure? Hide proposals") { click_button "Hide proposals" }
expect(page).not_to have_content(proposal1.title) expect(page).not_to have_content "Sample proposal 1"
visit admin_activity_path visit admin_activity_path(filter: "on_proposals")
expect(page).to have_content(proposal1.title) expect(page).to have_content "Sample proposal 1"
expect(page).not_to have_content(proposal2.title) expect(page).not_to have_content "Sample proposal 2"
expect(page).to have_content(proposal3.title) expect(page).to have_content "Sample proposal 3"
end end
scenario "Shows admin restores" do scenario "Shows admin restores" do
proposal = create(:proposal, :hidden) create(:proposal, :hidden, title: "Sample proposal")
visit admin_hidden_proposals_path visit admin_hidden_proposals_path
within("#proposal_#{proposal.id}") do accept_confirm("Are you sure? Restore") { click_button "Restore" }
accept_confirm("Are you sure? Restore") { click_button "Restore" }
end
expect(page).to have_content "There are no hidden proposals" expect(page).to have_content "There are no hidden proposals"
visit admin_activity_path visit admin_activity_path(filter: "on_proposals")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(proposal.title) expect(page).to have_content "Sample proposal"
expect(page).to have_content("Restored") expect(page).to have_content "Restored"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
end end
end end
end end
context "Debates" do context "Debates" do
scenario "Shows moderation activity on debates" do scenario "Shows moderation activity on debates" do
debate = create(:debate) debate = create(:debate, title: "Sample debate")
visit debate_path(debate) visit debate_path(debate)
within("#debate_#{debate.id}") do accept_confirm('Are you sure? Hide "Sample debate"') { click_button "Hide" }
accept_confirm("Are you sure? Hide \"#{debate.title}\"") { click_button "Hide" }
end
expect(page).to have_css("#debate_#{debate.id}.faded")
visit admin_activity_path expect(page).to have_css "#debate_#{debate.id}.faded"
within first("tbody tr") do visit admin_activity_path(filter: "on_debates")
expect(page).to have_content(debate.title)
expect(page).to have_content("Hidden") within "tbody tr" do
expect(page).to have_content(admin.user.username) expect(page).to have_content "Sample debate"
expect(page).to have_content "Hidden"
expect(page).to have_content "Admin Smith"
end end
end end
scenario "Shows moderation activity from moderation screen" do scenario "Shows moderation activity from moderation screen" do
debate1 = create(:debate) create(:debate, title: "Sample debate 1")
debate2 = create(:debate) create(:debate, title: "Sample debate 2")
debate3 = create(:debate) create(:debate, title: "Sample debate 3")
visit moderation_debates_path(filter: "all") visit moderation_debates_path(filter: "all")
within("#debate_#{debate1.id}") do check "Sample debate 1"
check "debate_#{debate1.id}_check" check "Sample debate 3"
end
within("#debate_#{debate3.id}") do
check "debate_#{debate3.id}_check"
end
accept_confirm("Are you sure? Hide debates") { click_button "Hide debates" } accept_confirm("Are you sure? Hide debates") { click_button "Hide debates" }
expect(page).not_to have_content(debate1.title) expect(page).not_to have_content "Sample debate 1"
visit admin_activity_path visit admin_activity_path(filter: "on_debates")
expect(page).to have_content(debate1.title) expect(page).to have_content "Sample debate 1"
expect(page).not_to have_content(debate2.title) expect(page).not_to have_content "Sample debate 2"
expect(page).to have_content(debate3.title) expect(page).to have_content "Sample debate 3"
end end
scenario "Shows admin restores" do scenario "Shows admin restores" do
debate = create(:debate, :hidden) create(:debate, :hidden, title: "Sample debate")
visit admin_hidden_debates_path visit admin_hidden_debates_path
within("#debate_#{debate.id}") do accept_confirm("Are you sure? Restore") { click_button "Restore" }
accept_confirm("Are you sure? Restore") { click_button "Restore" }
end
expect(page).to have_content "There are no hidden debates" expect(page).to have_content "There are no hidden debates"
visit admin_activity_path visit admin_activity_path(filter: "on_debates")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(debate.title) expect(page).to have_content "Sample debate"
expect(page).to have_content("Restored") expect(page).to have_content "Restored"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
end end
end end
end end
@@ -145,186 +127,159 @@ describe "Admin activity" do
context "Comments" do context "Comments" do
scenario "Shows moderation activity on comments" do scenario "Shows moderation activity on comments" do
debate = create(:debate) debate = create(:debate)
comment = create(:comment, commentable: debate) comment = create(:comment, commentable: debate, body: "Sample comment")
visit debate_path(debate) visit debate_path(debate)
within("#comment_#{comment.id}") do within "#comment_#{comment.id}" do
accept_confirm("Are you sure? Hide \"#{comment.body}\"") { click_button "Hide" } accept_confirm('Are you sure? Hide "Sample comment"') { click_button "Hide" }
expect(page).to have_css(".faded") expect(page).to have_css ".faded"
end end
visit admin_activity_path visit admin_activity_path(filter: "on_comments")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(comment.body) expect(page).to have_content "Sample comment"
expect(page).to have_content("Hidden") expect(page).to have_content "Hidden"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
end end
end end
scenario "Shows moderation activity from moderation screen" do scenario "Shows moderation activity from moderation screen" do
comment1 = create(:comment, body: "SPAM") comment1 = create(:comment, body: "SPAM")
comment2 = create(:comment) create(:comment, body: "Not Spam")
comment3 = create(:comment, body: "Offensive!") comment3 = create(:comment, body: "Offensive!")
visit moderation_comments_path(filter: "all") visit moderation_comments_path(filter: "all")
within("#comment_#{comment1.id}") do check "comment_#{comment1.id}_check"
check "comment_#{comment1.id}_check" check "comment_#{comment3.id}_check"
end
within("#comment_#{comment3.id}") do
check "comment_#{comment3.id}_check"
end
accept_confirm("Are you sure? Hide comments") { click_button "Hide comments" } accept_confirm("Are you sure? Hide comments") { click_button "Hide comments" }
expect(page).not_to have_content(comment1.body) expect(page).not_to have_content "SPAM"
visit admin_activity_path visit admin_activity_path(filter: "on_comments")
expect(page).to have_content(comment1.body) expect(page).to have_content "SPAM"
expect(page).not_to have_content(comment2.body) expect(page).not_to have_content "Not Spam"
expect(page).to have_content(comment3.body) expect(page).to have_content "Offensive!"
end end
scenario "Shows admin restores" do scenario "Shows admin restores" do
comment = create(:comment, :hidden) create(:comment, :hidden, body: "Sample comment")
visit admin_hidden_comments_path visit admin_hidden_comments_path
within("#comment_#{comment.id}") do accept_confirm("Are you sure? Restore") { click_button "Restore" }
accept_confirm("Are you sure? Restore") { click_button "Restore" }
end
expect(page).to have_content "There are no hidden comments" expect(page).to have_content "There are no hidden comments"
visit admin_activity_path visit admin_activity_path(filter: "on_comments")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(comment.body) expect(page).to have_content "Sample comment"
expect(page).to have_content("Restored") expect(page).to have_content "Restored"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
end end
end end
end end
context "User" do context "User" do
scenario "Shows moderation activity on users" do scenario "Shows moderation activity on users" do
proposal = create(:proposal, author: create(:user, username: "Sam")) proposal = create(:proposal, author: create(:user, username: "Sam", email: "sam@example.com"))
visit proposal_path(proposal) visit proposal_path(proposal)
within("#proposal_#{proposal.id}") do accept_confirm('Are you sure? This will hide the user "Sam" and all their contents.') do
accept_confirm("Are you sure? This will hide the user \"Sam\" and all their contents.") do click_button "Block author"
click_button "Block author"
end
expect(page).to have_current_path(proposals_path)
end end
visit admin_activity_path expect(page).to have_current_path proposals_path
within first("tbody tr") do visit admin_activity_path(filter: "on_users")
within "tbody tr" do
expect(page).to have_content("Blocked") expect(page).to have_content("Blocked")
expect(page).to have_content(proposal.author.username) expect(page).to have_content "Sam"
expect(page).to have_content(proposal.author.email) expect(page).to have_content "sam@example.com"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
expect(page).not_to have_content(proposal.title) expect(page).not_to have_content proposal.title
end end
end end
scenario "Shows moderation activity from moderation screen" do scenario "Shows moderation activity from moderation screen" do
user = create(:user) create(:user, username: "Sam", email: "sam@example.com")
visit moderation_users_path(search: user.username) visit moderation_users_path(search: "Sam")
within("#moderation_users") do accept_confirm { click_button "Block" }
accept_confirm { click_button "Block" }
end
expect(page).to have_content "The user has been blocked" expect(page).to have_content "The user has been blocked"
visit admin_activity_path visit admin_activity_path(filter: "on_users")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(user.username) expect(page).to have_content "Sam"
expect(page).to have_content(user.email) expect(page).to have_content "sam@example.com"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
end end
end end
scenario "Shows moderation activity from proposals moderation screen" do scenario "Shows moderation activity from proposals moderation screen" do
proposal1 = create(:proposal) proposal1 = create(:proposal, title: "Sample proposal 1")
proposal2 = create(:proposal) proposal2 = create(:proposal, title: "Sample proposal 2")
proposal3 = create(:proposal) proposal3 = create(:proposal, title: "Sample proposal 3")
visit moderation_proposals_path(filter: "all") visit moderation_proposals_path(filter: "all")
within("#proposal_#{proposal1.id}") do check "Sample proposal 1"
check "proposal_#{proposal1.id}_check" check "Sample proposal 3"
end
within("#proposal_#{proposal3.id}") do
check "proposal_#{proposal3.id}_check"
end
accept_confirm("Are you sure? Block authors") { click_button "Block authors" } accept_confirm("Are you sure? Block authors") { click_button "Block authors" }
expect(page).not_to have_content(proposal1.author.username) expect(page).not_to have_content "Sample proposal 1"
visit admin_activity_path visit admin_activity_path(filter: "on_users")
expect(page).to have_content(proposal1.author.username) expect(page).to have_content proposal1.author.username
expect(page).to have_content(proposal1.author.email) expect(page).to have_content proposal1.author.email
expect(page).to have_content(proposal3.author.username) expect(page).to have_content proposal3.author.username
expect(page).to have_content(proposal3.author.email) expect(page).to have_content proposal3.author.email
expect(page).not_to have_content(proposal2.author.username) expect(page).not_to have_content proposal2.author.username
end end
scenario "Shows moderation activity from debates moderation screen" do scenario "Shows moderation activity from debates moderation screen" do
debate1 = create(:debate) debate1 = create(:debate, title: "Sample debate 1")
debate2 = create(:debate) debate2 = create(:debate, title: "Sample debate 2")
debate3 = create(:debate) debate3 = create(:debate, title: "Sample debate 3")
visit moderation_debates_path(filter: "all") visit moderation_debates_path(filter: "all")
within("#debate_#{debate1.id}") do check "Sample debate 1"
check "debate_#{debate1.id}_check" check "Sample debate 3"
end
within("#debate_#{debate3.id}") do
check "debate_#{debate3.id}_check"
end
accept_confirm("Are you sure? Block authors") { click_button "Block authors" } accept_confirm("Are you sure? Block authors") { click_button "Block authors" }
expect(page).not_to have_content(debate1.author.username) expect(page).not_to have_content debate1.author.username
visit admin_activity_path visit admin_activity_path
expect(page).to have_content(debate1.author.username) expect(page).to have_content debate1.author.username
expect(page).to have_content(debate1.author.email) expect(page).to have_content debate1.author.email
expect(page).to have_content(debate3.author.username) expect(page).to have_content debate3.author.username
expect(page).to have_content(debate3.author.email) expect(page).to have_content debate3.author.email
expect(page).not_to have_content(debate2.author.username) expect(page).not_to have_content debate2.author.username
end end
scenario "Shows moderation activity from comments moderation screen" do scenario "Shows moderation activity from comments moderation screen" do
comment1 = create(:comment, body: "SPAM") comment1 = create(:comment)
comment2 = create(:comment) comment2 = create(:comment)
comment3 = create(:comment, body: "Offensive!") comment3 = create(:comment)
visit moderation_comments_path(filter: "all") visit moderation_comments_path(filter: "all")
within("#comment_#{comment1.id}") do check "comment_#{comment1.id}_check"
check "comment_#{comment1.id}_check" check "comment_#{comment3.id}_check"
end
within("#comment_#{comment3.id}") do
check "comment_#{comment3.id}_check"
end
accept_confirm("Are you sure? Block authors") { click_button "Block authors" } accept_confirm("Are you sure? Block authors") { click_button "Block authors" }
@@ -332,31 +287,29 @@ describe "Admin activity" do
visit admin_activity_path visit admin_activity_path
expect(page).to have_content(comment1.author.username) expect(page).to have_content comment1.author.username
expect(page).to have_content(comment1.author.email) expect(page).to have_content comment1.author.email
expect(page).to have_content(comment3.author.username) expect(page).to have_content comment3.author.username
expect(page).to have_content(comment3.author.email) expect(page).to have_content comment3.author.email
expect(page).not_to have_content(comment2.author.username) expect(page).not_to have_content comment2.author.username
end end
scenario "Shows admin restores" do scenario "Shows admin restores" do
user = create(:user, :hidden) create(:user, :hidden, username: "Sam", email: "sam@example.com")
visit admin_hidden_users_path visit admin_hidden_users_path
within("#user_#{user.id}") do accept_confirm("Are you sure? Restore") { click_button "Restore" }
accept_confirm("Are you sure? Restore") { click_button "Restore" }
end
expect(page).to have_content "There are no hidden users" expect(page).to have_content "There are no hidden users"
visit admin_activity_path visit admin_activity_path(filter: "on_users")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(user.username) expect(page).to have_content "Sam"
expect(page).to have_content(user.email) expect(page).to have_content "sam@example.com"
expect(page).to have_content("Restored") expect(page).to have_content "Restored"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
end end
end end
end end
@@ -369,83 +322,70 @@ describe "Admin activity" do
body: "Proposal A Notification Body") body: "Proposal A Notification Body")
proposal_notification.moderate_system_email(admin.user) proposal_notification.moderate_system_email(admin.user)
visit admin_activity_path visit admin_activity_path(filter: "on_system_emails")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(proposal_notification.title) expect(page).to have_content "Proposal A Title"
expect(page).to have_content("Hidden") expect(page).to have_content "Hidden"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
end end
end end
end end
context "Budget investments" do context "Budget investments" do
scenario "Shows moderation activity on budget investments" do scenario "Shows moderation activity on budget investments" do
investment = create(:budget_investment, description: "<p>Investment description</p>") investment = create(:budget_investment, title: "Sample investment")
visit budget_investment_path(investment.budget, investment) visit budget_investment_path(investment.budget, investment)
within "#budget_investment_#{investment.id}" do accept_confirm('Are you sure? Hide "Sample investment"') { click_button "Hide" }
accept_confirm("Are you sure? Hide") { click_button "Hide" }
end
expect(page).to have_css "#budget_investment_#{investment.id}.faded" expect(page).to have_css "#budget_investment_#{investment.id}.faded"
visit admin_activity_path visit admin_activity_path(filter: "on_budget_investments")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(investment.title) expect(page).to have_content "Sample investment"
expect(page).to have_content("Hidden") expect(page).to have_content "Hidden"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
expect(page).to have_css("p", exact_text: "Investment description")
end end
end end
scenario "Shows moderation activity from moderation screen" do scenario "Shows moderation activity from moderation screen" do
investment1 = create(:budget_investment) create(:budget_investment, title: "Sample investment 1")
investment2 = create(:budget_investment) create(:budget_investment, title: "Sample investment 2")
investment3 = create(:budget_investment) create(:budget_investment, title: "Sample investment 3")
visit moderation_budget_investments_path(filter: "all") visit moderation_budget_investments_path(filter: "all")
within "#investment_#{investment1.id}" do check "Sample investment 1"
check "budget_investment_#{investment1.id}_check" check "Sample investment 3"
end accept_confirm("Are you sure? Hide budget investments") { click_button "Hide budget investments" }
within "#investment_#{investment3.id}" do expect(page).not_to have_content "Sample investment 1"
check "budget_investment_#{investment3.id}_check"
end
accept_confirm("Are you sure? Hide budget investments") do
click_button "Hide budget investments"
end
expect(page).not_to have_content(investment1.title)
visit admin_activity_path(filter: "on_budget_investments") visit admin_activity_path(filter: "on_budget_investments")
expect(page).to have_content(investment1.title) expect(page).to have_content "Sample investment 1"
expect(page).not_to have_content(investment2.title) expect(page).not_to have_content "Sample investment 2"
expect(page).to have_content(investment3.title) expect(page).to have_content "Sample investment 3"
end end
scenario "Shows admin restores" do scenario "Shows admin restores" do
investment = create(:budget_investment, :hidden) create(:budget_investment, :hidden, title: "Sample investment")
visit admin_hidden_budget_investments_path visit admin_hidden_budget_investments_path
within "#budget_investment_#{investment.id}" do accept_confirm("Are you sure? Restore") { click_button "Restore" }
accept_confirm("Are you sure? Restore") { click_button "Restore" }
end
expect(page).to have_content "There are no hidden budget investments" expect(page).to have_content "There are no hidden budget investments"
visit admin_activity_path visit admin_activity_path(filter: "on_budget_investments")
within first("tbody tr") do within "tbody tr" do
expect(page).to have_content(investment.title) expect(page).to have_content "Sample investment"
expect(page).to have_content("Restored") expect(page).to have_content "Restored"
expect(page).to have_content(admin.user.username) expect(page).to have_content "Admin Smith"
end end
end end
end end