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