require "rails_helper" describe "Polls" do let!(:proposal) { create(:proposal, :draft) } before { login_as(proposal.author) } scenario "Has a link to polls feature" do visit proposal_dashboard_path(proposal) expect(page).to have_link("Polls") end scenario "Create a poll" do visit proposal_dashboard_path(proposal) click_link "Polls" click_link "Create poll" start_date = 1.week.from_now end_date = 2.weeks.from_now fill_in "poll_name", with: "Proposal 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_description", with: "Proposal's poll description. This poll..." expect(page).not_to have_css("#poll_results_enabled") expect(page).not_to have_css("#poll_stats_enabled") click_link "Add question" fill_in "Question", with: "First question" click_link "Add answer" fill_in "Answer", with: "First answer" click_button "Create poll" expect(page).to have_content "Poll created successfully" expect(page).to have_content "Proposal poll" expect(page).to have_content I18n.l(start_date.to_date) end describe "Datepicker" do scenario "displays the expected format when changing the date field" do visit new_proposal_dashboard_poll_path(proposal) fill_in "Start Date", with: "20/02/2002" find_field("Start Date").click within(".ui-datepicker") { click_link "22" } expect(page).to have_field "Start Date", with: "22/02/2002" end scenario "is closed after using the browser back button" do visit proposal_dashboard_polls_path(proposal) click_link "Create poll" find_field("Start Date").click expect(page).to have_css "#ui-datepicker-div" go_back expect(page).to have_link "Create poll" expect(page).not_to have_css "#ui-datepicker-div" end scenario "works after using the browser back button" do visit new_proposal_dashboard_poll_path(proposal) click_link "Polls" expect(page).to have_link "Create poll" go_back find_field("Start Date").click expect(page).to have_css "#ui-datepicker-div" end end scenario "Create a poll redirects back to form when invalid data" do visit proposal_dashboard_path(proposal) click_link "Polls" click_link "Create poll" click_button "Create poll" expect(page).to have_content("New poll") end scenario "Edit poll is allowed for upcoming polls" do poll = create(:poll, related: proposal, starts_at: 1.week.from_now) visit proposal_dashboard_polls_path(proposal) within "div#poll_#{poll.id}" do expect(page).to have_content("Edit survey") click_link "Edit survey" end click_button "Update poll" expect(page).to have_content "Poll updated successfully" end scenario "Edit poll redirects back when invalid data" do poll = create(:poll, related: proposal, starts_at: 1.week.from_now) visit proposal_dashboard_polls_path(proposal) within "div#poll_#{poll.id}" do expect(page).to have_content("Edit survey") click_link "Edit survey" end fill_in "poll_name", with: "" click_button "Update poll" expect(page).to have_content("Edit poll") end scenario "Edit poll should allow to remove questions" do poll = create(:poll, related: proposal, starts_at: 1.week.from_now) create(:poll_question, poll: poll) create(:poll_question, poll: poll) visit proposal_dashboard_polls_path(proposal) within "div#poll_#{poll.id}" do click_link "Edit survey" end within ".js-questions" do expect(page).to have_css ".nested-fields", count: 2 within first(".nested-fields") do click_link class: "delete" end expect(page).to have_css ".nested-fields", count: 1 end click_button "Update poll" expect(page).to have_content "Poll updated successfully" visit edit_proposal_dashboard_poll_path(proposal, poll) expect(page).to have_css ".nested-fields", count: 1 end scenario "Edit poll allows users to remove options" do poll = create(:poll, related: proposal, starts_at: 1.week.from_now) create(:poll_question, :yes_no, poll: poll) visit proposal_dashboard_polls_path(proposal) within "div#poll_#{poll.id}" do click_link "Edit survey" end within ".js-questions .js-options" do expect(page).to have_css ".nested-fields", count: 2 within first(".nested-fields") do click_link class: "delete" end expect(page).to have_css ".nested-fields", count: 1 end click_button "Update poll" expect(page).to have_content "Poll updated successfully" visit edit_proposal_dashboard_poll_path(proposal, poll) within ".js-questions .js-options" do expect(page).to have_css ".nested-fields", count: 1 end end scenario "Can destroy poll without responses" do poll = create(:poll, related: proposal) visit proposal_dashboard_polls_path(proposal) within("#poll_#{poll.id}") do accept_confirm { click_button "Delete survey" } end expect(page).to have_content("Survey deleted successfully") expect(page).not_to have_content(poll.name) end scenario "Can't destroy poll with responses" do poll = create(:poll, related: proposal) create(:poll_question, poll: poll) create(:poll_voter, poll: poll) visit proposal_dashboard_polls_path(proposal) within("#poll_#{poll.id}") do accept_confirm { click_button "Delete survey" } end expect(page).to have_content("You cannot destroy a survey that has responses") expect(page).to have_content(poll.name) end scenario "View results redirects to results in public zone" do poll = create(:poll, :expired, related: proposal) visit proposal_dashboard_polls_path(proposal) click_link "View results" expect(page).to have_current_path(results_proposal_poll_path(proposal, poll)) end scenario "Enable and disable results" do create(:poll, related: proposal) visit proposal_dashboard_polls_path(proposal) check "Show results" expect(find_field("Show results")).to be_checked uncheck "Show results" expect(find_field("Show results")).not_to be_checked end end