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 | 767 | portal_community ? portal_community.image_galleries : [] |
768 | 768 | end |
769 | 769 | |
770 | + serialize :languages | |
771 | + | |
772 | + validate :default_language_available | |
773 | + validate :languages_available | |
774 | + | |
770 | 775 | def locales |
771 | 776 | languages || Noosfero.locales |
772 | 777 | end |
... | ... | @@ -783,4 +788,23 @@ class Environment < ActiveRecord::Base |
783 | 788 | end |
784 | 789 | locales_list |
785 | 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 | 810 | end | ... | ... |
test/unit/environment_test.rb
... | ... | @@ -1221,6 +1221,18 @@ class EnvironmentTest < ActiveSupport::TestCase |
1221 | 1221 | assert_not_includes environment.licenses, l3 |
1222 | 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 | 1236 | should 'define default locale or use the config default locale' do |
1225 | 1237 | environment = Environment.default |
1226 | 1238 | environment.default_language = nil |
... | ... | @@ -1232,6 +1244,23 @@ class EnvironmentTest < ActiveSupport::TestCase |
1232 | 1244 | assert_equal environment.default_language, environment.default_locale |
1233 | 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 | 1264 | should 'define locales or use the config locales' do |
1236 | 1265 | environment = Environment.default |
1237 | 1266 | environment.languages = nil | ... | ... |