diff options
-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/helpers/admin_public_body_helper_spec.rb | 79 |
3 files changed, 107 insertions, 20 deletions
diff --git a/app/helpers/admin_public_body_helper.rb b/app/helpers/admin_public_body_helper.rb new file mode 100644 index 000000000..5139bd49f --- /dev/null +++ b/app/helpers/admin_public_body_helper.rb @@ -0,0 +1,22 @@ +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 = 'public_body[translated_versions][]' + 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 623922b08..6b573ac9e 100644 --- a/app/views/admin_public_body/_form.html.erb +++ b/app/views/admin_public_body/_form.html.erb @@ -9,22 +9,10 @@ <% end %> </ul> <div class="tab-content"> -<% - I18n.available_locales.each do |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 = "public_body[translated_versions][]" - 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 -%> - <%= fields_for prefix, object do |t| %> +<% I18n.available_locales.each do |locale| %> + <% context = public_body_form_object(@public_body, locale) %> + + <%= fields_for context[:prefix], context[:object] do |t| %> <div class="tab-pane" id="div-locale-<%=locale.to_s%>"> <div class="control-group"> <%= t.hidden_field :locale, :value => locale.to_s %> @@ -63,10 +51,8 @@ </div> </div> </div> -<% - end - end -%> + <% end %> +<% end %> </div> </div> diff --git a/spec/helpers/admin_public_body_helper_spec.rb b/spec/helpers/admin_public_body_helper_spec.rb new file mode 100644 index 000000000..defb1b359 --- /dev/null +++ b/spec/helpers/admin_public_body_helper_spec.rb @@ -0,0 +1,79 @@ +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 public_body[translated_versions][]' do + public_body = FactoryGirl.build(:public_body) + locale = :es + prefix = public_body_form_object(public_body, locale)[:prefix] + expect(prefix).to eq('public_body[translated_versions][]') + 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 |