FIX: Link to category settings should use slug

Links to category settings were created using the category name. If the name was a single word, the link would be valid (regardless of capitalization).

For example, if the category was named `Awesome`

`/c/Awesome/edit/settings`

is a valid URL as that is a case-insensitive match for the category slug of `awesome`.

However, if the category had a space in it, the URL would be

`/c/Awesome%20Name/edit/settings`

which does not match the slug of `awesome-name`.

This change uses the category slug, rather than the name, which is the expected behaviour (see `Category.find_by_slug_path`).
This commit is contained in:
Jamie Wilson 2023-01-05 15:38:32 -05:00 committed by Alan Guo Xiang Tan
parent c4ea158656
commit 19a0bdc0ee
3 changed files with 3 additions and 2 deletions

View File

@ -72,7 +72,7 @@ class ReviewableScoreSerializer < ApplicationSerializer
when 'watched_word'
"#{Discourse.base_url}/admin/customize/watched_words"
when 'category'
"#{Discourse.base_url}/c/#{object.reviewable.category&.name}/edit/settings"
"#{Discourse.base_url}/c/#{object.reviewable.category&.slug}/edit/settings"
else
"#{Discourse.base_url}/admin/site_settings/category/all_results?filter=#{text}"
end

View File

@ -2,6 +2,7 @@
Fabricator(:category) do
name { sequence(:name) { |n| "Amazing Category #{n}" } }
slug { sequence(:slug) { |n| "amazing-category-#{n}" } }
skip_category_definition true
user
end

View File

@ -18,7 +18,7 @@ RSpec.describe ReviewableScoreSerializer do
category = Fabricate.build(:category)
reviewable.category = category
serialized = serialized_score('category')
link_url = "#{Discourse.base_url}/c/#{category.name}/edit/settings"
link_url = "#{Discourse.base_url}/c/#{category.slug}/edit/settings"
category_link = "<a href=\"#{link_url}\">#{I18n.t('reviewables.reasons.links.category')}</a>"
expect(serialized.reason).to include(category_link)