Commit a4f93f991bb8fab912de74566fa9e3c172a3f9aa
1 parent
9ef330cf
Exists in
master
and in
29 other branches
[language-selection] Verifing available languages
Showing
2 changed files
with
53 additions
and
0 deletions
Show diff stats
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 |