diff --git a/db/migrate/20120823215007_add_languages_and_default_language_to_environment.rb b/db/migrate/20120823215007_add_languages_and_default_language_to_environment.rb
new file mode 100644
index 0000000..150b07c
--- /dev/null
+++ b/db/migrate/20120823215007_add_languages_and_default_language_to_environment.rb
@@ -0,0 +1,11 @@
+class AddLanguagesAndDefaultLanguageToEnvironment < ActiveRecord::Migration
+ def self.up
+ add_column :environments, :languages, :string
+ add_column :environments, :default_language, :string
+ end
+
+ def self.down
+ remove_column :environments, :languages
+ remove_column :environments, :default_language
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 37680ca..ac7cc14 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20120818030329) do
+ActiveRecord::Schema.define(:version => 20120823215007) do
create_table "abuse_reports", :force => true do |t|
t.integer "reporter_id"
@@ -259,6 +259,8 @@ ActiveRecord::Schema.define(:version => 20120818030329) do
t.datetime "created_at"
t.datetime "updated_at"
t.integer "reports_lower_bound", :default => 0, :null => false
+ t.string "languages"
+ t.string "default_language"
end
create_table "external_feeds", :force => true do |t|
diff --git a/public/designs/themes/base/footer.rhtml b/public/designs/themes/base/footer.rhtml
index 2384da9..4e1a0bc 100644
--- a/public/designs/themes/base/footer.rhtml
+++ b/public/designs/themes/base/footer.rhtml
@@ -4,4 +4,4 @@
<%= _('This social network uses Noosfero, developed by %s and licensed under the GNU Affero General Public License version 3 or any later version.') % link_to('Colivre', 'http://colivre.coop.br/') %>
-<%= language_chooser %>
+<%= language_chooser(environment) %>
diff --git a/test/unit/article_test.rb b/test/unit/article_test.rb
index 60eb4a9..31aed0a 100644
--- a/test/unit/article_test.rb
+++ b/test/unit/article_test.rb
@@ -1211,7 +1211,7 @@ class ArticleTest < ActiveSupport::TestCase
end
should 'validade inclusion of language' do
- a = build(Article)
+ a = build(Article, :profile_id => fast_create(Profile).id)
a.language = '12'
a.valid?
assert a.errors.invalid?(:language)
@@ -1243,7 +1243,7 @@ class ArticleTest < ActiveSupport::TestCase
end
should 'list possible translations' do
- native_article = fast_create(Article, :language => 'pt')
+ native_article = fast_create(Article, :language => 'pt', :profile_id => fast_create(Profile).id )
article_translation = fast_create(Article, :language => 'en', :translation_of_id => native_article.id)
possible_translations = native_article.possible_translations
assert !possible_translations.include?('en')
@@ -1253,7 +1253,7 @@ class ArticleTest < ActiveSupport::TestCase
should 'verify if translation is already in use' do
native_article = fast_create(Article, :language => 'pt')
article_translation = fast_create(Article, :language => 'en', :translation_of_id => native_article.id)
- a = build(Article)
+ a = build(Article, :profile => fast_create(Profile))
a.language = 'en'
a.translation_of = native_article
a.valid?
@@ -1265,7 +1265,7 @@ class ArticleTest < ActiveSupport::TestCase
should 'verify if native translation is already in use' do
native_article = fast_create(Article, :language => 'pt')
- a = build(Article)
+ a = build(Article, :profile => fast_create(Profile))
a.language = 'pt'
a.translation_of = native_article
a.valid?
@@ -1277,7 +1277,7 @@ class ArticleTest < ActiveSupport::TestCase
should 'translation have a language' do
native_article = fast_create(Article, :language => 'pt')
- a = build(Article)
+ a = build(Article, :profile_id => fast_create(Profile).id)
a.translation_of = native_article
a.valid?
assert a.errors.invalid?(:language)
@@ -1287,8 +1287,8 @@ class ArticleTest < ActiveSupport::TestCase
end
should 'native translation have a language' do
- native_article = fast_create(Article)
- a = build(Article)
+ native_article = fast_create(Article, :profile_id => fast_create(Profile).id )
+ a = build(Article, :profile_id => fast_create(Profile).id)
a.language = 'en'
a.translation_of = native_article
a.valid?
@@ -1356,15 +1356,15 @@ class ArticleTest < ActiveSupport::TestCase
end
should 'not list own language as a possible translation if language has changed' do
- a = build(Article, :language => 'pt')
+ a = build(Article, :language => 'pt', :profile_id => fast_create(Profile).id)
assert !a.possible_translations.include?('pt')
- a = fast_create(Article, :language => 'pt')
+ a = fast_create(Article, :language => 'pt', :profile_id => fast_create(Profile).id )
a.language = 'en'
assert !a.possible_translations.include?('en')
end
should 'list own language as a possible translation if language has not changed' do
- a = fast_create(Article, :language => 'pt')
+ a = fast_create(Article, :language => 'pt', :profile_id => fast_create(Profile).id)
assert a.possible_translations.include?('pt')
end
diff --git a/test/unit/block_test.rb b/test/unit/block_test.rb
index df9ba3a..5406049 100644
--- a/test/unit/block_test.rb
+++ b/test/unit/block_test.rb
@@ -107,7 +107,7 @@ class BlockTest < ActiveSupport::TestCase
should 'be able to save display setting' do
user = create_user('testinguser').person
- box = fast_create(Box, :owner_id => user.id)
+ box = fast_create(Box, :owner_id => user.id, :owner_type => 'Profile')
block = create(Block, :display => 'never', :box_id => box.id)
block.reload
assert_equal 'never', block.display
@@ -115,7 +115,7 @@ class BlockTest < ActiveSupport::TestCase
should 'be able to update display setting' do
user = create_user('testinguser').person
- box = fast_create(Box, :owner_id => user.id)
+ box = fast_create(Box, :owner_id => user.id, :owner_type => 'Profile')
block = create(Block, :display => 'never', :box_id => box.id)
assert block.update_attributes!(:display => 'always')
block.reload
@@ -148,4 +148,12 @@ class BlockTest < ActiveSupport::TestCase
assert_equal false, block.visible?(:locale => 'en')
end
+ should 'delegate environment to box' do
+ box = fast_create(Box, :owner_id => fast_create(Profile).id)
+ block = Block.new(:box => box)
+ box.stubs(:environment).returns(Environment.default)
+
+ assert_equal box.environment, block.environment
+ end
+
end
diff --git a/test/unit/box_test.rb b/test/unit/box_test.rb
new file mode 100644
index 0000000..590a620
--- /dev/null
+++ b/test/unit/box_test.rb
@@ -0,0 +1,12 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class BoxTest < ActiveSupport::TestCase
+ should 'retrieve environment based on owner' do
+ profile = fast_create(Profile)
+ box = fast_create(Box, :owner_id => profile.id, :owner_type => 'Profile')
+ assert_equal profile.environment, box.environment
+
+ box = fast_create(Box, :owner_id => Environment.default.id, :owner_type => 'Environment')
+ assert_equal Environment.default, box.environment
+ end
+end
diff --git a/test/unit/environment_test.rb b/test/unit/environment_test.rb
index caa3bfb..8a67fbf 100644
--- a/test/unit/environment_test.rb
+++ b/test/unit/environment_test.rb
@@ -1220,4 +1220,37 @@ class EnvironmentTest < ActiveSupport::TestCase
assert_includes environment.licenses, l2
assert_not_includes environment.licenses, l3
end
+
+ should 'define default locale or use the config default locale' do
+ environment = Environment.default
+ environment.default_language = nil
+ environment.save!
+ assert_equal Noosfero.default_locale, environment.default_locale
+
+ environment.default_language = 'en'
+ environment.save!
+ assert_equal environment.default_language, environment.default_locale
+ end
+
+ should 'define locales or use the config locales' do
+ environment = Environment.default
+ environment.languages = nil
+ environment.save!
+ assert_equal Noosfero.locales, environment.locales
+
+ environment.languages = {'en' => 'English'}
+ environment.save!
+ assert_equal environment.languages, environment.locales
+ end
+
+ should 'define available_locales or use the config available_locales' do
+ environment = Environment.default
+ environment.languages = nil
+ environment.save!
+ assert_equal Noosfero.available_locales, environment.available_locales
+
+ environment.languages = {'pt' => 'Português', 'en' => 'English'}
+ environment.save!
+ assert_equal ['en', 'pt'], environment.available_locales
+ end
end
diff --git a/test/unit/language_helper_test.rb b/test/unit/language_helper_test.rb
index 68c57c4..7f6e004 100644
--- a/test/unit/language_helper_test.rb
+++ b/test/unit/language_helper_test.rb
@@ -23,14 +23,14 @@ class LanguageHelperTest < ActiveSupport::TestCase
Noosfero.expects(:locales).returns({ 'en' => 'English', 'pt_BR' => 'Português Brasileiro', 'fr' => 'Français', 'it' => 'Italiano' }).at_least_once
self.expects(:language).returns('pt_BR')
- result = self.language_chooser
+ result = self.language_chooser(Environment.default)
assert_match /Português Brasileiro<\/strong>/, result
assert_no_match /English<\/strong>/, result
assert_no_match /Français<\/strong>/, result
assert_no_match /Italiano<\/strong>/, result
self.expects(:language).returns('fr')
- result = self.language_chooser
+ result = self.language_chooser(Environment.default)
assert_no_match /Português Brasileiro<\/strong>/, result
assert_no_match /English<\/strong>/, result
assert_match /Français<\/strong>/, result
@@ -42,7 +42,7 @@ class LanguageHelperTest < ActiveSupport::TestCase
Noosfero.expects(:locales).returns({ 'en' => 'English', 'pt_BR' => 'Português Brasileiro', 'fr' => 'Français', 'it' => 'Italiano' }).at_least_once
self.expects(:language).returns('en')
- result = self.language_chooser(:element => 'dropdown')
+ result = self.language_chooser(Environment.default, :element => 'dropdown')
assert_match /