Files
nairobi/spec/system/admin/poll/questions_spec.rb
Javi Martín e49c32638d Use if instead of skip to skip tests
This way the tests won't appear as "pending" when running the test
suite, and so we get rid of a lot of noise in the test results. There
doesn't seem to be a way to call `skip` without the test being marked as
"pending".

Note that in the globalizable tests we need to build a factory before
deciding whether an atribute is required or not (particularly for the
milestone factory, since milestone attributes are required depending on
the presence of other attributes). This isn't possible before we're
inside the test, so we can't add an `if:` condition to the test. So
we're adding the condition inside the test instead. A minor
inconvenience of this method is the test still runs even when the
condition is `false`.
2022-04-07 15:34:10 +02:00

187 lines
5.7 KiB
Ruby

require "rails_helper"
describe "Admin poll questions", :admin do
scenario "Index" do
poll1 = create(:poll)
poll2 = create(:poll)
poll3 = create(:poll)
proposal = create(:proposal)
question1 = create(:poll_question, poll: poll1)
question2 = create(:poll_question, poll: poll2)
question3 = create(:poll_question, poll: poll3, proposal: proposal)
visit admin_poll_path(poll1)
expect(page).to have_content(poll1.name)
within("#poll_question_#{question1.id}") do
expect(page).to have_content(question1.title)
expect(page).to have_link "Edit answers"
expect(page).to have_link "Edit"
expect(page).to have_button "Delete"
end
visit admin_poll_path(poll2)
expect(page).to have_content(poll2.name)
within("#poll_question_#{question2.id}") do
expect(page).to have_content question2.title
expect(page).to have_link "Edit answers"
expect(page).to have_link "Edit"
expect(page).to have_button "Delete"
end
visit admin_poll_path(poll3)
expect(page).to have_content(poll3.name)
within("#poll_question_#{question3.id}") do
expect(page).to have_content question3.title
expect(page).to have_link "(See proposal)", href: proposal_path(question3.proposal)
expect(page).to have_link "Edit answers"
expect(page).to have_link "Edit"
expect(page).to have_button "Delete"
end
end
scenario "Show" do
geozone = create(:geozone)
poll = create(:poll, geozone_restricted: true, geozone_ids: [geozone.id])
question = create(:poll_question, poll: poll)
visit admin_poll_path(poll)
click_link "Edit answers"
expect(page).to have_content(question.title)
expect(page).to have_content(question.author.name)
end
scenario "Create" do
poll = create(:poll, name: "Movies")
title = "Star Wars: Episode IV - A New Hope"
visit admin_poll_path(poll)
click_link "Create question"
expect(page).to have_content("Create question to poll Movies")
expect(page).to have_selector("input[id='poll_question_poll_id'][value='#{poll.id}']",
visible: :hidden)
fill_in "Question", with: title
click_button "Save"
expect(page).to have_content(title)
end
scenario "Create from proposal" do
create(:poll, name: "Proposals")
proposal = create(:proposal)
visit admin_proposal_path(proposal)
expect(page).not_to have_content("This proposal has reached the required supports")
click_link "Add this proposal to a poll to be voted"
expect(page).to have_current_path(new_admin_question_path, ignore_query: true)
expect(page).to have_field("Question", with: proposal.title)
select "Proposals", from: "poll_question_poll_id"
click_button "Save"
expect(page).to have_content(proposal.title)
end
scenario "Create from successful proposal" do
create(:poll, name: "Proposals")
proposal = create(:proposal, :successful)
visit admin_proposal_path(proposal)
expect(page).to have_content("This proposal has reached the required supports")
click_link "Add this proposal to a poll to be voted"
expect(page).to have_current_path(new_admin_question_path, ignore_query: true)
expect(page).to have_field("Question", with: proposal.title)
select "Proposals", from: "poll_question_poll_id"
click_button "Save"
expect(page).to have_content(proposal.title)
visit admin_questions_path
expect(page).to have_content(proposal.title)
end
scenario "Update" do
poll = create(:poll)
question1 = create(:poll_question, poll: poll)
visit admin_poll_path(poll)
within("#poll_question_#{question1.id}") do
click_link "Edit"
end
old_title = question1.title
new_title = "Potatoes are great and everyone should have one"
fill_in "Question", with: new_title
click_button "Save"
expect(page).to have_content "Changes saved"
expect(page).to have_content new_title
expect(page).not_to have_content(old_title)
end
scenario "Destroy" do
poll = create(:poll)
question1 = create(:poll_question, poll: poll)
question2 = create(:poll_question, poll: poll)
visit admin_poll_path(poll)
within("#poll_question_#{question1.id}") do
accept_confirm("Are you sure? This action will delete \"#{question1.title}\" and can't be undone.") do
click_button "Delete"
end
end
expect(page).not_to have_content(question1.title)
expect(page).to have_content(question2.title)
end
context "Poll select box" do
scenario "translates the poll name in options" do
poll = create(:poll, name_en: "Name in English", name_es: "Nombre en Español")
proposal = create(:proposal)
visit admin_proposal_path(proposal)
click_link "Add this proposal to a poll to be voted"
expect(page).to have_select("poll_question_poll_id", options: ["Select Poll", poll.name_en])
select "Español", from: "Language:"
expect(page).to have_select("poll_question_poll_id",
options: ["Seleccionar votación", poll.name_es])
end
scenario "uses fallback if name is not translated to current locale",
if: Globalize.fallbacks(:fr).reject { |locale| locale.match(/fr/) }.first == :es do
poll = create(:poll, name_en: "Name in English", name_es: "Nombre en Español")
proposal = create(:proposal)
visit admin_proposal_path(proposal)
click_link "Add this proposal to a poll to be voted"
expect(page).to have_select("poll_question_poll_id", options: ["Select Poll", poll.name_en])
select "Français", from: "Language:"
expect(page).to have_select("poll_question_poll_id",
options: ["Sélectionner un vote", poll.name_es])
end
end
end