Commit a4f93f991bb8fab912de74566fa9e3c172a3f9aa

Authored by Rodrigo Souto
1 parent 9ef330cf

[language-selection] Verifing available languages

app/models/environment.rb
@@ -767,6 +767,11 @@ class Environment < ActiveRecord::Base @@ -767,6 +767,11 @@ class Environment < ActiveRecord::Base
767 portal_community ? portal_community.image_galleries : [] 767 portal_community ? portal_community.image_galleries : []
768 end 768 end
769 769
  770 + serialize :languages
  771 +
  772 + validate :default_language_available
  773 + validate :languages_available
  774 +
770 def locales 775 def locales
771 languages || Noosfero.locales 776 languages || Noosfero.locales
772 end 777 end
@@ -783,4 +788,23 @@ class Environment < ActiveRecord::Base @@ -783,4 +788,23 @@ class Environment < ActiveRecord::Base
783 end 788 end
784 locales_list 789 locales_list
785 end 790 end
  791 +
  792 + private
  793 +
  794 + def default_language_available
  795 + if default_language.present? && !available_locales.include?(default_language)
  796 + errors.add(:default_language, _('is not available.'))
  797 + end
  798 + end
  799 +
  800 + def languages_available
  801 + if languages.present?
  802 + languages.each do |key, value|
  803 + if Noosfero.locales[key] != value
  804 + errors.add(:languages, _('have unsupported languages.'))
  805 + break
  806 + end
  807 + end
  808 + end
  809 + end
786 end 810 end
test/unit/environment_test.rb
@@ -1221,6 +1221,18 @@ class EnvironmentTest < ActiveSupport::TestCase @@ -1221,6 +1221,18 @@ class EnvironmentTest < ActiveSupport::TestCase
1221 assert_not_includes environment.licenses, l3 1221 assert_not_includes environment.licenses, l3
1222 end 1222 end
1223 1223
  1224 + should 'allow only default languages there are defined in available locales' do
  1225 + environment = Environment.default
  1226 + environment.stubs(:available_locales).returns(['en'])
  1227 + environment.default_language = 'pt'
  1228 + environment.valid?
  1229 + assert environment.errors.invalid?(:default_language)
  1230 +
  1231 + environment.default_language = 'en'
  1232 + environment.valid?
  1233 + assert !environment.errors.invalid?(:default_language)
  1234 + end
  1235 +
1224 should 'define default locale or use the config default locale' do 1236 should 'define default locale or use the config default locale' do
1225 environment = Environment.default 1237 environment = Environment.default
1226 environment.default_language = nil 1238 environment.default_language = nil
@@ -1232,6 +1244,23 @@ class EnvironmentTest < ActiveSupport::TestCase @@ -1232,6 +1244,23 @@ class EnvironmentTest < ActiveSupport::TestCase
1232 assert_equal environment.default_language, environment.default_locale 1244 assert_equal environment.default_language, environment.default_locale
1233 end 1245 end
1234 1246
  1247 + should 'allow only languages there are defined in locales' do
  1248 + environment = Environment.default
  1249 + Noosfero.stubs(:locales).returns({'en' => 'English'})
  1250 +
  1251 + environment.languages = {'pt' => 'Português'}
  1252 + environment.valid?
  1253 + assert environment.errors.invalid?(:languages)
  1254 +
  1255 + environment.languages = {'en' => 'Bli blo'}
  1256 + environment.valid?
  1257 + assert environment.errors.invalid?(:languages)
  1258 +
  1259 + environment.languages = {'en' => 'English'}
  1260 + environment.valid?
  1261 + assert !environment.errors.invalid?(:languages)
  1262 + end
  1263 +
1235 should 'define locales or use the config locales' do 1264 should 'define locales or use the config locales' do
1236 environment = Environment.default 1265 environment = Environment.default
1237 environment.languages = nil 1266 environment.languages = nil