aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/public_body_category_spec.rb140
-rw-r--r--spec/models/public_body_heading_spec.rb108
-rw-r--r--spec/models/public_body_spec.rb185
3 files changed, 335 insertions, 98 deletions
diff --git a/spec/models/public_body_category_spec.rb b/spec/models/public_body_category_spec.rb
index c16c9b8a1..297bd096a 100644
--- a/spec/models/public_body_category_spec.rb
+++ b/spec/models/public_body_category_spec.rb
@@ -34,5 +34,145 @@ describe PublicBodyCategory do
category.should_not be_valid
category.errors[:description].should == ["Description can't be blank"]
end
+
+ it 'validates the translations' do
+ category = FactoryGirl.build(:public_body_category)
+ translation = category.translations.build
+ expect(category).to_not be_valid
+ end
+
+ it 'uses the base model validation for the default locale' do
+ category = PublicBodyCategory.new
+ translation = category.translations.build(:locale => 'en',
+ :description => 'No title')
+ category.valid?
+ translation.valid?
+
+ expect(category).to have(1).error_on(:title)
+ expect(translation).to have(0).errors_on(:title)
+ end
+
end
+
+ describe :save do
+
+ it 'saves translations' do
+ category = FactoryGirl.build(:public_body_category)
+ category.translations_attributes = { :es => { :locale => 'es',
+ :title => 'El Category',
+ :description => 'Spanish description' } }
+
+ category.save
+ expect(PublicBodyCategory.find(category.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
+ category = FactoryGirl.create(:public_body_category)
+ category.translations_attributes = { :es => { :locale => 'es',
+ :title => 'El Category',
+ :description => 'Spanish description' } }
+
+ expect(PublicBodyCategory.find(category.id).translations.size).to eq(1)
+ end
+
+ it 'creates a new translation' do
+ category = FactoryGirl.create(:public_body_category)
+ category.translations_attributes = { :es => { :locale => 'es',
+ :title => 'El Category',
+ :description => 'Spanish description' } }
+ category.save
+ category.reload
+ expect(category.title(:es)).to eq('El Category')
+ end
+
+ it 'updates an existing translation' do
+ category = FactoryGirl.create(:public_body_category)
+ category.translations_attributes = { 'es' => { :locale => 'es',
+ :title => 'Name',
+ :description => 'Desc' } }
+ category.save
+
+ category.translations_attributes = { 'es' => { :id => category.translation_for(:es).id,
+ :locale => 'es',
+ :title => 'Renamed',
+ :description => 'Desc' } }
+ category.save
+ expect(category.title(:es)).to eq('Renamed')
+ end
+
+ it 'updates an existing translation and creates a new translation' do
+ category = FactoryGirl.create(:public_body_category)
+ category.translations.create(:locale => 'es',
+ :title => 'Los Category',
+ :description => 'ES Description')
+
+ expect(category.translations.size).to eq(2)
+
+ category.translations_attributes = {
+ 'es' => { :id => category.translation_for(:es).id,
+ :locale => 'es',
+ :title => 'Renamed' },
+ 'fr' => { :locale => 'fr',
+ :title => 'Le Category' }
+ }
+
+ expect(category.translations.size).to eq(3)
+ I18n.with_locale(:es) { expect(category.title).to eq('Renamed') }
+ I18n.with_locale(:fr) { expect(category.title).to eq('Le Category') }
+ end
+
+ it 'skips empty translations' do
+ category = FactoryGirl.create(:public_body_category)
+ category.translations.create(:locale => 'es',
+ :title => 'Los Category',
+ :description => 'ES Description')
+
+ expect(category.translations.size).to eq(2)
+
+ category.translations_attributes = {
+ 'es' => { :id => category.translation_for(:es).id,
+ :locale => 'es',
+ :title => 'Renamed' },
+ 'fr' => { :locale => 'fr' }
+ }
+
+ expect(category.translations.size).to eq(2)
+ end
+
+ end
+ end
+
+end
+
+describe PublicBodyCategory::Translation do
+
+ it 'requires a locale' do
+ translation = PublicBodyCategory::Translation.new
+ translation.valid?
+ expect(translation.errors[:locale]).to eq(["can't be blank"])
+ end
+
+ it 'is valid if no required attributes are assigned' do
+ translation = PublicBodyCategory::Translation.new(:locale => I18n.default_locale)
+ expect(translation).to be_valid
+ end
+
+ it 'requires a title if another required attribute is assigned' do
+ translation = PublicBodyCategory::Translation.new(:description => 'spec')
+ translation.valid?
+ expect(translation.errors[:title]).to eq(["Title can't be blank"])
+ end
+
+ it 'requires a description if another required attribute is assigned' do
+ translation = PublicBodyCategory::Translation.new(:title => 'spec')
+ translation.valid?
+ expect(translation.errors[:description]).to eq(["Description can't be blank"])
+ end
+
end
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
diff --git a/spec/models/public_body_spec.rb b/spec/models/public_body_spec.rb
index d91021315..7b55efda1 100644
--- a/spec/models/public_body_spec.rb
+++ b/spec/models/public_body_spec.rb
@@ -30,106 +30,81 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe PublicBody do
- describe :translations_attributes= do
-
- context 'translation_attrs is a Hash' do
-
- it 'takes the correct code path for a Hash' do
- attrs = {}
- attrs.should_receive(:each_value)
- PublicBody.new().translations_attributes = attrs
- end
-
- it 'updates an existing translation' do
- body = public_bodies(:geraldine_public_body)
- translation = body.translation_for(:es)
- params = { 'es' => { :locale => 'es',
- :name => 'Renamed' } }
-
- body.translations_attributes = params
- I18n.with_locale(:es) { expect(body.name).to eq('Renamed') }
- end
-
- it 'updates an existing translation and creates a new translation' do
- body = public_bodies(:geraldine_public_body)
- translation = body.translation_for(:es)
-
- expect(body.translations.size).to eq(2)
-
- body.translations_attributes = {
- 'es' => { :locale => 'es',
- :name => 'Renamed' },
- 'fr' => { :locale => 'fr',
- :name => 'Le Geraldine Quango' }
- }
-
- expect(body.translations.size).to eq(3)
- I18n.with_locale(:es) { expect(body.name).to eq('Renamed') }
- I18n.with_locale(:fr) { expect(body.name).to eq('Le Geraldine Quango') }
- end
-
- it 'skips empty translations' do
- body = public_bodies(:geraldine_public_body)
- translation = body.translation_for(:es)
-
- expect(body.translations.size).to eq(2)
-
- body.translations_attributes = {
- 'es' => { :locale => 'es',
- :name => 'Renamed' },
- 'fr' => { :locale => 'fr' }
- }
-
- expect(body.translations.size).to eq(2)
- end
-
- end
-
- context 'translation_attrs is an Array' do
-
- it 'takes the correct code path for an Array' do
- attrs = []
- attrs.should_receive(:each)
- PublicBody.new().translations_attributes = attrs
- end
-
- it 'creates a new translation' do
- body = public_bodies(:geraldine_public_body)
- body.translation_for(:es).destroy
- body.reload
-
- expect(body.translations.size).to eq(1)
-
- body.translations_attributes = [ {
- :locale => 'es',
- :name => 'Renamed'
- }
- ]
-
- expect(body.translations.size).to eq(2)
- I18n.with_locale(:es) { expect(body.name).to eq('Renamed') }
- end
-
- it 'skips empty translations' do
- body = public_bodies(:geraldine_public_body)
- body.translation_for(:es).destroy
- body.reload
-
- expect(body.translations.size).to eq(1)
-
- body.translations_attributes = [
- { :locale => 'empty' }
- ]
-
- expect(body.translations.size).to eq(1)
- end
-
- end
-
- end
-
+ describe :translations_attributes= do
+
+ context 'translation_attrs is a Hash' do
+
+ it 'does not persist translations' do
+ body = FactoryGirl.create(:public_body)
+ body.translations_attributes = { :es => { :locale => 'es',
+ :name => 'El Body' } }
+
+ expect(PublicBody.find(body.id).translations.size).to eq(1)
+ end
+
+ it 'creates a new translation' do
+ body = FactoryGirl.create(:public_body)
+ body.translations_attributes = { :es => { :locale => 'es',
+ :name => 'El Body' } }
+ body.save
+ body.reload
+ expect(body.name(:es)).to eq('El Body')
+ end
+
+ it 'updates an existing translation' do
+ body = FactoryGirl.create(:public_body)
+ body.translations_attributes = { 'es' => { :locale => 'es',
+ :name => 'El Body' } }
+ body.save
+
+ body.translations_attributes = { 'es' => { :id => body.translation_for(:es).id,
+ :locale => 'es',
+ :name => 'Renamed' } }
+ body.save
+ expect(body.name(:es)).to eq('Renamed')
+ end
+
+ it 'updates an existing translation and creates a new translation' do
+ body = FactoryGirl.create(:public_body)
+ body.translations.create(:locale => 'es',
+ :name => 'El Body')
+
+ expect(body.translations.size).to eq(2)
+
+ body.translations_attributes = {
+ 'es' => { :id => body.translation_for(:es).id,
+ :locale => 'es',
+ :name => 'Renamed' },
+ 'fr' => { :locale => 'fr',
+ :name => 'Le Body' }
+ }
+
+ expect(body.translations.size).to eq(3)
+ I18n.with_locale(:es) { expect(body.name).to eq('Renamed') }
+ I18n.with_locale(:fr) { expect(body.name).to eq('Le Body') }
+ end
+
+ it 'skips empty translations' do
+ body = FactoryGirl.create(:public_body)
+ body.translations.create(:locale => 'es',
+ :name => 'El Body')
+
+ expect(body.translations.size).to eq(2)
+
+ body.translations_attributes = {
+ 'es' => { :id => body.translation_for(:es).id,
+ :locale => 'es',
+ :name => 'Renamed' },
+ 'fr' => { :locale => 'fr' }
+ }
+
+ expect(body.translations.size).to eq(2)
+ end
+ end
+ end
end
+
describe PublicBody, " using tags" do
before do
@public_body = PublicBody.new(:name => 'Aardvark Monitoring Service',
@@ -1264,3 +1239,17 @@ describe PublicBody do
end
+describe PublicBody::Translation do
+
+ it 'requires a locale' do
+ translation = PublicBody::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 = PublicBody::Translation.new(:locale => I18n.default_locale)
+ expect(translation).to be_valid
+ end
+
+end