157 lines
3.5 KiB
Ruby
157 lines
3.5 KiB
Ruby
require 'rails_helper'
|
|
|
|
feature 'Admin polls' do
|
|
|
|
background do
|
|
admin = create(:administrator)
|
|
login_as(admin.user)
|
|
end
|
|
|
|
scenario 'Index empty', :js do
|
|
visit admin_root_path
|
|
|
|
click_link "Polls"
|
|
within('#polls_menu') do
|
|
click_link "Polls"
|
|
end
|
|
|
|
expect(page).to have_content "There are no polls"
|
|
end
|
|
|
|
scenario 'Index', :js do
|
|
3.times { create(:poll) }
|
|
|
|
visit admin_root_path
|
|
|
|
click_link "Polls"
|
|
within('#polls_menu') do
|
|
click_link "Polls"
|
|
end
|
|
|
|
expect(page).to have_css ".poll", count: 3
|
|
|
|
polls = Poll.all
|
|
polls.each do |poll|
|
|
within("#poll_#{poll.id}") do
|
|
expect(page).to have_content poll.name
|
|
end
|
|
end
|
|
expect(page).to_not have_content "There are no polls"
|
|
end
|
|
|
|
scenario 'Show' do
|
|
poll = create(:poll)
|
|
|
|
visit admin_polls_path
|
|
click_link poll.name
|
|
|
|
expect(page).to have_content poll.name
|
|
end
|
|
|
|
scenario "Create" do
|
|
visit admin_polls_path
|
|
click_link "Create poll"
|
|
|
|
fill_in "poll_name", with: "Upcoming poll"
|
|
click_button "Create poll"
|
|
|
|
expect(page).to have_content "Poll created successfully"
|
|
expect(page).to have_content "Upcoming poll"
|
|
end
|
|
|
|
scenario "Edit" do
|
|
poll = create(:poll)
|
|
|
|
visit admin_poll_path(poll)
|
|
click_link "Edit"
|
|
|
|
fill_in "poll_name", with: "Next Poll"
|
|
click_button "Update poll"
|
|
|
|
expect(page).to have_content "Poll updated successfully"
|
|
expect(page).to have_content "Next Poll"
|
|
end
|
|
|
|
scenario 'Edit from index' do
|
|
poll = create(:poll)
|
|
visit admin_polls_path
|
|
|
|
within("#poll_#{poll.id}") do
|
|
click_link "Edit"
|
|
end
|
|
|
|
expect(current_path).to eq(edit_admin_poll_path(poll))
|
|
end
|
|
|
|
context "Booths" do
|
|
|
|
context "Poll show" do
|
|
|
|
scenario "No booths", :js do
|
|
poll = create(:poll)
|
|
visit admin_poll_path(poll)
|
|
click_link "Booths (0)"
|
|
|
|
expect(page).to have_content "There are no booths in this poll."
|
|
end
|
|
|
|
scenario "Booth list", :js do
|
|
poll = create(:poll)
|
|
3.times { create(:poll_booth, polls: [poll]) }
|
|
|
|
visit admin_poll_path(poll)
|
|
click_link "Booths (3)"
|
|
|
|
expect(page).to have_css ".booth", count: 3
|
|
|
|
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).to_not have_content "There are no booths"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Officers" do
|
|
|
|
context "Poll show" do
|
|
|
|
scenario "No officers", :js do
|
|
poll = create(:poll)
|
|
visit admin_poll_path(poll)
|
|
click_link "Officers (0)"
|
|
|
|
expect(page).to have_content "There are no officers assigned to this poll"
|
|
end
|
|
|
|
scenario "Officer list", :js do
|
|
poll = create(:poll)
|
|
booth = create(:poll_booth, polls: [poll])
|
|
|
|
booth.booth_assignments.each do |booth_assignment|
|
|
3.times {create(:poll_officer_assignment, booth_assignment: booth_assignment) }
|
|
end
|
|
|
|
visit admin_poll_path(poll)
|
|
|
|
click_link "Officers (3)"
|
|
|
|
expect(page).to have_css ".officer", count: 3
|
|
|
|
officers = Poll::Officer.all
|
|
officers.each do |officer|
|
|
within("#officer_#{officer.id}") do
|
|
expect(page).to have_content officer.name
|
|
expect(page).to have_content officer.email
|
|
end
|
|
end
|
|
expect(page).to_not have_content "There are no officers assigned to this poll"
|
|
end
|
|
end
|
|
end
|
|
|
|
end |