From 85701bd754e38cc77445a87bbd03687a690ebf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 10 Oct 2018 14:04:52 +0200 Subject: [PATCH] Update legislation questions translatable fields --- .../admin/legislation/questions_controller.rb | 8 ++--- app/models/legislation/question.rb | 6 +++- app/models/legislation/question_option.rb | 6 +++- .../legislation/questions/_form.html.erb | 14 ++++---- .../_question_option_fields.html.erb | 9 ++++-- .../admin/legislation/questions_spec.rb | 32 ++++++++++++------- 6 files changed, 46 insertions(+), 29 deletions(-) diff --git a/app/controllers/admin/legislation/questions_controller.rb b/app/controllers/admin/legislation/questions_controller.rb index da73e905c..70c923ab3 100644 --- a/app/controllers/admin/legislation/questions_controller.rb +++ b/app/controllers/admin/legislation/questions_controller.rb @@ -9,7 +9,6 @@ class Admin::Legislation::QuestionsController < Admin::Legislation::BaseControll end def new - @question.question_options.build end def create @@ -47,11 +46,8 @@ class Admin::Legislation::QuestionsController < Admin::Legislation::BaseControll def question_params params.require(:legislation_question).permit( - :title, - *translation_params(::Legislation::Question), - question_options_attributes: [:id, :value, - *translation_params(::Legislation::QuestionOption)] - ) + translation_params(::Legislation::Question), + question_options_attributes: [translation_params(::Legislation::QuestionOption)]) end def resource diff --git a/app/models/legislation/question.rb b/app/models/legislation/question.rb index 0c9a5703f..c98c1e3bd 100644 --- a/app/models/legislation/question.rb +++ b/app/models/legislation/question.rb @@ -5,6 +5,7 @@ class Legislation::Question < ActiveRecord::Base translates :title, touch: true globalize_accessors + accepts_nested_attributes_for :translations, allow_destroy: true belongs_to :author, -> { with_hidden }, class_name: 'User', foreign_key: 'author_id' belongs_to :process, class_name: 'Legislation::Process', foreign_key: 'legislation_process_id' @@ -17,7 +18,10 @@ class Legislation::Question < ActiveRecord::Base accepts_nested_attributes_for :question_options, reject_if: proc { |attributes| attributes.all? { |k, v| v.blank? } }, allow_destroy: true validates :process, presence: true - validates :title, presence: true + + translation_class.instance_eval do + validates :title, presence: true + end scope :sorted, -> { order('id ASC') } diff --git a/app/models/legislation/question_option.rb b/app/models/legislation/question_option.rb index 1ee46ee90..a839d400f 100644 --- a/app/models/legislation/question_option.rb +++ b/app/models/legislation/question_option.rb @@ -4,10 +4,14 @@ class Legislation::QuestionOption < ActiveRecord::Base translates :value, touch: true globalize_accessors + accepts_nested_attributes_for :translations, allow_destroy: true belongs_to :question, class_name: 'Legislation::Question', foreign_key: 'legislation_question_id', inverse_of: :question_options has_many :answers, class_name: 'Legislation::Answer', foreign_key: 'legislation_question_id', dependent: :destroy, inverse_of: :question validates :question, presence: true - validates :value, presence: true, uniqueness: { scope: :legislation_question_id } + + translation_class.instance_eval do + validates :value, presence: true # TODO: add uniqueness again + end end diff --git a/app/views/admin/legislation/questions/_form.html.erb b/app/views/admin/legislation/questions/_form.html.erb index 10902b78d..dc5efb734 100644 --- a/app/views/admin/legislation/questions/_form.html.erb +++ b/app/views/admin/legislation/questions/_form.html.erb @@ -17,12 +17,14 @@ <% end %> -
- <%= f.translatable_text_area :title, - rows: 5, - placeholder: t("admin.legislation.questions.form.title_placeholder"), - label: t("admin.legislation.questions.form.title") %> -
+ <%= f.translatable_fields do |translations_form| %> +
+ <%= translations_form.text_area :title, + rows: 5, + placeholder: t("admin.legislation.questions.form.title_placeholder"), + label: t("admin.legislation.questions.form.title") %> +
+ <% end %>
<%= f.label :question_options, t("admin.legislation.questions.form.question_options") %> diff --git a/app/views/admin/legislation/questions/_question_option_fields.html.erb b/app/views/admin/legislation/questions/_question_option_fields.html.erb index 204e7b27a..e1f729a0e 100644 --- a/app/views/admin/legislation/questions/_question_option_fields.html.erb +++ b/app/views/admin/legislation/questions/_question_option_fields.html.erb @@ -1,10 +1,13 @@
- <%= f.translatable_text_field :value, - placeholder: t("admin.legislation.questions.form.value_placeholder"), - label: false %> + <%= f.translatable_fields do |translations_form| %> + <%= translations_form.text_field :value, + placeholder: t("admin.legislation.questions.form.value_placeholder"), + label: false %> + <% end %>
+
<%= link_to_remove_association t("admin.legislation.questions.question_option_fields.remove_option"), f, class: "delete"%>
diff --git a/spec/features/admin/legislation/questions_spec.rb b/spec/features/admin/legislation/questions_spec.rb index 1ae23a566..c4f390fa0 100644 --- a/spec/features/admin/legislation/questions_spec.rb +++ b/spec/features/admin/legislation/questions_spec.rb @@ -65,7 +65,7 @@ feature 'Admin legislation questions' do click_link 'Create question' - fill_in 'legislation_question_title_en', with: 'Question 3' + fill_in 'Question', with: 'Question 3' click_button 'Create question' expect(page).to have_content 'Question 3' @@ -92,7 +92,7 @@ feature 'Admin legislation questions' do click_link 'Question 2' - fill_in 'legislation_question_title_en', with: 'Question 2b' + fill_in 'Question', with: 'Question 2b' click_button 'Save changes' expect(page).to have_content 'Question 2b' @@ -123,12 +123,20 @@ feature 'Admin legislation questions' do title_en: "Title in English", title_es: "Título en Español") } - before do - @edit_question_url = edit_admin_legislation_process_question_path(question.process, question) + let(:edit_question_url) do + edit_admin_legislation_process_question_path(question.process, question) + end + + let(:field_en) do + page.all("[data-locale='en'][id^='legislation_question_question_options'][id$='value']").first + end + + let(:field_es) do + page.all("[data-locale='es'][id^='legislation_question_question_options'][id$='value']").first end scenario 'Add translation for question option', :js do - visit @edit_question_url + visit edit_question_url click_on 'Add option' @@ -139,17 +147,17 @@ feature 'Admin legislation questions' do find('#nested-question-options input').set('Opción 1') click_button "Save changes" - visit @edit_question_url + visit edit_question_url - expect(page).to have_field('legislation_question_question_options_attributes_0_value_en', with: 'Option 1') + expect(page).to have_field(field_en[:id], with: 'Option 1') click_link "Español" - expect(page).to have_field('legislation_question_question_options_attributes_0_value_es', with: 'Opción 1') + 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 + visit edit_question_url click_link "Español" @@ -163,13 +171,13 @@ feature 'Admin legislation questions' do click_button "Save changes" - visit @edit_question_url + visit edit_question_url - expect(page).to have_field('legislation_question_question_options_attributes_0_value_en', with: 'Option 1') + expect(page).to have_field(field_en[:id], with: 'Option 1') click_link "Español" - expect(page).to have_field('legislation_question_question_options_attributes_0_value_es', with: 'Opción 1') + expect(page).to have_field(field_es[:id], with: 'Opción 1') end end end