discourse/plugins/chat/spec/system/shortcuts/drawer_spec.rb
Joffrey JAFFEUX d1f785e7de
UX: closes drawer on esc if input is not focused (#21772)
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.
2023-05-26 18:48:45 +02:00

93 lines
2.4 KiB
Ruby
Raw 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 "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 "doesnt 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