mirror of
https://github.com/discourse/discourse.git
synced 2024-12-05 09:43:53 +08:00
9830c40386
This commit also standardize the naming pattern of modals: `<Chat::Modal::FooBar />` and changes css class accordingly. Co-authored-by: David Taylor <david@taylorhq.com>
139 lines
4.1 KiB
Ruby
139 lines
4.1 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
RSpec.describe "Channel - Info - About page", type: :system do
|
||
fab!(:channel_1) { Fabricate(:category_channel) }
|
||
|
||
let(:chat_page) { PageObjects::Pages::Chat.new }
|
||
let(:chat_channel_about_page) { PageObjects::Pages::ChatChannelAbout.new }
|
||
|
||
before { chat_system_bootstrap }
|
||
|
||
context "as regular user" do
|
||
fab!(:current_user) { Fabricate(:user) }
|
||
|
||
before { sign_in(current_user) }
|
||
|
||
it "shows channel info" do
|
||
chat_page.visit_channel_about(channel_1)
|
||
|
||
expect(page.find(".category-name")).to have_content(channel_1.chatable.name)
|
||
expect(page.find(".channel-info-about-view__name")).to have_content(channel_1.title)
|
||
expect(page.find(".channel-info-about-view__slug")).to have_content(channel_1.slug)
|
||
end
|
||
|
||
it "escapes channel title" do
|
||
channel_1.update!(name: "<script>alert('hello')</script>")
|
||
chat_page.visit_channel_about(channel_1)
|
||
|
||
expect(page.find(".channel-info-about-view__name")["innerHTML"].strip).to eq(
|
||
"<script>alert('hello')</script>",
|
||
)
|
||
expect(page.find(".chat-channel-title__name")["innerHTML"].strip).to eq(
|
||
"<script>alert('hello')</script>",
|
||
)
|
||
end
|
||
|
||
it "can’t edit name or slug" do
|
||
chat_page.visit_channel_about(channel_1)
|
||
|
||
expect(page).to have_no_selector(".edit-name-slug-btn")
|
||
end
|
||
|
||
it "can’t edit description" do
|
||
chat_page.visit_channel_about(channel_1)
|
||
|
||
expect(page).to have_no_selector(".edit-description-btn")
|
||
end
|
||
|
||
context "as a member" do
|
||
before { channel_1.add(current_user) }
|
||
|
||
it "can leave channel" do
|
||
chat_page.visit_channel_about(channel_1)
|
||
membership = channel_1.membership_for(current_user)
|
||
|
||
expect {
|
||
click_button(I18n.t("js.chat.channel_settings.leave_channel"))
|
||
expect(page).to have_content(I18n.t("js.chat.channel_settings.join_channel"))
|
||
}.to change { membership.reload.following }.from(true).to(false)
|
||
end
|
||
end
|
||
|
||
context "as not a member" do
|
||
it "can join channel" do
|
||
chat_page.visit_channel_about(channel_1)
|
||
|
||
expect {
|
||
click_button(I18n.t("js.chat.channel_settings.join_channel"))
|
||
expect(page).to have_content(I18n.t("js.chat.channel_settings.leave_channel"))
|
||
}.to change {
|
||
Chat::UserChatChannelMembership.where(user_id: current_user.id, following: true).count
|
||
}.by(1)
|
||
end
|
||
end
|
||
end
|
||
|
||
context "as admin" do
|
||
fab!(:current_user) { Fabricate(:admin) }
|
||
|
||
before { sign_in(current_user) }
|
||
|
||
it "can edit name" do
|
||
chat_page.visit_channel_about(channel_1)
|
||
|
||
edit_modal = chat_channel_about_page.open_edit_modal
|
||
|
||
expect(edit_modal).to have_name_input(channel_1.title)
|
||
|
||
name = "A new name"
|
||
|
||
edit_modal.fill_and_save_name(name)
|
||
|
||
expect(chat_channel_about_page).to have_name(name)
|
||
end
|
||
|
||
it "can edit description" do
|
||
chat_page.visit_channel_about(channel_1)
|
||
find(".edit-description-btn").click
|
||
|
||
expect(page).to have_selector(
|
||
".chat-modal-edit-channel-description__description-input",
|
||
text: channel_1.description,
|
||
)
|
||
|
||
description = "A new description"
|
||
find(".chat-modal-edit-channel-description__description-input").fill_in(with: description)
|
||
find(".create").click
|
||
|
||
expect(page).to have_content(description)
|
||
end
|
||
|
||
it "can edit slug" do
|
||
chat_page.visit_channel_about(channel_1)
|
||
edit_modal = chat_channel_about_page.open_edit_modal
|
||
|
||
slug = "gonzo-slug"
|
||
|
||
expect(edit_modal).to have_slug_input(channel_1.slug)
|
||
|
||
edit_modal.fill_and_save_slug(slug)
|
||
|
||
expect(chat_channel_about_page).to have_slug(slug)
|
||
end
|
||
|
||
it "can clear the slug to use the autogenerated version based on the name" do
|
||
channel_1.update!(name: "test channel")
|
||
chat_page.visit_channel_about(channel_1)
|
||
edit_modal = chat_channel_about_page.open_edit_modal
|
||
|
||
expect(edit_modal).to have_slug_input(channel_1.slug)
|
||
|
||
edit_modal.fill_in_slug_input("")
|
||
edit_modal.wait_for_auto_generated_slug
|
||
edit_modal.save_changes
|
||
|
||
expect(chat_channel_about_page).to have_slug("test-channel")
|
||
end
|
||
end
|
||
end
|