aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models/public_body_heading_spec.rb
diff options
context:
space:
mode:
authorGareth Rees <gareth@mysociety.org>2015-03-20 14:34:09 +0000
committerGareth Rees <gareth@mysociety.org>2015-03-20 14:34:09 +0000
commitb6cf3f88e9df1dda172f149927fa2a6cc4f3960a (patch)
tree6cc4e1aa34bb056d5b630a7a8844b49a32f64ad3 /spec/models/public_body_heading_spec.rb
parent7d55b45dfb0de92dca420df3b02dcb5738753e32 (diff)
parentd748691956dc082ec5b2b520397e7702eaf7a488 (diff)
Merge remote-tracking branch 'origin/2140-translations-failed-validation-r3d' into rails-3-develop
Diffstat (limited to 'spec/models/public_body_heading_spec.rb')
-rw-r--r--spec/models/public_body_heading_spec.rb108
1 files changed, 108 insertions, 0 deletions
diff --git a/spec/models/public_body_heading_spec.rb b/spec/models/public_body_heading_spec.rb
index 620f7da9c..be3e7c7d2 100644
--- a/spec/models/public_body_heading_spec.rb
+++ b/spec/models/public_body_heading_spec.rb
@@ -30,6 +30,13 @@ describe PublicBodyHeading do
heading.valid?
heading.display_order.should == PublicBodyHeading.next_display_order
end
+
+ it 'validates the translations' do
+ heading = FactoryGirl.build(:public_body_heading)
+ translation = heading.translations.build
+ expect(heading).to_not be_valid
+ end
+
end
context 'when setting a display order' do
@@ -43,4 +50,105 @@ describe PublicBodyHeading do
PublicBodyHeading.next_display_order.should == 1
end
end
+
+ describe :save do
+
+ it 'saves translations' do
+ heading = FactoryGirl.build(:public_body_heading)
+ heading.translations_attributes = { :es => { :locale => 'es',
+ :name => 'El Heading' } }
+
+ heading.save
+ expect(PublicBodyHeading.find(heading.id).translations.size).to eq(2)
+ end
+
+ end
+
+ describe :translations_attributes= do
+
+ context 'translation_attrs is a Hash' do
+
+ it 'does not persist translations' do
+ heading = FactoryGirl.create(:public_body_heading)
+ heading.translations_attributes = { :es => { :locale => 'es',
+ :name => 'El Heading' } }
+
+ expect(PublicBodyHeading.find(heading.id).translations.size).to eq(1)
+ end
+
+ it 'creates a new translation' do
+ heading = FactoryGirl.create(:public_body_heading)
+ heading.translations_attributes = { :es => { :locale => 'es',
+ :name => 'El Heading' } }
+ heading.save
+ heading.reload
+ expect(heading.name(:es)).to eq('El Heading')
+ end
+
+ it 'updates an existing translation' do
+ heading = FactoryGirl.create(:public_body_heading)
+ heading.translations_attributes = { 'es' => { :locale => 'es',
+ :name => 'Name' } }
+ heading.save
+
+ heading.translations_attributes = { 'es' => { :id => heading.translation_for(:es).id,
+ :locale => 'es',
+ :name => 'Renamed' } }
+ heading.save
+ expect(heading.name(:es)).to eq('Renamed')
+ end
+
+ it 'updates an existing translation and creates a new translation' do
+ heading = FactoryGirl.create(:public_body_heading)
+ heading.translations.create(:locale => 'es',
+ :name => 'Los Heading')
+
+ expect(heading.translations.size).to eq(2)
+
+ heading.translations_attributes = {
+ 'es' => { :id => heading.translation_for(:es).id,
+ :locale => 'es',
+ :name => 'Renamed' },
+ 'fr' => { :locale => 'fr',
+ :name => 'Le Heading' }
+ }
+
+ expect(heading.translations.size).to eq(3)
+ I18n.with_locale(:es) { expect(heading.name).to eq('Renamed') }
+ I18n.with_locale(:fr) { expect(heading.name).to eq('Le Heading') }
+ end
+
+ it 'skips empty translations' do
+ heading = FactoryGirl.create(:public_body_heading)
+ heading.translations.create(:locale => 'es',
+ :name => 'Los Heading')
+
+ expect(heading.translations.size).to eq(2)
+
+ heading.translations_attributes = {
+ 'es' => { :id => heading.translation_for(:es).id,
+ :locale => 'es',
+ :name => 'Renamed' },
+ 'fr' => { :locale => 'fr' }
+ }
+
+ expect(heading.translations.size).to eq(2)
+ end
+ end
+ end
+end
+
+describe PublicBodyHeading::Translation do
+
+ it 'requires a locale' do
+ translation = PublicBodyHeading::Translation.new
+ translation.valid?
+ expect(translation.errors[:locale]).to eq(["can't be blank"])
+ end
+
+ it 'is valid if all required attributes are assigned' do
+ translation = PublicBodyHeading::Translation.new(:locale => I18n.default_locale)
+ expect(translation).to be_valid
+ end
+
end