Files
nairobi/spec/system/budget_polls/ballot_sheets_spec.rb
Javi Martín 5f6c9852c7 Check table rows content instead of database
Checking the database with methods like Activity.last does not test that
the record is present where it should be (first record of the table in
this case). In these tests there's only one record, though, so the order
doesn't matter that match.

However, calling methods like Activity.last generates a database query
after the process running the browser has been started, and this might
lead to inconsistent data.
2021-04-16 14:33:25 +02:00

163 lines
5.2 KiB
Ruby

require "rails_helper"
describe "Poll budget ballot sheets" do
let(:poll) { create(:poll, :for_budget, ends_at: 1.day.ago) }
let(:booth) { create(:poll_booth, polls: [poll]) }
let(:poll_officer) { create(:poll_officer) }
context "Officing recounts and results view" do
before do
create(:poll_shift, :recount_scrutiny_task, officer: poll_officer, booth: booth,
date: Date.current)
create(:poll_officer_assignment, officer: poll_officer)
login_as(poll_officer.user)
set_officing_booth(booth)
end
scenario "Budget polls are visible" do
visit root_path
click_link "Menu"
click_link "Polling officers"
within("#side_menu") do
click_link "Total recounts and results"
end
within("#poll_#{poll.id}") do
expect(page).to have_content("#{poll.name}")
expect(page).to have_content("See ballot sheets list")
expect(page).to have_content("Add results")
end
end
end
context "Booth assignment" do
scenario "Try to access ballot sheets officing without booth assignment" do
login_as(poll_officer.user)
visit officing_poll_ballot_sheets_path(poll)
expect(page).to have_content "You don't have officing shifts today"
end
scenario "Access ballot sheets officing with one booth assignment" do
create(:poll_shift, :recount_scrutiny_task, officer: poll_officer, booth: booth,
date: Date.current)
create(:poll_officer_assignment, officer: poll_officer)
login_as(poll_officer.user)
set_officing_booth(booth)
visit officing_poll_ballot_sheets_path(poll)
expect(page).to have_content "#{poll.name}"
end
scenario "Access ballot sheets officing with multiple booth assignments", :with_frozen_time do
booth_2 = create(:poll_booth, polls: [poll])
create(:poll_shift, :recount_scrutiny_task, officer: poll_officer, booth: booth,
date: Date.current)
create(:poll_shift, :recount_scrutiny_task, officer: poll_officer, booth: booth_2,
date: Date.current)
create(:poll_officer_assignment, officer: poll_officer)
create(:poll_officer_assignment, officer: poll_officer)
login_as(poll_officer.user)
visit officing_poll_ballot_sheets_path(poll)
expect(page).to have_content "Choose your booth"
end
end
context "Index" do
before do
create(:poll_shift, :recount_scrutiny_task, officer: poll_officer, booth: booth,
date: Date.current)
login_as(poll_officer.user)
set_officing_booth(booth)
end
scenario "Ballot sheets are listed" do
officer_assignment = create(:poll_officer_assignment, officer: poll_officer)
ballot_sheet = create(:poll_ballot_sheet, poll: poll, officer_assignment: officer_assignment)
visit officing_poll_ballot_sheets_path(poll)
expect(page).to have_content "Ballot sheet #{ballot_sheet.id}"
end
end
context "New" do
before do
create(:poll_shift, :recount_scrutiny_task, officer: poll_officer, booth: booth,
date: Date.current)
create(:poll_officer_assignment, officer: poll_officer)
login_as(poll_officer.user)
set_officing_booth(booth)
end
scenario "Ballot sheet is saved" do
visit new_officing_poll_ballot_sheet_path(poll)
select "#{booth.name}", from: "officer_assignment_id"
fill_in "data", with: "1234;5678"
click_button "Save"
expect(page).to have_content(/Ballot sheet \d+/)
expect(page).to have_content(poll_officer.user.name)
expect(page).to have_content("1234;5678")
visit officing_poll_ballot_sheets_path(poll)
expect(page).to have_css "tbody tr", count: 1
end
scenario "Ballot sheet is not saved" do
visit new_officing_poll_ballot_sheet_path(poll)
select "#{booth.name}", from: "officer_assignment_id"
click_button "Save"
expect(page).to have_content("CSV data can't be blank")
visit officing_poll_ballot_sheets_path(poll)
expect(page).not_to have_css "tbody tr"
end
scenario "Shift booth has to be selected" do
visit new_officing_poll_ballot_sheet_path(poll)
fill_in "data", with: "1234;5678"
click_button "Save"
expect(page).to have_content "Officer assignment can't be blank"
end
end
context "Show" do
before do
create(:poll_shift, :recount_scrutiny_task, officer: poll_officer, booth: booth,
date: Date.current)
login_as(poll_officer.user)
set_officing_booth(booth)
end
scenario "Ballot sheet information is displayed" do
officer_assignment = create(:poll_officer_assignment, officer: poll_officer)
ballot_sheet = create(:poll_ballot_sheet, poll: poll, officer_assignment: officer_assignment)
visit officing_poll_ballot_sheet_path(poll, ballot_sheet)
expect(page).to have_content("Ballot sheet #{ballot_sheet.id}")
expect(page).to have_content(ballot_sheet.author)
expect(page).to have_content(ballot_sheet.data)
end
end
end