Note that we have the same code in the officing section. Then we can use the same component. Note also that we are removing the parts of the system specs that are now covered by the component itself, and taking the chance to unify tests. In these removals and unifications we take into account that there are other specs which already cover user interaction in this section.
305 lines
9.7 KiB
Ruby
305 lines
9.7 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin booths assignments", :admin do
|
|
describe "Admin Booth Assignment management" do
|
|
let!(:poll) { create(:poll) }
|
|
let!(:booth) { create(:poll_booth) }
|
|
|
|
scenario "List Polls and Booths to manage" do
|
|
second_poll = create(:poll)
|
|
second_booth = create(:poll_booth)
|
|
|
|
visit booth_assignments_admin_polls_path
|
|
|
|
expect(page).to have_link("Manage assignments", 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 "Does not hide the Polls menu" do
|
|
visit booth_assignments_admin_polls_path
|
|
|
|
within("#admin_menu") { expect(page).to have_link "Polls" }
|
|
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" 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_button "Assign booth"
|
|
|
|
expect(page).not_to have_content "Unassigned"
|
|
expect(page).to have_content "Assigned"
|
|
expect(page).to have_button "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" 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_button "Unassign booth"
|
|
|
|
expect(page).to have_content "Unassigned"
|
|
expect(page).not_to have_content "Assigned"
|
|
expect(page).to have_button "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" 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_button "Unassign booth" }
|
|
|
|
expect(page).to have_content "Unassigned"
|
|
expect(page).not_to have_content "Assigned"
|
|
expect(page).to have_button "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_button "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)
|
|
|
|
create(:poll_officer_assignment, booth_assignment: booth_assignment, date: poll.starts_at)
|
|
create(:poll_officer_assignment, booth_assignment: booth_assignment, date: poll.ends_at)
|
|
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)
|
|
|
|
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)
|
|
|
|
click_link "Recounts"
|
|
|
|
within("#totals") do
|
|
within("#total_final") do
|
|
expect(page).to have_content "10"
|
|
end
|
|
|
|
expect(page).not_to have_css "#total_system"
|
|
end
|
|
|
|
expect(page).not_to have_css "#recounts_list"
|
|
end
|
|
|
|
scenario "Recounts 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_option, title: "Today", question: question_2)
|
|
create(:poll_question_option, 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"
|
|
|
|
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
|