aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/admin_public_body_controller.rb10
-rw-r--r--app/helpers/admin_public_body_helper.rb22
-rw-r--r--app/views/admin_public_body/_form.html.erb26
-rw-r--r--spec/controllers/admin_public_body_controller_spec.rb15
-rw-r--r--spec/helpers/admin_public_body_helper_spec.rb79
-rw-r--r--spec/integration/admin_public_body_edit_spec.rb19
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')