220 lines
6.0 KiB
Ruby
220 lines
6.0 KiB
Ruby
require 'rails_helper'
|
|
|
|
feature 'Admin legislation questions' do
|
|
|
|
background do
|
|
admin = create(:administrator)
|
|
login_as(admin.user)
|
|
end
|
|
|
|
let!(:process) { create(:legislation_process, title: "An example legislation process") }
|
|
|
|
it_behaves_like "translatable",
|
|
"legislation_question",
|
|
"edit_admin_legislation_process_question_path",
|
|
%w[title]
|
|
|
|
context "Feature flag" do
|
|
|
|
background do
|
|
Setting['feature.legislation'] = nil
|
|
end
|
|
|
|
after do
|
|
Setting['feature.legislation'] = true
|
|
end
|
|
|
|
scenario 'Disabled with a feature flag' do
|
|
expect{ visit admin_legislation_process_questions_path(process) }.to raise_exception(FeatureFlags::FeatureDisabled)
|
|
end
|
|
|
|
end
|
|
|
|
context "Index" do
|
|
|
|
scenario 'Displaying legislation process questions' do
|
|
question = create(:legislation_question, process: process, title: 'Question 1')
|
|
question = create(:legislation_question, process: process, title: 'Question 2')
|
|
|
|
visit admin_legislation_processes_path(filter: 'all')
|
|
|
|
click_link 'An example legislation process'
|
|
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"
|
|
|
|
expect(page).to have_content 'An example legislation process'
|
|
|
|
click_link 'An example legislation process'
|
|
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
|
|
question = 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"
|
|
|
|
click_link 'An example legislation process'
|
|
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_attributes(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')
|
|
|
|
click_link "Español"
|
|
|
|
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')
|
|
|
|
click_link "Español"
|
|
|
|
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
|
|
|
|
click_link "Español"
|
|
|
|
click_on 'Add option'
|
|
|
|
find('#nested_question_options input').set('Opción 1')
|
|
|
|
click_link "English"
|
|
|
|
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')
|
|
|
|
click_link "Español"
|
|
|
|
expect(page).to have_field(field_es[:id], with: 'Opción 1')
|
|
end
|
|
end
|
|
end
|
|
end
|