require 'rails_helper'

feature 'Admin officials' do

  background do
    @citizen = create(:user, username: "Citizen Kane")
    @official = create(:user, official_position: "Mayor", official_level: 5)
    @admin = create(:administrator)
    login_as(@admin.user)
  end

  scenario 'Index' do
    visit admin_officials_path

    expect(page).to have_content @official.name
    expect(page).to_not have_content @citizen.name
    expect(page).to have_content @official.official_position
    expect(page).to have_content @official.official_level
  end

  scenario 'Edit an official' do
    visit admin_officials_path
    click_link @official.name

    expect(current_path).to eq(edit_admin_official_path(@official))

    expect(page).to_not have_content @citizen.name
    expect(page).to have_content @official.name
    expect(page).to have_content @official.email

    fill_in 'user_official_position', with: 'School Teacher'
    select '3', from: 'user_official_level', exact: false
    click_button 'Update User'

    expect(page).to have_content 'Details of official saved'

    visit admin_officials_path

    expect(page).to have_content @official.name
    expect(page).to have_content 'School Teacher'
    expect(page).to have_content '3'
  end

  scenario 'Create an official' do
    visit admin_officials_path
    fill_in 'name_or_email', with: @citizen.email
    click_button 'Search'

    expect(current_path).to eq(search_admin_officials_path)
    expect(page).to_not have_content @official.name

    click_link @citizen.name

    fill_in 'user_official_position', with: 'Hospital manager'
    select '4', from: 'user_official_level', exact: false
    click_button 'Update User'

    expect(page).to have_content 'Details of official saved'

    visit admin_officials_path

    expect(page).to have_content @official.name
    expect(page).to have_content @citizen.name
    expect(page).to have_content 'Hospital manager'
    expect(page).to have_content '4'
  end

  scenario 'Destroy' do
    visit edit_admin_official_path(@official)

    click_link "Remove 'Official' status"

    expect(page).to have_content 'Details saved: the user is no longer an official'
    expect(current_path).to eq(admin_officials_path)
    expect(page).to_not have_content @citizen.name
    expect(page).to_not have_content @official.name
  end
end
