We were clicking on the "Sign in" link right after clicking on the "Sign out" link, which might result in simultaneous requests and exceptions when running our test suite. So we're adding an expectation to make sure the first request has finished before starting the following one.
122 lines
3.4 KiB
Ruby
122 lines
3.4 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Moderate users" do
|
|
scenario "Hide" do
|
|
citizen = create(:user)
|
|
moderator = create(:moderator)
|
|
|
|
debate1 = create(:debate, author: citizen)
|
|
debate2 = create(:debate, author: citizen)
|
|
debate3 = create(:debate)
|
|
comment3 = create(:comment, user: citizen, commentable: debate3, body: "SPAMMER")
|
|
|
|
login_as(moderator.user)
|
|
visit debates_path
|
|
|
|
expect(page).to have_content(debate1.title)
|
|
expect(page).to have_content(debate2.title)
|
|
expect(page).to have_content(debate3.title)
|
|
|
|
visit debate_path(debate3)
|
|
|
|
expect(page).to have_content(comment3.body)
|
|
|
|
visit debate_path(debate1)
|
|
|
|
within("#debate_#{debate1.id}") do
|
|
accept_confirm("Are you sure? This will hide the user \"#{debate1.author.name}\" and all their contents.") do
|
|
click_button "Block author"
|
|
end
|
|
end
|
|
|
|
expect(page).to have_current_path(debates_path)
|
|
expect(page).not_to have_content(debate1.title)
|
|
expect(page).not_to have_content(debate2.title)
|
|
expect(page).to have_content(debate3.title)
|
|
|
|
visit debate_path(debate3)
|
|
|
|
expect(page).not_to have_content(comment3.body)
|
|
|
|
click_link "Sign out"
|
|
|
|
expect(page).to have_content "You have been signed out successfully"
|
|
|
|
visit root_path
|
|
|
|
click_link "Sign in"
|
|
fill_in "user_login", with: citizen.email
|
|
fill_in "user_password", with: citizen.password
|
|
click_button "Enter"
|
|
|
|
expect(page).to have_content "Invalid Email or username or password"
|
|
expect(page).to have_current_path(new_user_session_path)
|
|
end
|
|
|
|
scenario "Search and ban users" do
|
|
citizen = create(:user, username: "Wanda Maximoff")
|
|
moderator = create(:moderator)
|
|
|
|
login_as(moderator.user)
|
|
|
|
visit moderation_users_path
|
|
|
|
expect(page).not_to have_content citizen.name
|
|
fill_in "search", with: "Wanda"
|
|
click_button "Search"
|
|
|
|
within("#moderation_users") do
|
|
expect(page).to have_content citizen.name
|
|
expect(page).not_to have_content "Blocked"
|
|
|
|
accept_confirm { click_button "Block" }
|
|
end
|
|
|
|
within("#moderation_users") do
|
|
expect(page).to have_content citizen.name
|
|
expect(page).to have_content "Blocked"
|
|
end
|
|
end
|
|
|
|
scenario "Hide users in the moderation section" do
|
|
create(:user, username: "Rick")
|
|
|
|
login_as(create(:moderator).user)
|
|
visit moderation_users_path(search: "Rick")
|
|
|
|
within("#moderation_users") do
|
|
accept_confirm('This will hide the user "Rick" without hiding their contents') do
|
|
click_button "Hide"
|
|
end
|
|
end
|
|
|
|
expect(page).to have_content "The user has been hidden"
|
|
|
|
within("#moderation_users") do
|
|
expect(page).to have_content "Hidden"
|
|
end
|
|
end
|
|
|
|
scenario "Block a user removes all their roles" do
|
|
admin = create(:administrator).user
|
|
user = create(:user, username: "Budget administrator")
|
|
budget = create(:budget, administrators: [create(:administrator, user: user)])
|
|
debate = create(:debate, author: user)
|
|
login_as(admin)
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_select options: ["All administrators", "Budget administrator"]
|
|
|
|
visit debate_path(debate)
|
|
within("#debate_#{debate.id}") do
|
|
accept_confirm { click_button "Block author" }
|
|
end
|
|
|
|
expect(page).to have_current_path(debates_path)
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_select options: ["All administrators"]
|
|
end
|
|
end
|