discourse/spec/system/keyboard_shortcuts_spec.rb
Joffrey JAFFEUX 963675c32e
FIX: do not show confirmation modal (#31304)
Currently when using the shortcuts to delete a post the UI would show
you the confirmation modal even if you don't have the right to do it.
This commit fixes the issue at the root in the
`deletePostWithConfirmation` function.
2025-02-12 17:04:08 +01:00

95 lines
2.7 KiB
Ruby

# frozen_string_literal: true
RSpec.describe "Keyboard shortcuts", type: :system do
it "can have default keyboard shortcuts disabled by the Plugin API" do
sign_in Fabricate(:admin)
t = Fabricate(:theme, name: "Theme With Tests")
t.set_field(
target: :extra_js,
type: :js,
name: "discourse/lib/pre-initializers/testing.js",
value: <<~JS,
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "disable-default-keyboard-shortcuts",
initialize() {
withPluginApi("1.6.0", (api) => {
// disable open shortcut modal
api.disableDefaultKeyboardShortcuts(["?"])
})
},
};
JS
)
t.save!
SiteSetting.default_theme_id = t.id
visit "/"
page.send_keys("?")
expect(page).to have_no_css(".keyboard-shortcuts-modal")
end
describe "<d>" do
fab!(:post)
let(:current_user) { Fabricate(:user) }
let(:topic_page) { PageObjects::Pages::Topic.new }
let(:dialog) { PageObjects::Components::Dialog.new }
before { sign_in(current_user) }
context "when user can't delete the post" do
it "doesn’t show the confirmation modal" do
topic_page.visit_topic(post.topic)
send_keys("j d")
expect(dialog).to be_closed
end
end
end
describe "<a>" do
let(:current_user) { topic.user }
let(:topic_page) { PageObjects::Pages::Topic.new }
before { sign_in(current_user) }
context "when on a private message page" do
fab!(:topic) { Fabricate(:private_message_topic) }
context "when the message is not archived" do
it "archives the message" do
topic_page.visit_topic(topic)
send_keys("a")
expect(page).to have_current_path("/u/#{current_user.username}/messages")
expect(UserArchivedMessage.exists?(topic: topic)).to be true
end
end
context "when the message is already archived" do
before { UserArchivedMessage.create!(topic: topic, user: current_user) }
it "moves back the message to inbox" do
topic_page.visit_topic(topic)
send_keys("a")
expect(page).to have_current_path("/u/#{current_user.username}/messages")
expect(UserArchivedMessage.exists?(topic: topic)).to be false
end
end
end
context "when on a public topic page" do
fab!(:topic)
it "doesn't archive the topic" do
topic_page.visit_topic(topic)
send_keys("a")
expect(page).to have_current_path("/t/#{topic.slug}/#{topic.id}")
expect(UserArchivedMessage.exists?(topic: topic)).to be false
end
end
end
end