<%= render Polls::PollHeaderComponent.new(poll) %>
- <%= render "poll_subnav" %>
+ <%= render "polls/poll_subnav" %>
diff --git a/spec/components/polls/results_component_spec.rb b/spec/components/polls/results_component_spec.rb
new file mode 100644
index 000000000..26c086215
--- /dev/null
+++ b/spec/components/polls/results_component_spec.rb
@@ -0,0 +1,49 @@
+require "rails_helper"
+
+describe Polls::ResultsComponent do
+ let(:poll) { create(:poll) }
+
+ let(:question_1) { create(:poll_question, poll: poll, title: "Do you like Consul Democracy?") }
+ let(:option_yes) { create(:poll_question_option, question: question_1, title: "Yes") }
+ let(:option_no) { create(:poll_question_option, question: question_1, title: "No") }
+
+ let(:question_2) { create(:poll_question, poll: poll, title: "What's your favorite color?") }
+ let(:option_blue) { create(:poll_question_option, question: question_2, title: "Blue") }
+ let(:option_green) { create(:poll_question_option, question: question_2, title: "Green") }
+ let(:option_yellow) { create(:poll_question_option, question: question_2, title: "Yellow") }
+
+ it "renders results content" do
+ create_list(:poll_answer, 2, question: question_1, option: option_yes)
+ create(:poll_answer, question: question_1, option: option_no)
+
+ create(:poll_answer, question: question_2, option: option_blue)
+ create(:poll_answer, question: question_2, option: option_green)
+ create(:poll_answer, question: question_2, option: option_yellow)
+
+ render_inline Polls::ResultsComponent.new(poll)
+
+ expect(page).to have_content "Do you like Consul Democracy?"
+
+ page.find("#question_#{question_1.id}_results_table") do |table|
+ expect(table).to have_css "#option_#{option_yes.id}_result", text: "2 (66.67%)", normalize_ws: true
+ expect(table).to have_css "#option_#{option_no.id}_result", text: "1 (33.33%)", normalize_ws: true
+ end
+
+ expect(page).to have_content "What's your favorite color?"
+
+ page.find("#question_#{question_2.id}_results_table") do |table|
+ expect(table).to have_css "#option_#{option_blue.id}_result", text: "1 (33.33%)", normalize_ws: true
+ expect(table).to have_css "#option_#{option_green.id}_result", text: "1 (33.33%)", normalize_ws: true
+ expect(table).to have_css "#option_#{option_yellow.id}_result", text: "1 (33.33%)", normalize_ws: true
+ end
+ end
+
+ it "renders results for polls with questions but without answers" do
+ poll = create(:poll, :expired, results_enabled: true)
+ question = create(:poll_question, poll: poll)
+
+ render_inline Polls::ResultsComponent.new(poll)
+
+ expect(page).to have_content question.title
+ end
+end
diff --git a/spec/system/polls/polls_spec.rb b/spec/system/polls/polls_spec.rb
index c18cbbdd2..d9d3fdd42 100644
--- a/spec/system/polls/polls_spec.rb
+++ b/spec/system/polls/polls_spec.rb
@@ -180,15 +180,11 @@ describe "Polls" do
scenario "Level 2 users answering" do
poll.update!(geozone_restricted_to: [geozone])
- create(:poll_question, :yes_no, poll: poll, title: "Do you agree?")
+ question = create(:poll_question, :yes_no, poll: poll, title: "Do you agree?")
login_as(create(:user, :level_two, geozone: geozone))
- visit poll_path(poll)
+ vote_for_poll_via_web(poll, question => "Yes")
- within_fieldset("Do you agree?") { choose "Yes" }
- click_button "Vote"
-
- expect(page).to have_content "Thank you for voting!"
expect(page).to have_content "You have already participated in this poll. " \
"If you vote again it will be overwritten."
diff --git a/spec/system/polls/results_spec.rb b/spec/system/polls/results_spec.rb
deleted file mode 100644
index 9e269d3ff..000000000
--- a/spec/system/polls/results_spec.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-require "rails_helper"
-
-describe "Poll Results" do
- scenario "List each Poll question" 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)
- option1 = create(:poll_question_option, question: question1, title: "Yes")
- option2 = create(:poll_question_option, question: question1, title: "No")
-
- question2 = create(:poll_question, poll: poll)
- option3 = create(:poll_question_option, question: question2, title: "Blue")
- option4 = create(:poll_question_option, question: question2, title: "Green")
- option5 = create(:poll_question_option, question: question2, title: "Yellow")
-
- login_as user1
- vote_for_poll_via_web(poll, question1 => "Yes", question2 => "Blue")
- logout
-
- login_as user2
- vote_for_poll_via_web(poll, question1 => "Yes", question2 => "Green")
- logout
-
- login_as user3
- vote_for_poll_via_web(poll, question1 => "No", question2 => "Yellow")
- logout
-
- travel_to(poll.ends_at + 1.day)
-
- 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("#option_#{option1.id}_result")).to have_content("2 (66.67%)")
- expect(find("#option_#{option2.id}_result")).to have_content("1 (33.33%)")
- end
-
- within("#question_#{question2.id}_results_table") do
- expect(find("#option_#{option3.id}_result")).to have_content("1 (33.33%)")
- expect(find("#option_#{option4.id}_result")).to have_content("1 (33.33%)")
- expect(find("#option_#{option5.id}_result")).to have_content("1 (33.33%)")
- end
- end
-
- scenario "Results for polls with questions but without options" 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
diff --git a/spec/system/polls/voter_spec.rb b/spec/system/polls/voter_spec.rb
index 0a4f2947f..291fec82c 100644
--- a/spec/system/polls/voter_spec.rb
+++ b/spec/system/polls/voter_spec.rb
@@ -18,12 +18,9 @@ describe "Voter" do
user = create(:user, :level_two)
login_as user
- visit poll_path(poll)
- within_fieldset("Is this question stupid?") { choose "Yes" }
- click_button "Vote"
+ vote_for_poll_via_web(poll, question => "Yes")
- expect(page).to have_content "Thank you for voting!"
expect(page).to have_content "You have already participated in this poll. " \
"If you vote again it will be overwritten."
end