require "rails_helper"

describe "Account" do
  scenario "Should not allow unverified users to edit their account" do
    user = create(:user)
    login_managed_user(user)

    login_as_manager
    click_link "Reset password via email"

    expect(page).to have_content "No verified user logged in yet"
  end

  scenario "Send reset password email to currently managed user session" do
    user = create(:user, :level_three)
    login_managed_user(user)

    login_as_manager
    click_link "Reset password via email"

    click_link "Send reset password email"

    expect(page).to have_content "Email correctly sent."

    email = ActionMailer::Base.deliveries.last

    expect(email).to have_text "Change your password"
  end

  scenario "Manager manually writes the new password" do
    user = create(:user, :level_three)
    login_managed_user(user)

    login_as_manager
    click_link "Reset password manually"

    fill_in "Password", with: "new_password"

    click_button "Save password"

    expect(page).to have_content "Password reseted successfully"
    expect(page).to have_link "Print password", href: "javascript:window.print();"
    expect(page).to have_css "div.for-print-only", text: "new_password", visible: :hidden

    logout

    login_through_form_with(user.email, password: "new_password")

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

  scenario "Manager generates random password" do
    user = create(:user, :level_three)
    login_managed_user(user)

    login_as_manager
    click_link "Reset password manually"
    click_link "Generate random password"

    new_password = find_field("user_password").value

    expect(page).to have_field "Password", type: :password
    expect(page).to have_css "button[aria-pressed=false]", exact_text: "Show password"

    click_button "Show password"

    expect(page).to have_field "Password", type: :text
    expect(page).to have_css "button[aria-pressed=true]", exact_text: "Show password"

    click_button "Show password"

    expect(page).to have_field "Password", type: :password
    expect(page).to have_css "button[aria-pressed=false]", exact_text: "Show password"

    click_button "Save password"

    expect(page).to have_content "Password reseted successfully"

    logout

    login_through_form_with(user.username, password: new_password)

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

  describe "When a user has not been selected" do
    before do
      Setting["feature.user.skip_verification"] = "true"
    end

    scenario "we can't reset password via email" do
      login_as_manager

      click_link "Reset password via email"

      expect(page).to have_content "To perform this action you must select a user"
      expect(page).to have_current_path management_document_verifications_path
    end

    scenario "we can't reset password manually" do
      login_as_manager

      click_link "Reset password manually"

      expect(page).to have_content "To perform this action you must select a user"
      expect(page).to have_current_path management_document_verifications_path
    end
  end
end
