JavaScript is used by about 98% of web users, so by testing without it enabled, we're only testing that the application works for a very reduced number of users. We proceeded this way in the past because CONSUL started using Rails 4.2 and truncating the database between JavaScript tests with database cleaner, which made these tests terribly slow. When we upgraded to Rails 5.1 and introduced system tests, we started using database transactions in JavaScript tests, making these tests much faster. So now we can use JavaScript tests everywhere without critically slowing down our test suite.
189 lines
5.4 KiB
Ruby
189 lines
5.4 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin legislation questions", :admin do
|
|
let!(:process) { create(:legislation_process, title: "An example legislation process") }
|
|
|
|
context "Index" do
|
|
scenario "Displaying legislation process questions" do
|
|
create(:legislation_question, process: process, title: "Question 1")
|
|
create(:legislation_question, process: process, title: "Question 2")
|
|
|
|
visit admin_legislation_processes_path(filter: "all")
|
|
|
|
within("tr", text: "An example legislation process") { click_link "Edit" }
|
|
click_link "Debate"
|
|
|
|
expect(page).to have_content("Question 1")
|
|
expect(page).to have_content("Question 2")
|
|
end
|
|
end
|
|
|
|
context "Create" do
|
|
scenario "Valid legislation question" do
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Collaborative Legislation"
|
|
end
|
|
|
|
click_link "All"
|
|
|
|
within("tr", text: "An example legislation process") { click_link "Edit" }
|
|
click_link "Debate"
|
|
|
|
click_link "Create question"
|
|
|
|
fill_in "Question", with: "Question 3"
|
|
click_button "Create question"
|
|
|
|
expect(page).to have_content "Question 3"
|
|
end
|
|
end
|
|
|
|
context "Update" do
|
|
scenario "Valid legislation question" do
|
|
create(:legislation_question, title: "Question 2", process: process)
|
|
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Collaborative Legislation"
|
|
end
|
|
|
|
click_link "All"
|
|
|
|
expect(page).not_to have_link "All"
|
|
|
|
within("tr", text: "An example legislation process") { click_link "Edit" }
|
|
click_link "Debate"
|
|
click_link "Question 2"
|
|
|
|
fill_in "Question", with: "Question 2b"
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_content "Question 2b"
|
|
end
|
|
end
|
|
|
|
context "Delete" do
|
|
scenario "Legislation question" do
|
|
create(:legislation_question, title: "Question 1", process: process)
|
|
question = create(:legislation_question, title: "Question 2", process: process)
|
|
question_option = create(:legislation_question_option, question: question, value: "Yes")
|
|
create(:legislation_answer, question: question, question_option: question_option)
|
|
|
|
visit edit_admin_legislation_process_question_path(process, question)
|
|
|
|
click_link "Delete"
|
|
|
|
expect(page).to have_content "Questions"
|
|
expect(page).to have_content "Question 1"
|
|
expect(page).not_to have_content "Question 2"
|
|
end
|
|
end
|
|
|
|
context "Legislation options" do
|
|
let!(:question) { create(:legislation_question) }
|
|
|
|
let(:edit_question_url) do
|
|
edit_admin_legislation_process_question_path(question.process, question)
|
|
end
|
|
|
|
let(:field_en) { fields_for(:en).first }
|
|
let(:field_es) { fields_for(:es).first }
|
|
|
|
def fields_for(locale)
|
|
within("#nested_question_options") do
|
|
page.all(
|
|
"[data-locale='#{locale}'] [id^='legislation_question_question_option'][id$='value']"
|
|
)
|
|
end
|
|
end
|
|
|
|
scenario "Edit an existing option" do
|
|
create(:legislation_question_option, question: question, value: "Original")
|
|
|
|
visit edit_question_url
|
|
find("#nested_question_options input").set("Changed")
|
|
click_button "Save changes"
|
|
|
|
expect(page).not_to have_css "#error_explanation"
|
|
|
|
visit edit_question_url
|
|
expect(page).to have_field(field_en[:id], with: "Changed")
|
|
end
|
|
|
|
scenario "Remove an option" do
|
|
create(:legislation_question_option, question: question, value: "Yes")
|
|
create(:legislation_question_option, question: question, value: "No")
|
|
|
|
visit edit_question_url
|
|
|
|
expect(page).to have_field fields_for(:en).first[:id], with: "Yes"
|
|
expect(page).to have_field fields_for(:en).last[:id], with: "No"
|
|
|
|
page.first(:link, "Remove option").click
|
|
|
|
expect(page).not_to have_field fields_for(:en).first[:id], with: "Yes"
|
|
expect(page).to have_field fields_for(:en).last[:id], with: "No"
|
|
|
|
click_button "Save changes"
|
|
visit edit_question_url
|
|
|
|
expect(page).not_to have_field fields_for(:en).first[:id], with: "Yes"
|
|
expect(page).to have_field fields_for(:en).last[:id], with: "No"
|
|
end
|
|
|
|
context "Special translation behaviour" do
|
|
before do
|
|
question.update!(title_en: "Title in English", title_es: "Título en Español")
|
|
end
|
|
|
|
scenario "Add translation for question option" do
|
|
visit edit_question_url
|
|
|
|
click_on "Add option"
|
|
|
|
find("#nested_question_options input").set("Option 1")
|
|
|
|
select "Español", from: :select_language
|
|
|
|
find("#nested_question_options input").set("Opción 1")
|
|
|
|
click_button "Save changes"
|
|
visit edit_question_url
|
|
|
|
expect(page).to have_field(field_en[:id], with: "Option 1")
|
|
|
|
select "Español", from: :select_language
|
|
|
|
expect(page).to have_field(field_es[:id], with: "Opción 1")
|
|
end
|
|
|
|
scenario "Add new question option after changing active locale" do
|
|
visit edit_question_url
|
|
|
|
select "Español", from: :select_language
|
|
|
|
click_on "Add option"
|
|
|
|
find("#nested_question_options input").set("Opción 1")
|
|
|
|
select "English", from: :select_language
|
|
|
|
find("#nested_question_options input").set("Option 1")
|
|
|
|
click_button "Save changes"
|
|
|
|
visit edit_question_url
|
|
|
|
expect(page).to have_field(field_en[:id], with: "Option 1")
|
|
|
|
select "Español", from: :select_language
|
|
|
|
expect(page).to have_field(field_es[:id], with: "Opción 1")
|
|
end
|
|
end
|
|
end
|
|
end
|