370 lines
11 KiB
Ruby
370 lines
11 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"
|
|
|
|
start_date = 1.week.from_now
|
|
end_date = 2.weeks.from_now
|
|
|
|
fill_in "poll_name", with: "Upcoming poll"
|
|
fill_in 'poll_starts_at', with: start_date.strftime("%d/%m/%Y")
|
|
fill_in 'poll_ends_at', with: end_date.strftime("%d/%m/%Y")
|
|
fill_in 'poll_summary', with: "Upcoming poll's summary. This poll..."
|
|
fill_in 'poll_description', with: "Upcomming poll's description. This poll..."
|
|
|
|
expect(page).to_not have_css("#poll_results_enabled")
|
|
expect(page).to_not have_css("#poll_stats_enabled")
|
|
|
|
click_button "Create poll"
|
|
|
|
expect(page).to have_content "Poll created successfully"
|
|
expect(page).to have_content "Upcoming poll"
|
|
expect(page).to have_content I18n.l(start_date.to_date)
|
|
expect(page).to have_content I18n.l(end_date.to_date)
|
|
end
|
|
|
|
scenario "Edit" do
|
|
poll = create(:poll)
|
|
create(:image, imageable: poll)
|
|
|
|
visit admin_poll_path(poll)
|
|
click_link "Edit poll"
|
|
|
|
end_date = 1.year.from_now
|
|
|
|
expect(page).to have_css("img[alt='#{poll.image.title}']")
|
|
|
|
expect(page).to have_css("#poll_results_enabled")
|
|
expect(page).to have_css("#poll_stats_enabled")
|
|
|
|
fill_in "poll_name", with: "Next Poll"
|
|
fill_in 'poll_ends_at', with: end_date.strftime("%d/%m/%Y")
|
|
check 'poll_results_enabled'
|
|
check 'poll_stats_enabled'
|
|
|
|
click_button "Update poll"
|
|
|
|
expect(page).to have_content "Poll updated successfully"
|
|
expect(page).to have_content "Next Poll"
|
|
expect(page).to have_content I18n.l(end_date.to_date)
|
|
|
|
click_link "Edit poll"
|
|
|
|
expect(page).to have_field('poll_results_enabled', checked: true)
|
|
expect(page).to have_field('poll_stats_enabled', checked: true)
|
|
|
|
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" do
|
|
poll = create(:poll)
|
|
visit admin_poll_path(poll)
|
|
click_link "Booths (0)"
|
|
|
|
expect(page).to have_content "There are no booths assigned to this poll."
|
|
end
|
|
|
|
scenario "Booth list" 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
|
|
|
|
poll.booth_assignments.each do |ba|
|
|
within("#poll_booth_assignment_#{ba.id}") do
|
|
expect(page).to have_content ba.booth.name
|
|
expect(page).to have_content ba.booth.location
|
|
end
|
|
end
|
|
expect(page).to_not have_content "There are no booths assigned to this poll."
|
|
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
|
|
|
|
context "Questions" do
|
|
|
|
context "Poll show" do
|
|
|
|
scenario "Question list", :js do
|
|
poll = create(:poll)
|
|
question = create(:poll_question, poll: poll)
|
|
other_question = create(:poll_question)
|
|
|
|
visit admin_poll_path(poll)
|
|
|
|
expect(page).to have_content "Questions (1)"
|
|
expect(page).to have_content question.title
|
|
expect(page).to_not have_content other_question.title
|
|
expect(page).to_not have_content "There are no questions assigned to this poll"
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
context "Recounting" do
|
|
context "Poll show" do
|
|
scenario "No recounts", :js do
|
|
poll = create(:poll)
|
|
visit admin_poll_path(poll)
|
|
click_link "Recounting"
|
|
|
|
expect(page).to have_content "There is nothing to be recounted"
|
|
end
|
|
|
|
scenario "Recounts list", :js do
|
|
poll = create(:poll)
|
|
booth_assignment = create(:poll_booth_assignment, poll: poll)
|
|
booth_assignment_recounted = create(:poll_booth_assignment, poll: poll)
|
|
booth_assignment_final_recounted = create(:poll_booth_assignment, poll: poll)
|
|
|
|
3.times do |i|
|
|
create(:poll_recount,
|
|
booth_assignment: booth_assignment,
|
|
date: poll.starts_at + i.days,
|
|
total_amount: 21)
|
|
end
|
|
|
|
2.times { create(:poll_voter, booth_assignment: booth_assignment_final_recounted) }
|
|
|
|
create(:poll_recount,
|
|
booth_assignment: booth_assignment_final_recounted,
|
|
date: poll.ends_at,
|
|
total_amount: 55555)
|
|
|
|
visit admin_poll_path(poll)
|
|
|
|
click_link "Recounting"
|
|
|
|
expect(page).to have_css ".booth_recounts", count: 3
|
|
|
|
within("#poll_booth_assignment_#{booth_assignment.id}_recounts") do
|
|
expect(page).to have_content(booth_assignment.booth.name)
|
|
expect(page).to have_content('63')
|
|
end
|
|
|
|
within("#poll_booth_assignment_#{booth_assignment_recounted.id}_recounts") do
|
|
expect(page).to have_content(booth_assignment_recounted.booth.name)
|
|
expect(page).to have_content('-')
|
|
end
|
|
|
|
within("#poll_booth_assignment_#{booth_assignment_final_recounted.id}_recounts") do
|
|
expect(page).to have_content(booth_assignment_final_recounted.booth.name)
|
|
expect(page).to have_content('55555')
|
|
expect(page).to have_content('2')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Results" do
|
|
context "Poll show" do
|
|
scenario "No results", :js do
|
|
poll = create(:poll)
|
|
visit admin_poll_path(poll)
|
|
click_link "Results"
|
|
|
|
expect(page).to have_content "There are no results"
|
|
end
|
|
|
|
scenario "Results by answer", :js do
|
|
poll = create(:poll)
|
|
booth_assignment_1 = create(:poll_booth_assignment, poll: poll)
|
|
booth_assignment_2 = create(:poll_booth_assignment, poll: poll)
|
|
booth_assignment_3 = create(:poll_booth_assignment, poll: poll)
|
|
|
|
question_1 = create(:poll_question, poll: poll)
|
|
create(:poll_question_answer, title: 'Yes', question: question_1)
|
|
create(:poll_question_answer, title: 'No', question: question_1)
|
|
|
|
question_2 = create(:poll_question, poll: poll)
|
|
create(:poll_question_answer, title: 'Today', question: question_2)
|
|
create(:poll_question_answer, title: 'Tomorrow', question: question_2)
|
|
|
|
[booth_assignment_1, booth_assignment_2, booth_assignment_3].each do |ba|
|
|
create(:poll_partial_result,
|
|
booth_assignment: ba,
|
|
question: question_1,
|
|
answer: 'Yes',
|
|
amount: 11)
|
|
create(:poll_partial_result,
|
|
booth_assignment: ba,
|
|
question: question_2,
|
|
answer: 'Tomorrow',
|
|
amount: 5)
|
|
end
|
|
create(:poll_recount,
|
|
booth_assignment: booth_assignment_1,
|
|
white_amount: 21,
|
|
null_amount: 44,
|
|
total_amount: 66)
|
|
|
|
visit admin_poll_path(poll)
|
|
|
|
click_link "Results"
|
|
|
|
expect(page).to have_content(question_1.title)
|
|
question_1.question_answers.each_with_index do |answer, i|
|
|
within("#question_#{question_1.id}_#{i}_result") do
|
|
expect(page).to have_content(answer.title)
|
|
expect(page).to have_content([33, 0][i])
|
|
end
|
|
end
|
|
|
|
expect(page).to have_content(question_2.title)
|
|
question_2.question_answers.each_with_index do |answer, i|
|
|
within("#question_#{question_2.id}_#{i}_result") do
|
|
expect(page).to have_content(answer.title)
|
|
expect(page).to have_content([0, 15][i])
|
|
end
|
|
end
|
|
|
|
within('#white_results') { expect(page).to have_content('21') }
|
|
within('#null_results') { expect(page).to have_content('44') }
|
|
within('#total_results') { expect(page).to have_content('66') }
|
|
end
|
|
|
|
scenario "Link to results by booth" do
|
|
poll = create(:poll)
|
|
booth_assignment1 = create(:poll_booth_assignment, poll: poll)
|
|
booth_assignment2 = create(:poll_booth_assignment, poll: poll)
|
|
|
|
question = create(:poll_question, poll: poll)
|
|
create(:poll_question_answer, title: 'Yes', question: question)
|
|
create(:poll_question_answer, title: 'No', question: question)
|
|
|
|
create(:poll_partial_result,
|
|
booth_assignment: booth_assignment1,
|
|
question: question,
|
|
answer: 'Yes',
|
|
amount: 5)
|
|
|
|
create(:poll_partial_result,
|
|
booth_assignment: booth_assignment2,
|
|
question: question,
|
|
answer: 'Yes',
|
|
amount: 6)
|
|
|
|
visit admin_poll_path(poll)
|
|
|
|
click_link "Results"
|
|
|
|
expect(page).to have_link("See results", count: 2)
|
|
|
|
within("#booth_assignment_#{booth_assignment1.id}_result") do
|
|
click_link "See results"
|
|
end
|
|
|
|
expect(page).to have_content booth_assignment1.booth.name
|
|
expect(page).to have_content "Results"
|
|
expect(page).to have_content "Yes"
|
|
expect(page).to have_content "5"
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|