Files
nairobi/spec/features/budget_polls/voter_spec.rb
Javi Martín db97f9d08c Add and apply rubocop rules for empty lines
We were very inconsistent regarding these rules.

Personally I prefer no empty lines around blocks, clases, etc... as
recommended by the Ruby style guide [1], and they're the default values
in rubocop, so those are the settings I'm applying.

The exception is the `private` access modifier, since we were leaving
empty lines around it most of the time. That's the default rubocop rule
as well. Personally I don't have a strong preference about this one.


[1] https://rubystyle.guide/#empty-lines-around-bodies
2019-10-24 17:11:47 +02:00

143 lines
4.1 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, :current, 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", :js do
login_through_form_as_officer(officer.user)
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
expect(Poll::Voter.count).to eq(1)
expect(Poll::Voter.first.origin).to eq("booth")
visit root_path
click_link "Sign out"
login_as(admin.user)
visit admin_poll_recounts_path(poll)
within("#total_system") do
expect(page).to have_content "1"
end
within("#poll_booth_assignment_#{Poll::BoothAssignment.where(poll: poll, booth: booth).first.id}_recounts") do
expect(page).to have_content "1"
end
end
scenario "A citizen cannot vote offline again", :js do
login_through_form_as_officer(officer.user)
visit new_officing_residence_path
officing_verify_residence
within("#poll_#{poll.id}") do
click_button("Confirm vote")
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", :js do
login_through_form_as_officer(officer.user)
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)
find("div.ballot").hover
within("#budget_investment_#{investment.id}") do
expect(page).to have_content "You have already participated offline"
expect(page).to have_css(".add a", visible: false)
end
end
end
context "Online" do
scenario "A citizen can cast vote online", :js do
login_as(user)
visit budget_investment_path(budget, investment)
within("#budget_investment_#{investment.id}") do
find(".add a").click
expect(page).to have_content "Remove"
end
end
scenario "A citizen cannot vote online again", :js do
login_as(user)
visit budget_investment_path(budget, investment)
within("#budget_investment_#{investment.id}") do
find(".add a").click
expect(page).to have_content "Remove"
end
visit budget_investment_path(budget, investment)
find("div.ballot").hover
within("#budget_investment_#{investment.id}") do
expect(page).to have_content "Remove vote"
end
end
scenario "A citizen cannot vote offline after voting online", :js do
login_as(user)
visit budget_investment_path(budget, investment)
within("#budget_investment_#{investment.id}") do
find(".add a").click
expect(page).to have_content "Remove"
end
logout
login_through_form_as_officer(officer.user)
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