require 'rails_helper'

feature 'Admin geozones' do

  background do
    login_as(create(:administrator).user)
  end

  scenario 'Show list of geozones' do
    chamberi = create(:geozone, name: 'Chamberí')
    retiro = create(:geozone, name: 'Retiro')

    visit admin_geozones_path

    expect(page).to have_content(chamberi.name)
    expect(page).to have_content(retiro.name)
  end

  scenario 'Create new geozone' do
    visit admin_root_path

    within('#side_menu') { click_link 'Manage geozones' }

    click_link 'Create geozone'

    fill_in 'geozone_name', with: 'Fancy District'
    fill_in 'geozone_external_code', with: 123
    fill_in 'geozone_census_code', with: 44

    click_button 'Save changes'

    expect(page).to have_content 'Fancy District'

    visit admin_geozones_path

    expect(page).to have_content 'Fancy District'
  end

  scenario 'Edit geozone with no associated elements' do
    geozone = create(:geozone, name: 'Edit me!', census_code: '012')

    visit admin_geozones_path

    within("#geozone_#{geozone.id}") { click_link 'Edit' }

    fill_in 'geozone_name', with: 'New geozone name'
    fill_in 'geozone_census_code', with: '333'

    click_button 'Save changes'

    within("#geozone_#{geozone.id}") do
      expect(page).to have_content 'New geozone name'
      expect(page).to have_content '333'
    end
  end

  scenario 'Edit geozone with associated elements' do
    geozone = create(:geozone, name: 'Edit me!')
    create(:proposal, title: 'Proposal with geozone', geozone: geozone)

    visit admin_geozones_path

    within("#geozone_#{geozone.id}") { click_link 'Edit' }

    fill_in 'geozone_name', with: 'New geozone name'

    click_button 'Save changes'

    within("#geozone_#{geozone.id}") do
      expect(page).to have_content 'New geozone name'
    end
  end

  scenario 'Delete geozone with no associated elements' do
    geozone = create(:geozone, name: 'Delete me!')

    visit admin_geozones_path

    within("#geozone_#{geozone.id}") { click_link 'Delete' }

    expect(page).to have_content 'Geozone successfully deleted'
    expect(page).not_to have_content('Delete me!')
    expect(Geozone.where(id: geozone.id)).to be_empty
  end

  scenario 'Delete geozone with associated element' do
    geozone = create(:geozone, name: 'Delete me!')
    create(:proposal, geozone: geozone)

    visit admin_geozones_path

    within("#geozone_#{geozone.id}") { click_link 'Delete' }

    expect(page).to have_content "This geozone can't be deleted since there are elements attached to it"

    within("#geozone_#{geozone.id}") do
      expect(page).to have_content 'Delete me!'
    end
  end
end
