require "rails_helper"

describe "Moderate users" do
  scenario "Hide" do
    citizen = create(:user, username: "Mike")
    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 \"Mike\" 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)

    click_link debate3.title

    expect(page).to have_css "h1", exact_text: debate3.title
    expect(page).not_to have_content(comment3.body)

    click_button "Sign out"

    expect(page).to have_content "You have been signed out successfully"

    login_through_form_as(citizen)

    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
