discourse/spec/requests/admin/plugins_controller_spec.rb
Jarek Radosz 48691ee582
DEV: Enable Rails/FilePath rubocop rule (#40097)
(to be enabled in the shared config)
2026-05-19 19:07:54 +02:00

109 lines
2.9 KiB
Ruby
Vendored

# frozen_string_literal: true
RSpec.describe Admin::PluginsController do
fab!(:admin)
fab!(:moderator)
fab!(:user)
describe "#index" do
context "while logged in as an admin" do
before { sign_in(admin) }
it "returns plugins" do
get "/admin/plugins.json"
expect(response.status).to eq(200)
expect(response.parsed_body.has_key?("plugins")).to eq(true)
end
end
context "when logged in as a moderator" do
before { sign_in(moderator) }
it "returns plugins" do
get "/admin/plugins.json"
expect(response.status).to eq(200)
expect(response.parsed_body.has_key?("plugins")).to eq(true)
end
end
context "when logged in as a non-staff user" do
before { sign_in(user) }
it "denies access with a 404 response" do
get "/admin/plugins.json"
expect(response.status).to eq(404)
expect(response.parsed_body["errors"]).to include(I18n.t("not_found"))
end
end
end
describe "#show" do
before do
spoiler_alert =
Plugin::Instance.parse_from_source(Rails.root.join("plugins/spoiler-alert/plugin.rb").to_s)
poll = Plugin::Instance.parse_from_source(Rails.root.join("plugins/poll/plugin.rb").to_s)
Discourse.stubs(:plugins_by_name).returns(
{ "discourse-spoiler-alert" => spoiler_alert, "poll" => poll },
)
end
context "while logged in as an admin" do
before { sign_in(admin) }
it "returns a plugin" do
get "/admin/plugins/poll.json"
expect(response.status).to eq(200)
expect(response.parsed_body["name"]).to eq("poll")
end
it "returns a plugin with the discourse- prefix if the prefixless version is queried" do
get "/admin/plugins/spoiler-alert.json"
expect(response.status).to eq(200)
expect(response.parsed_body["name"]).to eq("spoiler-alert")
end
it "404s if the plugin is not found" do
get "/admin/plugins/casino.json"
expect(response.status).to eq(404)
expect(response.parsed_body["errors"]).to include(I18n.t("not_found"))
end
it "404s if the plugin is not visible" do
poll = Discourse.plugins_by_name["poll"]
poll.stubs(:visible?).returns(false)
get "/admin/plugins/poll.json"
expect(response.status).to eq(404)
end
end
context "when logged in as a moderator" do
before { sign_in(moderator) }
it "returns plugins" do
get "/admin/plugins/poll.json"
expect(response.status).to eq(200)
expect(response.parsed_body["name"]).to eq("poll")
end
end
context "when logged in as a non-staff user" do
before { sign_in(user) }
it "denies access with a 404 response" do
get "/admin/plugins/poll.json"
expect(response.status).to eq(404)
expect(response.parsed_body["errors"]).to include(I18n.t("not_found"))
end
end
end
end