Files
grecia/spec/system/admin/legislation/questions_spec.rb
Javi Martín 02981324ab Move exception tests to controller specs
System tests are used to test the application from the user's point of
view. To test for specific exceptions, particularly regarding
authorization permissions, controller tests fit better.

Another option would be to test the page displayed shows a certain text,
like "Internal server error". I'm choosing controller tests because
they're faster and we're basically testing the same scenario many times
and we've already got a test checking what happens when users access a
page raising an exception.
2021-03-31 14:42:20 +02:00

189 lines
5.5 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", :js 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", :js 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", :js 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", :js 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", :js 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", :js 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