FIX: Do not error if autogenerated channel slug is blank (#19759)
In certain cases, like when `SiteSetting.slug_generation_method` is set to `none` with certain locales, the autogenerated chat channel slugs will end up blank. This was causing errors in unrelated jobs calling `update!` on the channel. Instead, we should just copy Category behaviour, which does not error if the autogenerated slug ends up blank. We already allow for this with chat channel URLs, using `-` in place of the missing slug.
This commit is contained in:
parent
6977761593
commit
07cc8c8634
|
@ -28,16 +28,18 @@ class CategoryChannel < ChatChannel
|
|||
end
|
||||
|
||||
def ensure_slug_ok
|
||||
# if we don't unescape it first we strip the % from the encoded version
|
||||
slug = SiteSetting.slug_generation_method == "encoded" ? CGI.unescape(self.slug) : self.slug
|
||||
self.slug = Slug.for(slug, "", method: :encoded)
|
||||
if self.slug.present?
|
||||
# if we don't unescape it first we strip the % from the encoded version
|
||||
slug = SiteSetting.slug_generation_method == "encoded" ? CGI.unescape(self.slug) : self.slug
|
||||
self.slug = Slug.for(slug, "", method: :encoded)
|
||||
|
||||
if self.slug.blank?
|
||||
errors.add(:slug, :invalid)
|
||||
elsif SiteSetting.slug_generation_method == "ascii" && !CGI.unescape(self.slug).ascii_only?
|
||||
errors.add(:slug, I18n.t("chat.category_channel.errors.slug_contains_non_ascii_chars"))
|
||||
elsif duplicate_slug?
|
||||
errors.add(:slug, I18n.t("chat.category_channel.errors.is_already_in_use"))
|
||||
if self.slug.blank?
|
||||
errors.add(:slug, :invalid)
|
||||
elsif SiteSetting.slug_generation_method == "ascii" && !CGI.unescape(self.slug).ascii_only?
|
||||
errors.add(:slug, I18n.t("chat.category_channel.errors.slug_contains_non_ascii_chars"))
|
||||
elsif duplicate_slug?
|
||||
errors.add(:slug, I18n.t("chat.category_channel.errors.is_already_in_use"))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -124,6 +124,13 @@ RSpec.describe CategoryChannel do
|
|||
channel.validate
|
||||
expect(channel.errors.full_messages).to include("Slug is invalid")
|
||||
end
|
||||
|
||||
it "does not add a validation error when autogenerated slug ends up empty" do
|
||||
SiteSetting.slug_generation_method = "none"
|
||||
channel.update(name: "は無効です", slug: nil)
|
||||
expect(channel).to be_valid
|
||||
expect(channel.slug).to eq("")
|
||||
end
|
||||
end
|
||||
|
||||
context "when there is a duplicate slug" do
|
||||
|
|
Loading…
Reference in New Issue