Files
nairobi/spec/features/polls/results_spec.rb
Julian Herrero 629c75ceeb Avoid error for polls results
When a poll is created, and any of the questions for that poll doesn't
have any answer created, the following exception was raised when
trying to see the results:

Failure/Error: question_answers.max_by {|answer| answer.total_votes }.id

  ActionView::Template::Error:
    undefined method `id' for nil:NilClass
      ./app/models/poll/question.rb:66:in `most_voted_answer_id'
2019-10-31 13:48:42 +01:00

65 lines
2.2 KiB
Ruby

require "rails_helper"
describe "Poll Results" do
scenario "List each Poll question", :js do
user1 = create(:user, :level_two)
user2 = create(:user, :level_two)
user3 = create(:user, :level_two)
poll = create(:poll, results_enabled: true)
question1 = create(:poll_question, poll: poll)
answer1 = create(:poll_question_answer, question: question1, title: "Yes")
answer2 = create(:poll_question_answer, question: question1, title: "No")
question2 = create(:poll_question, poll: poll)
answer3 = create(:poll_question_answer, question: question2, title: "Blue")
answer4 = create(:poll_question_answer, question: question2, title: "Green")
answer5 = create(:poll_question_answer, question: question2, title: "Yellow")
login_as user1
vote_for_poll_via_web(poll, question1, "Yes")
vote_for_poll_via_web(poll, question2, "Blue")
expect(Poll::Voter.count).to eq(1)
logout
login_as user2
vote_for_poll_via_web(poll, question1, "Yes")
vote_for_poll_via_web(poll, question2, "Green")
expect(Poll::Voter.count).to eq(2)
logout
login_as user3
vote_for_poll_via_web(poll, question1, "No")
vote_for_poll_via_web(poll, question2, "Yellow")
expect(Poll::Voter.count).to eq(3)
logout
poll.update!(ends_at: 1.day.ago)
visit results_poll_path(poll)
expect(page).to have_content(question1.title)
expect(page).to have_content(question2.title)
within("#question_#{question1.id}_results_table") do
expect(find("#answer_#{answer1.id}_result")).to have_content("2 (66.67%)")
expect(find("#answer_#{answer2.id}_result")).to have_content("1 (33.33%)")
end
within("#question_#{question2.id}_results_table") do
expect(find("#answer_#{answer3.id}_result")).to have_content("1 (33.33%)")
expect(find("#answer_#{answer4.id}_result")).to have_content("1 (33.33%)")
expect(find("#answer_#{answer5.id}_result")).to have_content("1 (33.33%)")
end
end
scenario "Results for polls with questions but without answers" do
poll = create(:poll, :expired, results_enabled: true)
question = create(:poll_question, poll: poll)
visit results_poll_path(poll)
expect(page).to have_content question.title
end
end