112 lines
3.3 KiB
Ruby
112 lines
3.3 KiB
Ruby
|
# frozen_string_literal: true
|
|||
|
|
|||
|
RSpec.describe "Channel - Info - About page", type: :system, js: true do
|
|||
|
fab!(:channel_1) { Fabricate(:category_channel) }
|
|||
|
|
|||
|
let(:chat_page) { PageObjects::Pages::Chat.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__title")).to have_content(channel_1.title)
|
|||
|
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__title")["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 title" do
|
|||
|
chat_page.visit_channel_about(channel_1)
|
|||
|
|
|||
|
expect(page).to have_no_selector(".edit-title-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 {
|
|||
|
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 title" do
|
|||
|
chat_page.visit_channel_about(channel_1)
|
|||
|
find(".edit-title-btn").click
|
|||
|
|
|||
|
expect(page).to have_selector(
|
|||
|
".chat-channel-edit-title-modal__title-input",
|
|||
|
text: channel_1.title,
|
|||
|
)
|
|||
|
|
|||
|
title = "A new title"
|
|||
|
find(".chat-channel-edit-title-modal__title-input").fill_in(with: title)
|
|||
|
find(".create").click
|
|||
|
|
|||
|
expect(page).to have_content(title)
|
|||
|
end
|
|||
|
|
|||
|
it "can edit description" do
|
|||
|
chat_page.visit_channel_about(channel_1)
|
|||
|
find(".edit-description-btn").click
|
|||
|
|
|||
|
expect(page).to have_selector(
|
|||
|
".chat-channel-edit-description-modal__description-input",
|
|||
|
text: channel_1.description,
|
|||
|
)
|
|||
|
|
|||
|
description = "A new description"
|
|||
|
find(".chat-channel-edit-description-modal__description-input").fill_in(with: description)
|
|||
|
find(".create").click
|
|||
|
|
|||
|
expect(page).to have_content(description)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|