diff options
-rw-r--r-- | app/controllers/admin_public_body_controller.rb | 10 | ||||
-rw-r--r-- | app/helpers/admin_public_body_helper.rb | 22 | ||||
-rw-r--r-- | app/views/admin_public_body/_form.html.erb | 26 | ||||
-rw-r--r-- | spec/controllers/admin_public_body_controller_spec.rb | 15 | ||||
-rw-r--r-- | spec/helpers/admin_public_body_helper_spec.rb | 79 | ||||
-rw-r--r-- | spec/integration/admin_public_body_edit_spec.rb | 19 |
6 files changed, 57 insertions, 114 deletions
diff --git a/app/controllers/admin_public_body_controller.rb b/app/controllers/admin_public_body_controller.rb index f7a80476c..baa5a1d22 100644 --- a/app/controllers/admin_public_body_controller.rb +++ b/app/controllers/admin_public_body_controller.rb @@ -83,6 +83,11 @@ class AdminPublicBodyController < AdminController def new @public_body = PublicBody.new + + I18n.available_locales.each do |locale| + @public_body.translations.build(:locale => locale) + end + if params[:change_request_id] @change_request = PublicBodyChangeRequest.find(params[:change_request_id]) end @@ -120,6 +125,11 @@ class AdminPublicBodyController < AdminController def edit @public_body = PublicBody.find(params[:id]) + + I18n.available_locales.each do |locale| + @public_body.translations.find_or_initialize_by_locale(locale) + end + if params[:change_request_id] @change_request = PublicBodyChangeRequest.find(params[:change_request_id]) end diff --git a/app/helpers/admin_public_body_helper.rb b/app/helpers/admin_public_body_helper.rb deleted file mode 100644 index 97f656ddb..000000000 --- a/app/helpers/admin_public_body_helper.rb +++ /dev/null @@ -1,22 +0,0 @@ -module AdminPublicBodyHelper - - def public_body_form_object(public_body, locale) - if locale == I18n.default_locale - # The default locale is submitted as part of the bigger object... - prefix = 'public_body' - object = public_body - else - # ...but additional locales go "on the side" - prefix = :translations - object = if public_body.new_record? - PublicBody::Translation.new - else - public_body.find_translation_by_locale(locale.to_s) - end - object ||= PublicBody::Translation.new - end - - { :object => object, :prefix => prefix } - end - -end diff --git a/app/views/admin_public_body/_form.html.erb b/app/views/admin_public_body/_form.html.erb index 177873984..d01421089 100644 --- a/app/views/admin_public_body/_form.html.erb +++ b/app/views/admin_public_body/_form.html.erb @@ -4,23 +4,27 @@ <div id="div-locales"> <ul class="locales nav nav-tabs"> - <% I18n.available_locales.each_with_index do |locale, i| %> - <li><a href="#div-locale-<%=locale.to_s%>" data-toggle="tab" ><%=locale_name(locale.to_s) || _("Default locale")%></a></li> - <% end %> + <% @public_body.translations.each_with_index do |translation, i| %> + <li> + <a href="#div-locale-<%= translation.locale.to_s %>" data-toggle="tab" > + <%= locale_name(translation.locale.to_s) || _("Default locale") %> + </a> + </li> + <% end %> </ul> + <div class="tab-content"> - <% I18n.available_locales.each do |locale| %> - <% context = public_body_form_object(@public_body, locale) %> - <% if locale.to_s == I18n.default_locale.to_s %> - <%= fields_for('public_body', context[:object]) do |t| %> - <%= render :partial => 'locale_fields', :locals => {:t => t, :locale => locale}%> + <% @public_body.translations.each do |translation| %> + <% if translation.locale.to_s == I18n.default_locale.to_s %> + <%= fields_for('public_body', @public_body) do |t| %> + <%= render :partial => 'locale_fields', :locals => { :t => t, :locale => translation.locale } %> <% end %> <% else %> - <%= f.fields_for(context[:prefix], context[:object], :child_index => locale) do |t| %> - <%= render :partial => 'locale_fields' , :locals => {:t => t, :locale => locale}%> + <%= f.fields_for(:translations, translation, :child_index => translation.locale) do |t| %> + <%= render :partial => 'locale_fields' , :locals => { :t => t, :locale => translation.locale } %> <% end %> <% end %> - <% end %> + <% end %> </div> </div> diff --git a/spec/controllers/admin_public_body_controller_spec.rb b/spec/controllers/admin_public_body_controller_spec.rb index 5b8ed6c55..f176150da 100644 --- a/spec/controllers/admin_public_body_controller_spec.rb +++ b/spec/controllers/admin_public_body_controller_spec.rb @@ -44,6 +44,15 @@ describe AdminPublicBodyController, 'when showing the form for a new public body assigns[:public_body].should be_a(PublicBody) end + it "builds new translations for all locales" do + get :new + + translations = assigns[:public_body].translations.map{ |t| t.locale.to_s }.sort + available = I18n.available_locales.map{ |l| l.to_s }.sort + + expect(translations).to eq(available) + end + context 'when passed a change request id as a param' do render_views @@ -161,6 +170,12 @@ describe AdminPublicBodyController, "when editing a public body" do response.should render_template('edit') end + it "builds new translations if the body does not already have a translation in the specified locale" do + public_body = FactoryGirl.create(:public_body) + get :edit, :id => public_body.id + expect(assigns[:public_body].translations.map(&:locale)).to include(:fr) + end + context 'when passed a change request id as a param' do render_views diff --git a/spec/helpers/admin_public_body_helper_spec.rb b/spec/helpers/admin_public_body_helper_spec.rb deleted file mode 100644 index c135ef348..000000000 --- a/spec/helpers/admin_public_body_helper_spec.rb +++ /dev/null @@ -1,79 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') - -describe AdminPublicBodyHelper do - - include AdminPublicBodyHelper - - describe :public_body_form_object do - - context 'in the default locale' do - - before(:each) do - @locale = I18n.default_locale - @public_body = Factory.create(:public_body) - end - - it 'provides the original object' do - object = public_body_form_object(@public_body, @locale)[:object] - expect(object).to eq(@public_body) - end - - it 'provides the prefix public_body' do - prefix = public_body_form_object(@public_body, @locale)[:prefix] - expect(prefix).to eq('public_body') - end - - end - - context 'in an alternative locale' do - - it 'provides the prefix :translations' do - public_body = FactoryGirl.build(:public_body) - locale = :es - prefix = public_body_form_object(public_body, locale)[:prefix] - expect(prefix).to eq(:translations) - end - - context 'when the PublicBody is new' do - - it 'builds a new PublicBody::Translation' do - public_body = FactoryGirl.build(:public_body) - locale = :es - - object = public_body_form_object(public_body, locale)[:object] - - expect(object).to be_instance_of(PublicBody::Translation) - expect(object).to be_new_record - end - - end - - context 'when the PublicBody has been persisted' do - - it 'finds an existing PublicBody::Translation for the locale' do - public_body = public_bodies(:geraldine_public_body) - locale = :es - translation = public_body.find_translation_by_locale(locale) - - object = public_body_form_object(public_body, locale)[:object] - - expect(object).to eq(translation) - end - - it 'builds a new PublicBody::Translation if the record does not have one for that locale' do - public_body = FactoryGirl.create(:public_body) - locale = :es - - object = public_body_form_object(public_body, locale)[:object] - - expect(object).to be_instance_of(PublicBody::Translation) - expect(object).to be_new_record - end - - end - - end - - end - -end diff --git a/spec/integration/admin_public_body_edit_spec.rb b/spec/integration/admin_public_body_edit_spec.rb index d75ded6fe..613793dd4 100644 --- a/spec/integration/admin_public_body_edit_spec.rb +++ b/spec/integration/admin_public_body_edit_spec.rb @@ -17,6 +17,15 @@ describe 'Editing a Public Body' do @body = PublicBody.find_by_name('New Quango') end + it 'can edit the default locale' do + @admin.visit admin_body_edit_path(@body) + @admin.fill_in 'public_body_name__en', :with => 'New Quango EN' + @admin.click_button 'Save' + + pb = @body.reload + expect(pb.name).to eq('New Quango EN') + end + it 'can add a translation for a single locale' do expect(@body.find_translation_by_locale('fr')).to be_nil @@ -24,13 +33,17 @@ describe 'Editing a Public Body' do @admin.fill_in 'public_body_translations_attributes_fr_name__fr', :with => 'New Quango FR' @admin.click_button 'Save' - pb = PublicBody.find_by_name('New Quango') + pb = @body.reload I18n.with_locale(:fr) do expect(pb.name).to eq('New Quango FR') end end it 'can add a translation for multiple locales', :focus => true do + @admin.visit admin_body_edit_path(@body) + @admin.fill_in 'public_body_name__en', :with => 'New Quango EN' + @admin.click_button 'Save' + # Add FR translation expect(@body.find_translation_by_locale('fr')).to be_nil @admin.visit admin_body_edit_path(@body) @@ -43,7 +56,9 @@ describe 'Editing a Public Body' do @admin.fill_in 'public_body_translations_attributes_es_name__es', :with => 'New Quango ES' @admin.click_button 'Save' - pb = PublicBody.find_by_name('New Quango') + pb = @body.reload + + expect(pb.name).to eq('New Quango EN') I18n.with_locale(:fr) do expect(pb.name).to eq('New Quango FR') |