FIX: Managing sidebar custom sections not working on subfolder (#22773)

Why this change?

We were verifying that a url for a section link in a custom sidebar
section is valid by passing the url string to `Router#recognize`.
If a `rootURL` has been set on the router, the url string that is passed
to `Router#recognize` has to start with the `rootURL`.

This commit fixes the problem by ensuring that `RouteInfoHelper` adds
the application subfolder path before calling `Router#recognize` on the
url string.
This commit is contained in:
Alan Guo Xiang Tan 2023-07-25 13:57:49 +08:00 committed by GitHub
parent fe1034e89c
commit 752bb29415
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 19 deletions

View File

@ -10,6 +10,7 @@ import { A } from "@ember/array";
import { SIDEBAR_SECTION, SIDEBAR_URL } from "discourse/lib/constants";
import { bind } from "discourse-common/utils/decorators";
import { action } from "@ember/object";
import RouteInfoHelper from "discourse/lib/sidebar/route-info-helper";
const FULL_RELOAD_LINKS_REGEX = [
/^\/my\/[a-z_\-\/]+$/,
@ -227,8 +228,10 @@ class SectionLink {
}
#validInternal() {
const routeInfoHelper = new RouteInfoHelper(this.router, this.path);
return (
this.router.recognize(this.path).name !== "unknown" ||
routeInfoHelper.route !== "unknown" ||
FULL_RELOAD_LINKS_REGEX.some((regex) => this.path.match(regex))
);
}

View File

@ -1,6 +1,6 @@
export default class RouteInfoHelper {
constructor(router, url) {
this.routeInfo = router.recognize(url);
this.routeInfo = router.recognize(router.rootURL.replace(/\/$/, "") + url);
}
get route() {

View File

@ -14,11 +14,14 @@ module SystemHelpers
end
def sign_in(user)
visit "/session/#{user.encoded_username}/become.json?redirect=false"
visit File.join(
GlobalSetting.relative_url_root || "",
"/session/#{user.encoded_username}/become.json?redirect=false",
)
end
def sign_out
delete "/session"
delete File.join(GlobalSetting.relative_url_root || "", "/session")
end
def setup_system_test

View File

@ -8,13 +8,14 @@ describe "Custom sidebar sections", type: :system do
before { user.user_option.update!(external_links_in_new_tab: true) }
shared_examples "creating custom sections" do |relative_root_url|
it "allows the user to create custom section" do
visit("/latest")
visit("#{relative_root_url}/latest")
expect(sidebar).to have_no_add_section_button
sign_in user
visit("/latest")
visit("#{relative_root_url}/latest")
sidebar.click_add_section_button
expect(section_modal).to be_visible
@ -31,6 +32,15 @@ describe "Custom sidebar sections", type: :system do
expect(sidebar).to have_section("My section")
expect(sidebar).to have_section_link("Sidebar Tags")
end
end
include_examples "creating custom sections"
context "when subfolder install" do
before { set_subfolder "/community" }
include_examples "creating custom sections", "/community"
end
it "allows the user to create custom section with /my link" do
sign_in user