Note we usually cannot make it simple because officer assignments are usually assigned to both a poll and a booth, and on a certain date. However, in the few cases where the booth nor the date don't matter, we can make the code a bit easier to read.
330 lines
10 KiB
Ruby
330 lines
10 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin booths assignments" do
|
|
|
|
before do
|
|
admin = create(:administrator)
|
|
login_as(admin.user)
|
|
end
|
|
|
|
describe "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_link(poll.name, href: manage_admin_poll_booth_assignments_path(poll))
|
|
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 "Index do not show polls created by users from proposals dashboard" do
|
|
create(:poll, name: "Poll created by admin")
|
|
create(:poll, name: "Poll from user's proposal", related_type: "Proposal")
|
|
|
|
visit booth_assignments_admin_polls_path
|
|
|
|
expect(page).to have_content "Poll created by admin"
|
|
expect(page).not_to have_content "Poll from user's proposal"
|
|
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
|
|
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
|
|
officer = create(:poll_officer)
|
|
create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth)
|
|
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, booths: [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
|
|
|
|
describe "Show" do
|
|
scenario "Lists all assigned poll officers" do
|
|
poll = create(:poll)
|
|
booth = create(:poll_booth)
|
|
officer_assignment = create(:poll_officer_assignment, poll: poll, booth: booth)
|
|
officer = officer_assignment.officer
|
|
officer_2 = create(:poll_officer, polls: [poll])
|
|
|
|
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 "Doesn't show system recounts for old polls" do
|
|
poll = create(:poll, :old)
|
|
booth_assignment = create(:poll_booth_assignment, poll: poll)
|
|
|
|
create(:poll_voter, poll: poll, booth_assignment: booth_assignment)
|
|
create(:poll_recount, booth_assignment: booth_assignment, total_amount: 10)
|
|
|
|
visit admin_poll_booth_assignment_path(poll, booth_assignment)
|
|
|
|
within("#totals") do
|
|
within("#total_final") do
|
|
expect(page).to have_content "10"
|
|
end
|
|
|
|
expect(page).not_to have_selector "#total_system"
|
|
end
|
|
|
|
expect(page).not_to have_selector "#recounts_list"
|
|
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, :yes_no, poll: poll)
|
|
|
|
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
|