JavaScript is used by about 98% of web users, so by testing without it enabled, we're only testing that the application works for a very reduced number of users. We proceeded this way in the past because CONSUL started using Rails 4.2 and truncating the database between JavaScript tests with database cleaner, which made these tests terribly slow. When we upgraded to Rails 5.1 and introduced system tests, we started using database transactions in JavaScript tests, making these tests much faster. So now we can use JavaScript tests everywhere without critically slowing down our test suite.
134 lines
3.4 KiB
Ruby
134 lines
3.4 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin booths", :admin do
|
|
scenario "Index empty" do
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Voting booths"
|
|
click_link "Booths location"
|
|
end
|
|
|
|
expect(page).to have_content "There are no active booths for any upcoming poll."
|
|
end
|
|
|
|
scenario "Index" do
|
|
3.times { create(:poll_booth) }
|
|
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Voting booths"
|
|
click_link "Booths location"
|
|
end
|
|
|
|
booths = Poll::Booth.all
|
|
booths.each do |booth|
|
|
within("#booth_#{booth.id}") do
|
|
expect(page).to have_content booth.name
|
|
expect(page).to have_content booth.location
|
|
end
|
|
end
|
|
expect(page).not_to have_content "There are no booths"
|
|
end
|
|
|
|
scenario "Available" do
|
|
booth_for_current_poll = create(:poll_booth, polls: [create(:poll, :current)])
|
|
booth_for_expired_poll = create(:poll_booth, polls: [create(:poll, :expired)])
|
|
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Voting booths"
|
|
click_link "Manage shifts"
|
|
end
|
|
|
|
expect(page).to have_css(".booth", count: 1)
|
|
|
|
expect(page).to have_content booth_for_current_poll.name
|
|
expect(page).not_to have_content booth_for_expired_poll.name
|
|
expect(page).not_to have_link "Edit booth"
|
|
end
|
|
|
|
scenario "Show" do
|
|
booth = create(:poll_booth)
|
|
|
|
visit admin_booths_path
|
|
|
|
expect(page).to have_content booth.name
|
|
expect(page).to have_content booth.location
|
|
end
|
|
|
|
scenario "Create" do
|
|
visit admin_booths_path
|
|
click_link "Add booth"
|
|
|
|
fill_in "poll_booth_name", with: "Upcoming booth"
|
|
fill_in "poll_booth_location", with: "39th Street, number 2, ground floor"
|
|
click_button "Create booth"
|
|
|
|
expect(page).to have_content "Booth created successfully"
|
|
|
|
visit admin_booths_path
|
|
expect(page).to have_content "Upcoming booth"
|
|
expect(page).to have_content "39th Street, number 2, ground floor"
|
|
end
|
|
|
|
scenario "Edit" do
|
|
poll = create(:poll, :current)
|
|
booth = create(:poll_booth, polls: [poll])
|
|
|
|
visit admin_booths_path
|
|
|
|
within("#booth_#{booth.id}") do
|
|
expect(page).not_to have_link "Manage shifts"
|
|
click_link "Edit booth"
|
|
end
|
|
|
|
fill_in "poll_booth_name", with: "Next booth"
|
|
fill_in "poll_booth_location", with: "40th Street, number 1, firts floor"
|
|
click_button "Update booth"
|
|
|
|
expect(page).to have_content "Booth updated successfully"
|
|
|
|
visit admin_booths_path
|
|
|
|
within("#booth_#{booth.id}") do
|
|
expect(page).to have_content "Next booth"
|
|
expect(page).to have_content "40th Street, number 1, firts floor"
|
|
end
|
|
end
|
|
|
|
scenario "Back link go back to available list when manage shifts" do
|
|
poll = create(:poll, :current)
|
|
booth = create(:poll_booth, polls: [poll])
|
|
|
|
visit available_admin_booths_path
|
|
|
|
within("#booth_#{booth.id}") do
|
|
click_link "Manage shifts"
|
|
end
|
|
|
|
click_link "Go back"
|
|
expect(page).to have_current_path(available_admin_booths_path)
|
|
end
|
|
|
|
scenario "Search" do
|
|
booth = create(:poll_booth)
|
|
|
|
visit admin_booths_path
|
|
|
|
fill_in "search", with: booth.name
|
|
click_button "Search"
|
|
expect(page).to have_css(".booth", count: 1)
|
|
|
|
fill_in "search", with: booth.location
|
|
click_button "Search"
|
|
expect(page).to have_css(".booth", count: 1)
|
|
|
|
fill_in "search", with: "Wrong search criteria"
|
|
click_button "Search"
|
|
expect(page).to have_content "There are no active booths for any upcoming poll."
|
|
end
|
|
end
|