require 'rails_helper' feature 'Admin booths assignments' do background do admin = create(:administrator) login_as(admin.user) end feature 'Admin Booth Assignment management' do let!(:poll) { create(:poll) } let!(:booth) { create(:poll_booth) } scenario 'List Polls and Booths to manage', :js do second_poll = create(:poll) second_booth = create(:poll_booth) visit booth_assignments_admin_polls_path expect(page).to have_content(poll.name) expect(page).to have_content(second_poll.name) within("#poll_#{second_poll.id}") do click_link 'Manage assignments' end expect(page).to have_content "Assignments for poll '#{second_poll.name}'" expect(page).to have_content(booth.name) expect(page).to have_content(second_booth.name) end scenario 'Assign booth to poll', :js do visit admin_poll_path(poll) within('#poll-resources') do click_link 'Booths (0)' end expect(page).to have_content 'There are no booths assigned to this poll.' expect(page).not_to have_content booth.name fill_in 'search-booths', with: booth.name click_button 'Search' expect(page).to have_content(booth.name) visit manage_admin_poll_booth_assignments_path(poll) expect(page).to have_content "Assignments for poll '#{poll.name}'" within("#poll_booth_#{booth.id}") do expect(page).to have_content(booth.name) expect(page).to have_content "Unassigned" click_link 'Assign booth' expect(page).not_to have_content "Unassigned" expect(page).to have_content "Assigned" expect(page).to have_link "Unassign booth" end visit admin_poll_path(poll) within('#poll-resources') do click_link 'Booths (1)' end expect(page).not_to have_content 'There are no booths assigned to this poll.' expect(page).to have_content booth.name end scenario 'Unassign booth from poll', :js do assignment = create(:poll_booth_assignment, poll: poll, booth: booth) visit admin_poll_path(poll) within('#poll-resources') do click_link 'Booths (1)' end expect(page).not_to have_content 'There are no booths assigned to this poll.' expect(page).to have_content booth.name fill_in 'search-booths', with: booth.name click_button 'Search' expect(page).to have_content(booth.name) visit manage_admin_poll_booth_assignments_path(poll) expect(page).to have_content "Assignments for poll '#{poll.name}'" within("#poll_booth_#{booth.id}") do expect(page).to have_content(booth.name) expect(page).to have_content "Assigned" click_link 'Unassign booth' expect(page).to have_content "Unassigned" expect(page).not_to have_content "Assigned" expect(page).to have_link "Assign booth" end visit admin_poll_path(poll) within('#poll-resources') do click_link 'Booths (0)' end expect(page).to have_content 'There are no booths assigned to this poll.' expect(page).not_to have_content booth.name end scenario 'Unassing booth whith associated shifts', :js do assignment = create(:poll_booth_assignment, poll: poll, booth: booth) officer = create(:poll_officer) create(:poll_officer_assignment, officer: officer, booth_assignment: assignment) create(:poll_shift, booth: booth, officer: officer) visit manage_admin_poll_booth_assignments_path(poll) within("#poll_booth_#{booth.id}") do expect(page).to have_content(booth.name) expect(page).to have_content "Assigned" accept_confirm { click_link 'Unassign booth' } expect(page).to have_content "Unassigned" expect(page).not_to have_content "Assigned" expect(page).to have_link "Assign booth" end end scenario "Cannot unassing booth if poll is expired" do poll_expired = create(:poll, :expired) create(:poll_booth_assignment, poll: poll_expired, booth: booth) visit manage_admin_poll_booth_assignments_path(poll_expired) within("#poll_booth_#{booth.id}") do expect(page).to have_content(booth.name) expect(page).to have_content "Assigned" expect(page).not_to have_link 'Unassign booth' end end end feature 'Show' do scenario 'Lists all assigned poll officers' do poll = create(:poll) booth = create(:poll_booth) booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) officer_assignment = create(:poll_officer_assignment, booth_assignment: booth_assignment) officer = officer_assignment.officer booth_assignment_2 = create(:poll_booth_assignment, poll: poll) officer_assignment_2 = create(:poll_officer_assignment, booth_assignment: booth_assignment_2) officer_2 = officer_assignment_2.officer visit admin_poll_path(poll) click_link 'Booths (2)' within('#assigned_booths_list') { click_link booth.name } click_link 'Officers' within('#officers_list') do expect(page).to have_content officer.name expect(page).not_to have_content officer_2.name end end scenario 'Lists all recounts for the booth assignment' do poll = create(:poll, starts_at: 2.weeks.ago, ends_at: 1.week.ago) booth = create(:poll_booth) booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) officer_assignment_1 = create(:poll_officer_assignment, booth_assignment: booth_assignment, date: poll.starts_at) officer_assignment_2 = create(:poll_officer_assignment, booth_assignment: booth_assignment, date: poll.ends_at) final_officer_assignment = create(:poll_officer_assignment, :final, booth_assignment: booth_assignment, date: poll.ends_at) create(:poll_voter, poll: poll, booth_assignment: booth_assignment, created_at: poll.starts_at.to_date) create(:poll_voter, poll: poll, booth_assignment: booth_assignment, created_at: poll.ends_at.to_date) booth_assignment_2 = create(:poll_booth_assignment, poll: poll) visit admin_poll_path(poll) click_link 'Booths (2)' within('#assigned_booths_list') { click_link booth.name } click_link 'Recounts' within('#totals') do within("#total_system") { expect(page).to have_content "2" } end within('#recounts_list') do within("#recounting_#{poll.starts_at.to_date.strftime('%Y%m%d')}") do expect(page).to have_content 1 end within("#recounting_#{(poll.ends_at.to_date - 5.days).strftime('%Y%m%d')}") do expect(page).to have_content '-' end within("#recounting_#{poll.ends_at.to_date.strftime('%Y%m%d')}") do expect(page).to have_content 1 end end end scenario 'Results for a booth assignment' do poll = create(:poll) booth_assignment = create(:poll_booth_assignment, poll: poll) other_booth_assignment = create(:poll_booth_assignment, poll: poll) question_1 = create(:poll_question, poll: poll) create(:poll_question_answer, title: 'Yes', question: question_1) create(:poll_question_answer, title: 'No', question: question_1) question_2 = create(:poll_question, poll: poll) create(:poll_question_answer, title: 'Today', question: question_2) create(:poll_question_answer, title: 'Tomorrow', question: question_2) create(:poll_partial_result, booth_assignment: booth_assignment, question: question_1, answer: 'Yes', amount: 11) create(:poll_partial_result, booth_assignment: booth_assignment, question: question_1, answer: 'No', amount: 4) create(:poll_partial_result, booth_assignment: booth_assignment, question: question_2, answer: 'Today', amount: 5) create(:poll_partial_result, booth_assignment: booth_assignment, question: question_2, answer: 'Tomorrow', amount: 6) create(:poll_partial_result, booth_assignment: other_booth_assignment, question: question_1, answer: 'Yes', amount: 9999) create(:poll_recount, booth_assignment: booth_assignment, white_amount: 21, null_amount: 44, total_amount: 66) create(:poll_recount, booth_assignment: other_booth_assignment, white_amount: 999, null_amount: 999, total_amount: 999) visit admin_poll_booth_assignment_path(poll, booth_assignment) click_link 'Results' expect(page).to have_content(question_1.title) within("#question_#{question_1.id}_0_result") do expect(page).to have_content("Yes") expect(page).to have_content(11) end within("#question_#{question_1.id}_1_result") do expect(page).to have_content("No") expect(page).to have_content(4) end expect(page).to have_content(question_2.title) within("#question_#{question_2.id}_0_result") do expect(page).to have_content("Today") expect(page).to have_content(5) end within("#question_#{question_2.id}_1_result") do expect(page).to have_content("Tomorrow") expect(page).to have_content(6) end within('#white_results') { expect(page).to have_content('21') } within('#null_results') { expect(page).to have_content('44') } within('#total_results') { expect(page).to have_content('66') } end scenario "No results" do poll = create(:poll) booth_assignment = create(:poll_booth_assignment, poll: poll) visit admin_poll_booth_assignment_path(poll, booth_assignment) click_link "Results" expect(page).to have_content "There are no results" end end end