FIX: redirects to browse after removing last followed (#22563)
Prior to this change you might end up in a loop where removing a channel would redirect you to this channel and as we auto-follow opened direct message channels, you could never unfollow this last direct message channel.
This commit is contained in:
parent
10d155ea41
commit
ef21450be7
|
@ -303,6 +303,10 @@ export default class Chat extends Service {
|
||||||
this.chatChannelsManager.channels.forEach((channel) => {
|
this.chatChannelsManager.channels.forEach((channel) => {
|
||||||
const membership = channel.currentUserMembership;
|
const membership = channel.currentUserMembership;
|
||||||
|
|
||||||
|
if (!membership.following) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (channel.isDirectMessageChannel) {
|
if (channel.isDirectMessageChannel) {
|
||||||
if (!dmChannelWithUnread && channel.tracking.unreadCount > 0) {
|
if (!dmChannelWithUnread && channel.tracking.unreadCount > 0) {
|
||||||
dmChannelWithUnread = channel.id;
|
dmChannelWithUnread = channel.id;
|
||||||
|
|
|
@ -27,11 +27,17 @@ module PageObjects
|
||||||
end
|
end
|
||||||
|
|
||||||
def open_channel(channel)
|
def open_channel(channel)
|
||||||
find(".sidebar-section-link[href='/chat/c/#{channel.slug}/#{channel.id}']").click
|
find(".sidebar-section-link.channel-#{channel.id}").click
|
||||||
|
end
|
||||||
|
|
||||||
|
def remove_channel(channel)
|
||||||
|
selector = ".sidebar-section-link.channel-#{channel.id}"
|
||||||
|
find(selector).hover
|
||||||
|
find(selector + " .sidebar-section-hover-button").click
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_channel(channel)
|
def find_channel(channel)
|
||||||
find(".sidebar-section-link[href='/chat/c/#{channel.slug}/#{channel.id}']")
|
find(".sidebar-section-link.channel-#{channel.id}")
|
||||||
self
|
self
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
RSpec.describe "Removing channel", type: :system do
|
||||||
|
fab!(:current_user) { Fabricate(:user) }
|
||||||
|
|
||||||
|
let(:chat_page) { PageObjects::Pages::Chat.new }
|
||||||
|
let(:chat_sidebar_page) { PageObjects::Pages::Sidebar.new }
|
||||||
|
|
||||||
|
before do
|
||||||
|
chat_system_bootstrap
|
||||||
|
sign_in(current_user)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when removing last followed channel" do
|
||||||
|
fab!(:channel_1) { Fabricate(:chat_channel) }
|
||||||
|
fab!(:channel_2) { Fabricate(:direct_message_channel, users: [current_user, Fabricate(:user)]) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
Fabricate(
|
||||||
|
:user_chat_channel_membership,
|
||||||
|
user: current_user,
|
||||||
|
chat_channel: channel_1,
|
||||||
|
following: false,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "redirects to browse page" do
|
||||||
|
chat_page.visit_channel(channel_2)
|
||||||
|
chat_sidebar_page.remove_channel(channel_2)
|
||||||
|
|
||||||
|
expect(page).to have_current_path("/chat/browse/open")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when removing channel" do
|
||||||
|
fab!(:channel_1) { Fabricate(:chat_channel) }
|
||||||
|
fab!(:channel_2) { Fabricate(:direct_message_channel, users: [current_user, Fabricate(:user)]) }
|
||||||
|
|
||||||
|
before { channel_1.add(current_user) }
|
||||||
|
|
||||||
|
it "redirects to another followed channgel" do
|
||||||
|
chat_page.visit_channel(channel_2)
|
||||||
|
chat_sidebar_page.remove_channel(channel_2)
|
||||||
|
|
||||||
|
expect(page).to have_current_path(chat.channel_path(channel_1.slug, channel_1.id))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue