discourse/plugins/chat/spec/requests/application_controller_spec.rb
Martin Brennan 2193667e1f
FIX: Plugin JS failing to load would break admin interface (#29139)
If a plugin's JS fails to load for some reason, most commonly
ad blockers, the entire admin interface would break. This is because
we are adding links to the admin routes for plugins that define
them in the sidebar.

We have a fix for this already in the plugin list which shows a warning
to the admin. This fix just prevents the broken link from rendering
in the sidebar if the route is not valid.
2024-10-11 09:26:10 +10:00

45 lines
1.1 KiB
Ruby

# frozen_string_literal: true
RSpec.describe ApplicationController do
fab!(:user)
fab!(:admin)
def preloaded_json
JSON.parse(
Nokogiri::HTML5.fragment(response.body).css("div#data-preloaded").first["data-preloaded"],
)
end
before do
SiteSetting.chat_enabled = true
SiteSetting.chat_allowed_groups = Group::AUTO_GROUPS[:trust_level_0]
end
context "when user is admin" do
it "has correctly loaded preloaded data for visiblePlugins" do
sign_in(admin)
get "/latest"
expect(JSON.parse(preloaded_json["visiblePlugins"])).to include(
{
"name" => "chat",
"admin_route" => {
"label" => "chat.admin.title",
"location" => "chat",
"full_location" => "adminPlugins.show",
"use_new_show_route" => true,
},
"enabled" => true,
},
)
end
end
context "when user is not admin" do
it "does not include preloaded data for visiblePlugins" do
sign_in(user)
get "/latest"
expect(preloaded_json["visiblePlugins"]).to eq(nil)
end
end
end