Commit a4f93f991bb8fab912de74566fa9e3c172a3f9aa
1 parent
9ef330cf
Exists in
staging
and in
42 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 | ... | ... |