As mentioned in commits likea586ba806,a7664ad81,006128da5,b41fbfa52andc480cdd91, accessing the database after starting the browser with the `visit` method sometimes results in database corruption and failing tests on our CI due to the process running the test accessing the database after the process running the browser has started. In these cases, there's no need to check the database; we're already checking the application behavior that shows that the voters have been correctly created.
141 lines
3.8 KiB
Ruby
141 lines
3.8 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "BudgetPolls", :with_frozen_time do
|
|
let(:budget) { create(:budget, :balloting) }
|
|
let(:investment) { create(:budget_investment, :selected, budget: budget) }
|
|
let(:poll) { create(:poll, budget: budget) }
|
|
let(:booth) { create(:poll_booth) }
|
|
let(:officer) { create(:poll_officer) }
|
|
let(:admin) { create(:administrator) }
|
|
let!(:user) { create(:user, :in_census) }
|
|
|
|
before do
|
|
create(:poll_shift, officer: officer, booth: booth, date: Date.current, task: :vote_collection)
|
|
create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth, date: Date.current)
|
|
end
|
|
|
|
context "Offline" do
|
|
scenario "A citizen can cast a paper vote" do
|
|
login_through_form_as_officer(officer)
|
|
|
|
visit new_officing_residence_path
|
|
officing_verify_residence
|
|
|
|
expect(page).to have_content poll.name
|
|
|
|
within("#poll_#{poll.id}") do
|
|
click_button("Confirm vote")
|
|
expect(page).not_to have_button("Confirm vote")
|
|
expect(page).to have_content "Vote introduced!"
|
|
end
|
|
|
|
logout
|
|
login_as(admin.user)
|
|
visit admin_poll_recounts_path(poll)
|
|
|
|
within("#total_system") do
|
|
expect(page).to have_content "1"
|
|
end
|
|
|
|
within "tr", text: booth.name do
|
|
expect(page).to have_content "1"
|
|
end
|
|
end
|
|
|
|
scenario "A citizen cannot vote offline again" do
|
|
login_through_form_as_officer(officer)
|
|
|
|
visit new_officing_residence_path
|
|
officing_verify_residence
|
|
|
|
within("#poll_#{poll.id}") do
|
|
click_button("Confirm vote")
|
|
|
|
expect(page).to have_content "Vote introduced"
|
|
end
|
|
|
|
visit new_officing_residence_path
|
|
officing_verify_residence
|
|
|
|
within("#poll_#{poll.id}") do
|
|
expect(page).to have_content "Has already participated in this poll"
|
|
end
|
|
end
|
|
|
|
scenario "A citizen cannot vote online after voting offline" do
|
|
login_through_form_as_officer(officer)
|
|
|
|
visit new_officing_residence_path
|
|
officing_verify_residence
|
|
|
|
within("#poll_#{poll.id}") do
|
|
click_button("Confirm vote")
|
|
end
|
|
|
|
expect(page).to have_content "Vote introduced!"
|
|
|
|
login_as(user)
|
|
|
|
visit budget_investment_path(budget, investment)
|
|
|
|
within("#budget_investment_#{investment.id}") do
|
|
click_button "Vote"
|
|
|
|
expect(page).to have_content "You have already participated offline"
|
|
expect(page).not_to have_button "Vote", disabled: :all
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Online" do
|
|
scenario "A citizen can cast vote online" do
|
|
login_as(user)
|
|
visit budget_investment_path(budget, investment)
|
|
|
|
within("#budget_investment_#{investment.id}") do
|
|
click_button "Vote"
|
|
expect(page).to have_content "Remove"
|
|
end
|
|
end
|
|
|
|
scenario "A citizen cannot vote online again" do
|
|
login_as(user)
|
|
visit budget_investment_path(budget, investment)
|
|
|
|
within("#budget_investment_#{investment.id}") do
|
|
click_button "Vote"
|
|
expect(page).to have_content "Remove"
|
|
end
|
|
|
|
refresh
|
|
|
|
within("#budget_investment_#{investment.id}") do
|
|
expect(page).to have_content "Remove vote"
|
|
end
|
|
end
|
|
|
|
scenario "A citizen cannot vote offline after voting online" do
|
|
login_as(user)
|
|
visit budget_investment_path(budget, investment)
|
|
|
|
within("#budget_investment_#{investment.id}") do
|
|
click_button "Vote"
|
|
expect(page).to have_content "Remove"
|
|
end
|
|
|
|
logout
|
|
login_through_form_as_officer(officer)
|
|
|
|
visit new_officing_residence_path
|
|
officing_verify_residence
|
|
|
|
expect(page).to have_content poll.name
|
|
|
|
within("#poll_#{poll.id}") do
|
|
expect(page).not_to have_button("Confirm vote")
|
|
expect(page).to have_content("Has already participated in this poll")
|
|
end
|
|
end
|
|
end
|
|
end
|