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  | 
