spec/components/moderation/users/index_component_spec.rb
require "rails_helper"
describe Moderation::Users::IndexComponent, controller: Moderation::UsersController do
describe "actions or status" do
let(:component) { Moderation::Users::IndexComponent.new(User.with_hidden.page(1)) }
it "shows actions to block or hide users" do
create(:user)
render_inline component
page.find("table") do |table|
expect(table).to have_button "Hide"
expect(table).to have_button "Block"
expect(table).not_to have_content "Blocked"
expect(table).not_to have_content "Hidden"
end
end
context "for hidden users" do
it "shows 'blocked' when the user has been blocked" do
user = create(:user, :hidden)
Activity.log(nil, :block, user)
render_inline component
page.find("table") do |table|
expect(table).to have_content "Blocked"
expect(table).not_to have_content "Hidden"
expect(table).not_to have_button
end
end
it "shows 'hidden' when the user has been hidden" do
user = create(:user, :hidden)
Activity.log(nil, :hide, user)
render_inline component
page.find("table") do |table|
expect(table).to have_content "Hidden"
expect(table).not_to have_content "Blocked"
expect(table).not_to have_button
end
end
it "shows 'blocked' when there are no activities to hide the user" do
create(:user, :hidden)
render_inline component
page.find("table") do |table|
expect(table).to have_content "Blocked"
end
end
it "is not affected by activities for other users" do
blocked = create(:user, :hidden, username: "Very bad user")
hidden = create(:user, :hidden, username: "Slightly bad user")
Activity.log(nil, :block, blocked)
Activity.log(nil, :hide, hidden)
render_inline component
page.find("tr", text: "Very bad user") do |row|
expect(row).to have_content "Blocked"
end
page.find("tr", text: "Slightly bad user") do |row|
expect(row).to have_content "Hidden"
end
end
it "doesn't consider activities other than block or hide" do
user = create(:user, :hidden)
Activity.log(nil, :block, user)
Activity.log(nil, :restore, user)
render_inline component
page.find("table") do |table|
expect(table).to have_content "Blocked"
end
end
it "shows actions after the user has been restored" do
user = create(:user, :hidden)
Activity.log(nil, :block, user)
user.restore
render_inline component
page.find("table") do |table|
expect(table).to have_button "Hide"
expect(table).to have_button "Block"
expect(table).not_to have_content "Blocked"
expect(table).not_to have_content "Hidden"
end
end
end
end
end