# frozen_string_literal: true RSpec.describe "Separate sidebar mode", type: :system do let(:chat_page) { PageObjects::Pages::Chat.new } let(:sidebar_page) { PageObjects::Pages::Sidebar.new } let(:sidebar_component) { PageObjects::Components::NavigationMenu::Sidebar.new } let(:chat_drawer_page) { PageObjects::Pages::ChatDrawer.new } let(:header_component) { PageObjects::Components::Chat::Header.new } fab!(:current_user) { Fabricate(:user) } fab!(:channel_1) { Fabricate(:chat_channel) } before do SiteSetting.navigation_menu = "sidebar" channel_1.add(current_user) chat_system_bootstrap sign_in(current_user) end describe "when separate sidebar mode is not set" do before do SiteSetting.chat_separate_sidebar_mode = "always" chat_page.prefers_full_page end it "uses the site setting" do visit("/") expect(sidebar_component).to have_switch_button("chat") expect(header_component).to have_open_chat_button expect(sidebar_component).to have_no_section("chat-channels") expect(sidebar_component).to have_section("Categories") chat_page.open_from_header expect(sidebar_component).to have_switch_button("main") expect(header_component).to have_open_forum_button expect(sidebar_component).to have_section("chat-channels") expect(sidebar_component).to have_no_section("Categories") find("#site-logo").click expect(sidebar_component).to have_switch_button("chat") expect(header_component).to have_open_chat_button expect(sidebar_component).to have_no_section("chat-channels") expect(sidebar_component).to have_section("Categories") end end describe "when separate sidebar mode is never" do before do current_user.user_option.update!( chat_separate_sidebar_mode: UserOption.chat_separate_sidebar_modes[:never], ) end context "with drawer" do before { chat_page.prefers_drawer } it "has the expected behavior" do visit("/") expect(sidebar_component).to have_no_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") sidebar_page.open_channel(channel_1) expect(sidebar_component).to have_no_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") chat_drawer_page.close expect(sidebar_component).to have_no_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") end end context "with full page" do before { chat_page.prefers_full_page } it "has the expected behavior" do visit("/") expect(sidebar_component).to have_no_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") sidebar_page.open_channel(channel_1) expect(sidebar_component).to have_no_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") find("#site-logo").click expect(sidebar_component).to have_no_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") end end end describe "when separate sidebar mode is always" do before do current_user.user_option.update( chat_separate_sidebar_mode: UserOption.chat_separate_sidebar_modes[:always], ) end context "with drawer" do before { chat_page.prefers_drawer } it "has the expected behavior" do visit("/") expect(sidebar_component).to have_switch_button("chat") expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_no_section("chat-channels") chat_page.open_from_header expect(sidebar_component).to have_no_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_no_section("chat-channels") chat_drawer_page.close expect(sidebar_component).to have_switch_button("chat") expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_no_section("chat-channels") sidebar_component.switch_to_chat expect(sidebar_component).to have_no_section("chat-channels") expect(sidebar_component).to have_section("Categories") end end context "with full page" do before { chat_page.prefers_full_page } it "has the expected behavior" do visit("/") expect(sidebar_component).to have_switch_button("chat") expect(header_component).to have_open_chat_button expect(sidebar_component).to have_no_section("chat-channels") expect(sidebar_component).to have_section("Categories") chat_page.open_from_header expect(sidebar_component).to have_switch_button("main") expect(header_component).to have_open_forum_button expect(sidebar_component).to have_section("chat-channels") expect(sidebar_component).to have_no_section("Categories") find("#site-logo").click expect(sidebar_component).to have_switch_button("chat") expect(header_component).to have_open_chat_button expect(sidebar_component).to have_no_section("chat-channels") expect(sidebar_component).to have_section("Categories") sidebar_component.switch_to_chat expect(sidebar_component).to have_section("chat-channels") expect(sidebar_component).to have_no_section("Categories") sidebar_component.switch_to_main expect(sidebar_component).to have_no_section("chat-channels") expect(sidebar_component).to have_section("Categories") end end end describe "when separate sidebar mode is fullscreen" do before do current_user.user_option.update( chat_separate_sidebar_mode: UserOption.chat_separate_sidebar_modes[:fullscreen], ) end context "with drawer" do before { chat_page.prefers_drawer } it "has the expected behavior" do visit("/") expect(sidebar_component).to have_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") sidebar_page.open_channel(channel_1) expect(sidebar_component).to have_no_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") chat_drawer_page.close expect(sidebar_component).to have_switch_button expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") sidebar_component.switch_to_chat expect(sidebar_component).to have_section("Categories") expect(sidebar_component).to have_section("chat-channels") end end context "with full page" do before { chat_page.prefers_full_page } it "has the expected behavior" do visit("/") expect(sidebar_component).to have_switch_button("chat") expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("chat-channels") expect(sidebar_component).to have_section("Categories") sidebar_page.open_channel(channel_1) expect(sidebar_component).to have_switch_button("main") expect(header_component).to have_open_forum_button expect(sidebar_component).to have_section("chat-channels") expect(sidebar_component).to have_no_section("Categories") find("#site-logo").click expect(sidebar_component).to have_switch_button("chat") expect(header_component).to have_open_chat_button expect(sidebar_component).to have_section("chat-channels") expect(sidebar_component).to have_section("Categories") sidebar_component.switch_to_chat expect(sidebar_component).to have_section("chat-channels") expect(sidebar_component).to have_no_section("Categories") sidebar_component.switch_to_main expect(sidebar_component).to have_section("chat-channels") expect(sidebar_component).to have_section("Categories") end end end end