Files
grecia/spec/components/polls/results/question_component_spec.rb
taitus f3050a1aa5 Manage correctly results and stats for open-ended questions
Note that we are not including Poll::PartialResults for open-ended
questions resutls. The reason is that we do not contemplate the
possibility of there being open questions in booths. Manually
counting and introducing the votes in the system is not feasible.
2025-10-16 14:26:30 +02:00

48 lines
1.7 KiB
Ruby

require "rails_helper"
describe Polls::Results::QuestionComponent do
context "question that accepts options" do
let(:question) { create(:poll_question, :yes_no) }
let(:option_yes) { question.question_options.find_by(title: "Yes") }
let(:option_no) { question.question_options.find_by(title: "No") }
it "renders results table content" do
create(:poll_answer, question: question, option: option_yes)
create(:poll_answer, question: question, option: option_no)
render_inline Polls::Results::QuestionComponent.new(question)
expect(page).to have_table with_rows: [{ "Most voted answer: Yes" => "1 (50.0%)",
"No" => "1 (50.0%)" }]
page.find("table") do |table|
expect(table).to have_css "th.win", count: 1
expect(table).to have_css "td.win", count: 1
end
end
end
context "question that does not accept options" do
let(:open_ended_question) { create(:poll_question_open) }
it "renders open_ended headers and empty counts when there are no participants" do
render_inline Polls::Results::QuestionComponent.new(open_ended_question)
expect(page).to have_table with_rows: [{ "Valid" => "0 (0.0%)",
"Blank" => "0 (0.0%)" }]
end
it "renders counts and percentages provided by the model metrics" do
allow(open_ended_question).to receive_messages(
open_ended_valid_answers_count: 3,
open_ended_blank_answers_count: 1
)
render_inline Polls::Results::QuestionComponent.new(open_ended_question)
expect(page).to have_table with_rows: [{ "Valid" => "3 (75.0%)",
"Blank" => "1 (25.0%)" }]
end
end
end