From 19a0bdc0ee08777eebd5c4c25bc92d1dc8b978e5 Mon Sep 17 00:00:00 2001 From: Jamie Wilson <jamie.wilson@discourse.org> Date: Thu, 5 Jan 2023 15:38:32 -0500 Subject: [PATCH] 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`). --- app/serializers/reviewable_score_serializer.rb | 2 +- spec/fabricators/category_fabricator.rb | 1 + spec/serializers/reviewable_score_serializer_spec.rb | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/serializers/reviewable_score_serializer.rb b/app/serializers/reviewable_score_serializer.rb index 6a0eac38d0a..5a4d1f05ded 100644 --- a/app/serializers/reviewable_score_serializer.rb +++ b/app/serializers/reviewable_score_serializer.rb @@ -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 diff --git a/spec/fabricators/category_fabricator.rb b/spec/fabricators/category_fabricator.rb index 0e14967af41..3793bb118ee 100644 --- a/spec/fabricators/category_fabricator.rb +++ b/spec/fabricators/category_fabricator.rb @@ -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 diff --git a/spec/serializers/reviewable_score_serializer_spec.rb b/spec/serializers/reviewable_score_serializer_spec.rb index 1a52cbe9a8f..4b58979493f 100644 --- a/spec/serializers/reviewable_score_serializer_spec.rb +++ b/spec/serializers/reviewable_score_serializer_spec.rb @@ -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)