mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
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.
95 lines
2.7 KiB
Ruby
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
|