2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-03-04 01:15:08 +08:00
discourse/spec/system/keyboard_shortcuts_spec.rb

94 lines
2.7 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 "doesnt 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, :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