aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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/helpers/admin_public_body_helper_spec.rb79
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