308 lines
9.9 KiB
Ruby
308 lines
9.9 KiB
Ruby
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"
|
|
|
|
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
|