discourse/plugins/chat/spec/system/channel_settings_page_spec.rb
Joffrey JAFFEUX ea0b8ca38c
FEATURE: allows to enable/disable threading in UI (#22307)
Enabling/Disabling threading has been possible through command line until now. This commit introduces two new UIs:

- When creating a channel, it will be available once the category has been selected
- On the settings page of a channel for admins
2023-06-29 07:19:12 +02:00

215 lines
7.3 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 "Channel - Info - Settings page", type: :system do
let(:chat_page) { PageObjects::Pages::Chat.new }
fab!(:current_user) { Fabricate(:user) }
fab!(:channel_1) { Fabricate(:category_channel) }
before do
chat_system_bootstrap
sign_in(current_user)
end
context "as unauthorized user" do
before { SiteSetting.chat_allowed_groups = Fabricate(:group).id }
it "redirects to home page" do
chat_page.visit_channel_settings(channel_1)
expect(page).to have_current_path("/latest")
end
end
context "as authorized user" do
context "as not member" do
it "redirects to about tab" do
chat_page.visit_channel_settings(channel_1)
expect(page).to have_current_path("/chat/c/#{channel_1.slug}/#{channel_1.id}/info/about")
end
it "doesnt have settings tab" do
chat_page.visit_channel_settings(channel_1)
expect(page).to have_no_selector(".chat-tabs-list__item[aria-controls='settings-tab']")
end
context "as an admin" do
before { sign_in(Fabricate(:admin)) }
it "shows settings tab" do
chat_page.visit_channel_settings(channel_1)
expect(page).to have_selector(".chat-tabs-list__item[aria-controls='settings-tab']")
end
it "can navigate to settings tab" do
chat_page.visit_channel_settings(channel_1)
expect(page).to have_current_path(
"/chat/c/#{channel_1.slug}/#{channel_1.id}/info/settings",
)
end
end
end
context "as a member" do
before { channel_1.add(current_user) }
context "when visiting the settings of a recently joined channel" do
fab!(:channel_2) { Fabricate(:category_channel) }
it "is correctly populated" do
chat_page.visit_browse
find(
".chat-channel-card[data-channel-id='#{channel_2.id}'] .toggle-channel-membership-button",
).click
expect(
page.find(".chat-channel-card[data-channel-id='#{channel_2.id}']"),
).to have_content(I18n.t("js.chat.joined").upcase)
find(
".chat-channel-card[data-channel-id='#{channel_2.id}'] .chat-channel-card__setting",
).click
expect(page).to have_content(I18n.t("js.chat.notification_levels.mention"))
end
end
it "can mute channel" do
chat_page.visit_channel_settings(channel_1)
membership = channel_1.membership_for(current_user)
expect {
select_kit =
PageObjects::Components::SelectKit.new(".-mute .channel-settings-view__selector")
select_kit.expand
select_kit.select_row_by_name("On")
expect(page).to have_content(I18n.t("js.chat.settings.saved"))
}.to change { membership.reload.muted }.from(false).to(true)
end
it "can change desktop notification level" do
chat_page.visit_channel_settings(channel_1)
membership = channel_1.membership_for(current_user)
expect {
select_kit =
PageObjects::Components::SelectKit.new(
".-desktop-notification-level .channel-settings-view__selector",
)
select_kit.expand
select_kit.select_row_by_name("Never")
expect(page).to have_content(I18n.t("js.chat.settings.saved"))
}.to change { membership.reload.desktop_notification_level }.from("mention").to("never")
end
it "can change mobile notification level" do
chat_page.visit_channel_settings(channel_1)
membership = channel_1.membership_for(current_user)
expect {
select_kit =
PageObjects::Components::SelectKit.new(
".-mobile-notification-level .channel-settings-view__selector",
)
select_kit.expand
select_kit.select_row_by_name("Never")
expect(page).to have_content(I18n.t("js.chat.settings.saved"))
}.to change { membership.reload.mobile_notification_level }.from("mention").to("never")
end
it "doesnt show admin section" do
chat_page.visit_channel_settings(channel_1)
expect(page).to have_no_content(I18n.t("js.chat.settings.admin_title"))
end
context "as an admin" do
before { sign_in(Fabricate(:admin)) }
it "shows admin section" do
chat_page.visit_channel_settings(channel_1)
expect(page).to have_content(I18n.t("js.chat.settings.admin_title"))
end
it "can change auto join setting" do
chat_page.visit_channel_settings(channel_1)
expect {
select_kit =
PageObjects::Components::SelectKit.new(".-autojoin .channel-settings-view__selector")
select_kit.expand
select_kit.select_row_by_name("Yes")
find("#dialog-holder .btn-primary").click
expect(page).to have_content(I18n.t("js.chat.settings.saved"))
}.to change { channel_1.reload.auto_join_users }.from(false).to(true)
end
it "can change allow channel wide mentions" do
chat_page.visit_channel_settings(channel_1)
expect {
select_kit =
PageObjects::Components::SelectKit.new(
".-channel-wide-mentions .channel-settings-view__selector",
)
select_kit.expand
select_kit.select_row_by_name("No")
expect(page).to have_content(I18n.t("js.chat.settings.saved"))
}.to change { channel_1.reload.allow_channel_wide_mentions }.from(true).to(false)
end
it "can close channel" do
chat_page.visit_channel_settings(channel_1)
expect {
click_button(I18n.t("js.chat.channel_settings.close_channel"))
find("#chat-channel-toggle-btn").click
expect(page).to have_content(I18n.t("js.chat.channel_status.closed_header"))
}.to change { channel_1.reload.status }.from("open").to("closed")
end
it "can enable threading" do
SiteSetting.enable_experimental_chat_threaded_discussions = true
chat_page.visit_channel_settings(channel_1)
expect {
select_kit =
PageObjects::Components::SelectKit.new(".-threading .channel-settings-view__selector")
select_kit.expand
select_kit.select_row_by_name("Enabled")
expect(page).to have_content(I18n.t("js.chat.settings.saved"))
}.to change { channel_1.reload.threading_enabled }.from(false).to(true)
end
it "can delete channel" do
chat_page.visit_channel_settings(channel_1)
click_button(I18n.t("js.chat.channel_settings.delete_channel"))
fill_in("channel-delete-confirm-name", with: channel_1.title)
find_button("chat-confirm-delete-channel", disabled: false).click
expect(page).to have_content(I18n.t("js.chat.channel_delete.process_started"))
end
context "when confirmation name is wrong" do
it "doesnt delete submission" do
chat_page.visit_channel_settings(channel_1)
find(".delete-btn").click
fill_in("channel-delete-confirm-name", with: channel_1.title + "wrong")
expect(page).to have_button("chat-confirm-delete-channel", disabled: true)
end
end
end
end
end
end