mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 12:42:57 +08:00
d1f785e7de
The current behavior is to close drawer when pressing escape inside the input. After this change, first escape will blur the input, and second escape will close the drawer. This commit also refactors the whole shortcuts for drawer system spec.
93 lines
2.4 KiB
Ruby
93 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
RSpec.describe "Shortcuts | drawer", type: :system, js: true do
|
||
fab!(:user_1) { Fabricate(:admin) }
|
||
fab!(:channel_1) { Fabricate(:chat_channel) }
|
||
fab!(:channel_2) { Fabricate(:chat_channel) }
|
||
|
||
let(:chat_page) { PageObjects::Pages::Chat.new }
|
||
let(:channel_page) { PageObjects::Pages::ChatChannel.new }
|
||
let(:drawer_page) { PageObjects::Pages::ChatDrawer.new }
|
||
|
||
before do
|
||
chat_system_bootstrap(user_1, [channel_1, channel_2])
|
||
sign_in(user_1)
|
||
end
|
||
|
||
context "when drawer is closed" do
|
||
before { visit("/") }
|
||
|
||
context "when pressing dash" do
|
||
it "opens the drawer" do
|
||
page.send_keys("-")
|
||
|
||
expect(chat_page).to have_drawer
|
||
end
|
||
end
|
||
end
|
||
|
||
context "when drawer is opened" do
|
||
before do
|
||
visit("/")
|
||
chat_page.open_from_header
|
||
end
|
||
|
||
context "when pressing escape" do
|
||
context "when the composer is not focused" do
|
||
it "closes the drawer" do
|
||
expect(chat_page).to have_drawer
|
||
|
||
drawer_page.open_channel(channel_1)
|
||
page.send_keys(:tab) # ensures we focus out of input
|
||
page.send_keys(:escape)
|
||
|
||
expect(chat_page).to have_no_drawer
|
||
end
|
||
end
|
||
|
||
context "when the composer is focused" do
|
||
it "blurs the input" do
|
||
expect(chat_page).to have_drawer
|
||
|
||
drawer_page.open_channel(channel_1)
|
||
channel_page.composer.input.click
|
||
|
||
page.send_keys(:escape)
|
||
|
||
expect(chat_page).to have_drawer
|
||
end
|
||
end
|
||
end
|
||
|
||
context "when pressing a letter" do
|
||
it "doesn’t intercept the event" do
|
||
drawer_page.open_channel(channel_1)
|
||
page.send_keys(:tab) # simple way to ensure composer is not focused
|
||
page.send_keys("e")
|
||
|
||
expect(channel_page.composer.value).to eq("")
|
||
end
|
||
end
|
||
|
||
context "when using Up/Down arrows" do
|
||
it "navigates through the channels" do
|
||
drawer_page.open_channel(channel_1)
|
||
|
||
expect(chat_page).to have_drawer(channel_id: channel_1.id)
|
||
|
||
page.send_keys(%i[alt arrow_down])
|
||
|
||
expect(chat_page).to have_drawer(channel_id: channel_2.id)
|
||
|
||
page.send_keys(%i[alt arrow_down])
|
||
|
||
expect(chat_page).to have_drawer(channel_id: channel_1.id)
|
||
|
||
page.send_keys(%i[alt arrow_up])
|
||
|
||
expect(chat_page).to have_drawer(channel_id: channel_2.id)
|
||
end
|
||
end
|
||
end
|
||
end
|