FIX: Don't change automatic group name if localized name has been taken.

This commit is contained in:
Guo Xiang Tan 2017-01-18 12:20:23 +08:00
parent bfc52a8e6f
commit 59dfb51a35
2 changed files with 43 additions and 4 deletions

View File

@ -161,7 +161,13 @@ class Group < ActiveRecord::Base
# don't allow shoddy localization to break this # don't allow shoddy localization to break this
localized_name = I18n.t("groups.default_names.#{name}") localized_name = I18n.t("groups.default_names.#{name}")
validator = UsernameValidator.new(localized_name) validator = UsernameValidator.new(localized_name)
group.name = validator.valid_format? ? localized_name : name
group.name =
if !Group.where(name: localized_name).exists? && validator.valid_format?
localized_name
else
name
end
# the everyone group is special, it can include non-users so there is no # the everyone group is special, it can include non-users so there is no
# way to have the membership in a table # way to have the membership in a table

View File

@ -154,9 +154,42 @@ describe Group do
end end
it "makes sure the everyone group is not visible" do describe '.refresh_automatic_group!' do
g = Group.refresh_automatic_group!(:everyone) it "makes sure the everyone group is not visible" do
expect(g.visible).to eq(false) g = Group.refresh_automatic_group!(:everyone)
expect(g.visible).to eq(false)
end
it "uses the localized name if name has not been taken" do
begin
default_locale = SiteSetting.default_locale
I18n.locale = SiteSetting.default_locale = 'de'
group = Group.refresh_automatic_group!(:staff)
expect(group.name).to_not eq('staff')
expect(group.name).to eq(I18n.t('groups.default_names.staff'))
ensure
I18n.locale = SiteSetting.default_locale = default_locale
end
end
it "does not use the localized name if name has already been taken" do
begin
default_locale = SiteSetting.default_locale
I18n.locale = SiteSetting.default_locale = 'de'
another_group = Fabricate(:group,
name: I18n.t('groups.default_names.staff')
)
group = Group.refresh_automatic_group!(:staff)
expect(group.name).to eq('staff')
ensure
I18n.locale = SiteSetting.default_locale = default_locale
end
end
end end
it "Correctly handles removal of primary group" do it "Correctly handles removal of primary group" do