Files
nairobi/spec/system/officing_spec.rb
Javi Martín 1593a150e7 Move in_browser expectations inside the same block
This way the code is easier to follow, and we avoid having simultaneous
requests on different browser sessions, which in theory shouldn't affect
the application, but the test might be a bit more robust this way.
2025-03-26 16:27:08 +01:00

174 lines
5.8 KiB
Ruby

require "rails_helper"
require "sessions_helper"
describe "Poll Officing" do
let(:user) { create(:user) }
scenario "Access as regular user is not authorized" do
login_as(user)
visit officing_root_path
expect(page).not_to have_current_path(officing_root_path)
expect(page).to have_current_path(root_path)
expect(page).to have_content "You do not have permission to access this page"
end
scenario "Access as moderator is not authorized" do
create(:moderator, user: user)
login_as(user)
visit officing_root_path
expect(page).not_to have_current_path(officing_root_path)
expect(page).to have_current_path(root_path)
expect(page).to have_content "You do not have permission to access this page"
end
scenario "Access as manager is not authorized" do
create(:manager, user: user)
login_as(user)
visit officing_root_path
expect(page).not_to have_current_path(officing_root_path)
expect(page).to have_current_path(root_path)
expect(page).to have_content "You do not have permission to access this page"
end
scenario "Access as SDG manager is not authorized" do
Setting["feature.sdg"] = true
create(:sdg_manager, user: user)
login_as(user)
visit officing_root_path
expect(page).not_to have_current_path(officing_root_path)
expect(page).to have_current_path(root_path)
expect(page).to have_content "You do not have permission to access this page"
end
scenario "Access as a valuator is not authorized" do
create(:valuator, user: user)
login_as(user)
visit officing_root_path
expect(page).not_to have_current_path(officing_root_path)
expect(page).to have_current_path(root_path)
expect(page).to have_content "You do not have permission to access this page"
end
scenario "Access as an administrator is not authorized" do
create(:administrator, user: user)
login_as(user)
visit officing_root_path
expect(page).not_to have_current_path(officing_root_path)
expect(page).to have_current_path(root_path)
expect(page).to have_content "You do not have permission to access this page"
end
scenario "Access as an administrator with poll officer role is authorized" do
create(:administrator, user: user)
create(:poll_officer, user: user)
login_as(user)
visit root_path
click_link "Menu"
click_link "Polling officers"
expect(page).to have_current_path(officing_root_path)
expect(page).not_to have_content "You do not have permission to access this page"
end
scenario "Access as a poll officer is authorized" do
create(:poll_officer, user: user)
login_as(user)
visit root_path
click_link "Menu"
click_link "Polling officers"
expect(page).to have_current_path(officing_root_path)
expect(page).to have_css "#officing_menu"
expect(page).not_to have_link "Polling officers"
expect(page).not_to have_css "#valuation_menu"
expect(page).not_to have_css "#admin_menu"
expect(page).not_to have_css "#moderation_menu"
expect(page).not_to have_content "You do not have permission to access this page"
end
scenario "Officing dashboard available for multiple sessions", :with_frozen_time do
poll = create(:poll)
booth = create(:poll_booth)
booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth)
officer1 = create(:poll_officer)
officer2 = create(:poll_officer)
create(:poll_shift, officer: officer1, booth: booth, date: Date.current, task: :vote_collection)
create(:poll_shift, officer: officer2, booth: booth, date: Date.current, task: :vote_collection)
create(:poll_officer_assignment, booth_assignment: booth_assignment, officer: officer1)
create(:poll_officer_assignment, booth_assignment: booth_assignment, officer: officer2)
in_browser(:one) do
login_as officer1.user
visit officing_root_path
expect(page).to have_content "Here you can validate user documents and store voting results"
end
in_browser(:two) do
login_as officer2.user
visit officing_root_path
expect(page).to have_content "Here you can validate user documents and store voting results"
end
in_browser(:one) do
visit new_officing_residence_path
expect(page).to have_css "#residence_document_type"
select "DNI", from: "residence_document_type"
fill_in "residence_document_number", with: "12345678Z"
fill_in "residence_year_of_birth", with: "1980"
click_button "Validate document"
expect(page).to have_content "Document verified with Census"
click_button "Confirm vote"
expect(page).to have_content "Vote introduced!"
expect(Poll::Voter.where(document_number: "12345678Z",
poll_id: poll,
origin: "booth",
officer_id: officer1)
.count).to be(1)
visit final_officing_polls_path
expect(page).to have_content("Polls ready for final recounting")
end
in_browser(:two) do
visit new_officing_residence_path
expect(page).to have_css "#residence_document_type"
select "DNI", from: "residence_document_type"
fill_in "residence_document_number", with: "12345678Y"
fill_in "residence_year_of_birth", with: "1980"
click_button "Validate document"
expect(page).to have_content "Document verified with Census"
click_button "Confirm vote"
expect(page).to have_content "Vote introduced!"
expect(Poll::Voter.where(document_number: "12345678Y",
poll_id: poll,
origin: "booth",
officer_id: officer2)
.count).to be(1)
visit final_officing_polls_path
expect(page).to have_content("Polls ready for final recounting")
end
end
end