Commit a4f93f991bb8fab912de74566fa9e3c172a3f9aa
1 parent
9ef330cf
Exists in
master
and in
23 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 |