From a7a9148b1e2783ebe3408625e50b52c71eab9b7c Mon Sep 17 00:00:00 2001 From: David Battersby Date: Tue, 8 Oct 2024 13:13:01 +0400 Subject: [PATCH] DEV: consolidate chat channel notification settings (#29080) On the chat channel settings page, we want to show a single Send push notifications setting instead of the current Desktop notifications and Mobile push notifications settings. For existing users, use the Mobile push notifications setting value for the new Send push notifications setting. --- ..._user_notifications_settings_controller.rb | 2 +- .../app/jobs/regular/chat/notify_mentioned.rb | 5 +-- .../app/jobs/regular/chat/notify_watching.rb | 6 +-- .../chat/user_chat_channel_membership.rb | 9 ++-- .../base_channel_membership_serializer.rb | 3 +- .../app/services/chat/add_users_to_channel.rb | 3 +- .../chat/create_direct_message_channel.rb | 3 +- .../chat/routes/channel-info-settings.gjs | 43 ++++--------------- .../models/user-chat-channel-membership.js | 6 +-- .../discourse/services/chat-api.js | 3 +- plugins/chat/config/locales/client.en.yml | 3 +- ..._level_to_user_chat_channel_memberships.rb | 32 ++++++++++++++ .../chat/spec/fabricators/chat_fabricator.rb | 3 +- .../regular/chat/notify_mentioned_spec.rb | 8 ++-- .../jobs/regular/chat/notify_watching_spec.rb | 37 +++++++++------- .../spec/lib/chat/channel_fetcher_spec.rb | 3 +- ..._notifications_settings_controller_spec.rb | 12 ++---- .../structured_channel_serializer_spec.rb | 6 +-- .../create_direct_message_channel_spec.rb | 3 +- .../services/chat/message_destroyer_spec.rb | 6 +-- .../api/schemas/category_chat_channel.json | 3 +- .../schemas/user_chat_channel_membership.json | 6 +-- .../spec/system/channel_settings_page_spec.rb | 24 ++--------- 23 files changed, 97 insertions(+), 132 deletions(-) create mode 100644 plugins/chat/db/migrate/20241003122030_add_notification_level_to_user_chat_channel_memberships.rb diff --git a/plugins/chat/app/controllers/chat/api/channels_current_user_notifications_settings_controller.rb b/plugins/chat/app/controllers/chat/api/channels_current_user_notifications_settings_controller.rb index cb8bca0d987..ee955532779 100644 --- a/plugins/chat/app/controllers/chat/api/channels_current_user_notifications_settings_controller.rb +++ b/plugins/chat/app/controllers/chat/api/channels_current_user_notifications_settings_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Chat::Api::ChannelsCurrentUserNotificationsSettingsController < Chat::Api::ChannelsController - MEMBERSHIP_EDITABLE_PARAMS = %i[muted desktop_notification_level mobile_notification_level] + MEMBERSHIP_EDITABLE_PARAMS = %i[muted notification_level] def update settings_params = params.require(:notifications_settings).permit(MEMBERSHIP_EDITABLE_PARAMS) diff --git a/plugins/chat/app/jobs/regular/chat/notify_mentioned.rb b/plugins/chat/app/jobs/regular/chat/notify_mentioned.rb index dc1defcd2a0..32d78fb575e 100644 --- a/plugins/chat/app/jobs/regular/chat/notify_mentioned.rb +++ b/plugins/chat/app/jobs/regular/chat/notify_mentioned.rb @@ -131,15 +131,12 @@ module Jobs def send_notifications(membership, mention_type) payload = build_payload_for(membership, identifier_type: mention_type) - if !membership.desktop_notifications_never? && !membership.muted? + if !membership.notifications_never? && !membership.muted? ::MessageBus.publish( "/chat/notification-alert/#{membership.user_id}", payload, user_ids: [membership.user_id], ) - end - - if !membership.mobile_notifications_never? && !membership.muted? ::PostAlerter.push_notification(membership.user, payload) end end diff --git a/plugins/chat/app/jobs/regular/chat/notify_watching.rb b/plugins/chat/app/jobs/regular/chat/notify_watching.rb index c11afafefa5..de88fcf349e 100644 --- a/plugins/chat/app/jobs/regular/chat/notify_watching.rb +++ b/plugins/chat/app/jobs/regular/chat/notify_watching.rb @@ -24,7 +24,7 @@ module Jobs .where(chat_channel_id: @chat_channel.id) .where(following: true) .where( - "desktop_notification_level = :always OR mobile_notification_level = :always OR users.id IN (SELECT user_id FROM user_chat_thread_memberships WHERE thread_id = :thread_id AND notification_level = :watching)", + "notification_level = :always OR users.id IN (SELECT user_id FROM user_chat_thread_memberships WHERE thread_id = :thread_id AND notification_level = :watching)", always: always_notification_level, thread_id: @chat_message.thread_id, watching: ::Chat::NotificationLevels.all[:watching], @@ -95,7 +95,7 @@ module Jobs thread_membership && create_watched_thread_notification(thread_membership) end - if membership.desktop_notifications_always? && !membership.muted? + if membership.notifications_always? && !membership.muted? send_notification = DiscoursePluginRegistry.push_notification_filters.all? do |filter| filter.call(user, payload) @@ -107,9 +107,7 @@ module Jobs user_ids: [user.id], ) end - end - if membership.mobile_notifications_always? && !membership.muted? ::PostAlerter.push_notification(user, payload) end end diff --git a/plugins/chat/app/models/chat/user_chat_channel_membership.rb b/plugins/chat/app/models/chat/user_chat_channel_membership.rb index d2c63451ac9..4a28959c87c 100644 --- a/plugins/chat/app/models/chat/user_chat_channel_membership.rb +++ b/plugins/chat/app/models/chat/user_chat_channel_membership.rb @@ -3,6 +3,7 @@ module Chat class UserChatChannelMembership < ActiveRecord::Base self.table_name = "user_chat_channel_memberships" + self.ignored_columns = %w[desktop_notification_level mobile_notification_level] # TODO: Remove once 20241003122030_add_notification_level_to_user_chat_channel_memberships has been promoted to pre-deploy NOTIFICATION_LEVELS = { never: 0, mention: 1, always: 2 } @@ -10,8 +11,7 @@ module Chat belongs_to :last_read_message, class_name: "Chat::Message", optional: true belongs_to :chat_channel, class_name: "Chat::Channel", foreign_key: :chat_channel_id - enum :desktop_notification_level, NOTIFICATION_LEVELS, prefix: :desktop_notifications - enum :mobile_notification_level, NOTIFICATION_LEVELS, prefix: :mobile_notifications + enum :notification_level, NOTIFICATION_LEVELS, prefix: :notifications enum :join_mode, { manual: 0, automatic: 1 } def mark_read!(new_last_read_id = nil) @@ -30,16 +30,15 @@ end # last_read_message_id :integer # following :boolean default(FALSE), not null # muted :boolean default(FALSE), not null -# desktop_notification_level :integer default("mention"), not null -# mobile_notification_level :integer default("mention"), not null # created_at :datetime not null # updated_at :datetime not null # last_unread_mention_when_emailed_id :integer # join_mode :integer default("manual"), not null # last_viewed_at :datetime not null +# notification_level :integer default("mention"), not null # # Indexes # -# user_chat_channel_memberships_index (user_id,chat_channel_id,desktop_notification_level,mobile_notification_level,following) +# user_chat_channel_memberships_index (user_id,chat_channel_id,notification_level,following) # user_chat_channel_unique_memberships (user_id,chat_channel_id) UNIQUE # diff --git a/plugins/chat/app/serializers/chat/base_channel_membership_serializer.rb b/plugins/chat/app/serializers/chat/base_channel_membership_serializer.rb index 3b3b910ceeb..20f22b7226c 100644 --- a/plugins/chat/app/serializers/chat/base_channel_membership_serializer.rb +++ b/plugins/chat/app/serializers/chat/base_channel_membership_serializer.rb @@ -4,8 +4,7 @@ module Chat class BaseChannelMembershipSerializer < ApplicationSerializer attributes :following, :muted, - :desktop_notification_level, - :mobile_notification_level, + :notification_level, :chat_channel_id, :last_read_message_id, :last_viewed_at diff --git a/plugins/chat/app/services/chat/add_users_to_channel.rb b/plugins/chat/app/services/chat/add_users_to_channel.rb index abbf38009b5..6c0325b3bce 100644 --- a/plugins/chat/app/services/chat/add_users_to_channel.rb +++ b/plugins/chat/app/services/chat/add_users_to_channel.rb @@ -74,8 +74,7 @@ module Chat chat_channel_id: channel.id, muted: false, following: true, - desktop_notification_level: always_level, - mobile_notification_level: always_level, + notification_level: always_level, created_at: Time.zone.now, updated_at: Time.zone.now, } diff --git a/plugins/chat/app/services/chat/create_direct_message_channel.rb b/plugins/chat/app/services/chat/create_direct_message_channel.rb index 3af0d6df2c5..b1dd503854c 100644 --- a/plugins/chat/app/services/chat/create_direct_message_channel.rb +++ b/plugins/chat/app/services/chat/create_direct_message_channel.rb @@ -105,8 +105,7 @@ module Chat chat_channel_id: channel.id, muted: false, following: false, - desktop_notification_level: always_level, - mobile_notification_level: always_level, + notification_level: always_level, created_at: Time.zone.now, updated_at: Time.zone.now, } diff --git a/plugins/chat/assets/javascripts/discourse/components/chat/routes/channel-info-settings.gjs b/plugins/chat/assets/javascripts/discourse/components/chat/routes/channel-info-settings.gjs index c7fc147fb5b..292cfaf8098 100644 --- a/plugins/chat/assets/javascripts/discourse/components/chat/routes/channel-info-settings.gjs +++ b/plugins/chat/assets/javascripts/discourse/components/chat/routes/channel-info-settings.gjs @@ -62,12 +62,7 @@ export default class ChatRouteChannelInfoSettings extends Component { "chat.settings.channel_wide_mentions_label" ); autoJoinLabel = I18n.t("chat.settings.auto_join_users_label"); - desktopNotificationsLevelLabel = I18n.t( - "chat.settings.desktop_notification_level" - ); - mobileNotificationsLevelLabel = I18n.t( - "chat.settings.mobile_notification_level" - ); + notificationsLevelLabel = I18n.t("chat.settings.notification_level"); get canEditChannel() { if ( @@ -121,11 +116,7 @@ export default class ChatRouteChannelInfoSettings extends Component { return this.args.channel.isCategoryChannel; } - get shouldRenderDesktopNotificationsLevelSection() { - return !this.isChannelMuted; - } - - get shouldRenderMobileNotificationsLevelSection() { + get shouldRenderNotificationsLevelSection() { return !this.isChannelMuted; } @@ -412,37 +403,19 @@ export default class ChatRouteChannelInfoSettings extends Component { - {{#if this.shouldRenderDesktopNotificationsLevelSection}} - + {{#if this.shouldRenderNotificationsLevelSection}} + <:action> - - - {{/if}} - - {{#if this.shouldRenderMobileNotificationsLevelSection}} - - <:action> - diff --git a/plugins/chat/assets/javascripts/discourse/models/user-chat-channel-membership.js b/plugins/chat/assets/javascripts/discourse/models/user-chat-channel-membership.js index 0e5b6fe11d3..09fecf5c526 100644 --- a/plugins/chat/assets/javascripts/discourse/models/user-chat-channel-membership.js +++ b/plugins/chat/assets/javascripts/discourse/models/user-chat-channel-membership.js @@ -8,8 +8,7 @@ export default class UserChatChannelMembership { @tracked following; @tracked muted; - @tracked desktopNotificationLevel; - @tracked mobileNotificationLevel; + @tracked notificationLevel; @tracked lastReadMessageId; @tracked lastViewedAt; @tracked user; @@ -17,8 +16,7 @@ export default class UserChatChannelMembership { constructor(args = {}) { this.following = args.following; this.muted = args.muted; - this.desktopNotificationLevel = args.desktop_notification_level; - this.mobileNotificationLevel = args.mobile_notification_level; + this.notificationLevel = args.notification_level; this.lastReadMessageId = args.last_read_message_id; this.lastViewedAt = new Date(args.last_viewed_at); this.user = this.#initUserModel(args.user); diff --git a/plugins/chat/assets/javascripts/discourse/services/chat-api.js b/plugins/chat/assets/javascripts/discourse/services/chat-api.js index 95dced79542..9c906f0688c 100644 --- a/plugins/chat/assets/javascripts/discourse/services/chat-api.js +++ b/plugins/chat/assets/javascripts/discourse/services/chat-api.js @@ -358,8 +358,7 @@ export default class ChatApi extends Service { * @param {number} channelId - The ID of the channel. * @param {object} data - The settings to modify. * @param {boolean} [data.muted] - Mutes the channel. - * @param {string} [data.desktop_notification_level] - Notifications level on desktop: never, mention or always. - * @param {string} [data.mobile_notification_level] - Notifications level on mobile: never, mention or always. + * @param {string} [data.notification_level] - Notifications level: never, mention or always. * @returns {Promise} */ updateCurrentUserChannelNotificationsSettings(channelId, data = {}) { diff --git a/plugins/chat/config/locales/client.en.yml b/plugins/chat/config/locales/client.en.yml index 33a829256af..d5e2d46b88a 100644 --- a/plugins/chat/config/locales/client.en.yml +++ b/plugins/chat/config/locales/client.en.yml @@ -479,10 +479,9 @@ en: auto_join_users_info: "Check hourly which users have been active in the last 3 months. Add them to this channel if they have access to the %{category} category." auto_join_users_info_no_category: "Check hourly which users have been active in the last 3 months. Add them to this channel if they have access to the selected category." auto_join_users_warning: "Every user who isn't a member of this channel and has access to the %{category} category will join. Are you sure?" - desktop_notification_level: "Desktop notifications" + notification_level: "Send push notifications" follow: "Join" followed: "Joined" - mobile_notification_level: "Mobile push notifications" mute: "Mute channel" threading_enabled: "Enabled" threading_disabled: "Disabled" diff --git a/plugins/chat/db/migrate/20241003122030_add_notification_level_to_user_chat_channel_memberships.rb b/plugins/chat/db/migrate/20241003122030_add_notification_level_to_user_chat_channel_memberships.rb new file mode 100644 index 00000000000..21a1de02b7b --- /dev/null +++ b/plugins/chat/db/migrate/20241003122030_add_notification_level_to_user_chat_channel_memberships.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true +class AddNotificationLevelToUserChatChannelMemberships < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + def up + execute <<~SQL + DROP INDEX CONCURRENTLY IF EXISTS user_chat_channel_memberships_index + SQL + + add_column :user_chat_channel_memberships, :notification_level, :integer, null: true + + batch_size = 10_000 + min_id, max_id = execute("SELECT MIN(id), MAX(id) FROM user_chat_channel_memberships")[0].values + + (min_id..max_id).step(batch_size) { |start_id| execute <<~SQL.squish } if min_id && max_id + UPDATE user_chat_channel_memberships + SET notification_level = mobile_notification_level + WHERE id >= #{start_id} AND id < #{start_id + batch_size} + SQL + + change_column_default :user_chat_channel_memberships, :notification_level, 1 + change_column_null :user_chat_channel_memberships, :notification_level, false + + execute <<~SQL + CREATE INDEX CONCURRENTLY user_chat_channel_memberships_index ON user_chat_channel_memberships using btree (user_id, chat_channel_id, notification_level, following) + SQL + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/plugins/chat/spec/fabricators/chat_fabricator.rb b/plugins/chat/spec/fabricators/chat_fabricator.rb index edfd5c2cfbf..7aad2439486 100644 --- a/plugins/chat/spec/fabricators/chat_fabricator.rb +++ b/plugins/chat/spec/fabricators/chat_fabricator.rb @@ -193,8 +193,7 @@ Fabricator(:user_chat_channel_membership_for_dm, from: :user_chat_channel_member user chat_channel following true - desktop_notification_level 2 - mobile_notification_level 2 + notification_level 2 end Fabricator(:chat_draft, class_name: "Chat::Draft") do diff --git a/plugins/chat/spec/jobs/regular/chat/notify_mentioned_spec.rb b/plugins/chat/spec/jobs/regular/chat/notify_mentioned_spec.rb index 52bbc71a843..2fb4753ca34 100644 --- a/plugins/chat/spec/jobs/regular/chat/notify_mentioned_spec.rb +++ b/plugins/chat/spec/jobs/regular/chat/notify_mentioned_spec.rb @@ -164,7 +164,7 @@ describe Jobs::Chat::NotifyMentioned do it "skips desktop notifications based on user preferences" do message = create_chat_message Chat::UserChatChannelMembership.find_by(chat_channel: public_channel, user: user_2).update!( - desktop_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:never], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:never], ) desktop_notification = @@ -176,7 +176,7 @@ describe Jobs::Chat::NotifyMentioned do it "skips push notifications based on user preferences" do message = create_chat_message Chat::UserChatChannelMembership.find_by(chat_channel: public_channel, user: user_2).update!( - mobile_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:never], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:never], ) PostAlerter.expects(:push_notification).never @@ -191,7 +191,7 @@ describe Jobs::Chat::NotifyMentioned do it "skips desktop notifications based on user muting preferences" do message = create_chat_message Chat::UserChatChannelMembership.find_by(chat_channel: public_channel, user: user_2).update!( - desktop_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], muted: true, ) @@ -204,7 +204,7 @@ describe Jobs::Chat::NotifyMentioned do it "skips push notifications based on user muting preferences" do message = create_chat_message Chat::UserChatChannelMembership.find_by(chat_channel: public_channel, user: user_2).update!( - mobile_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], muted: true, ) diff --git a/plugins/chat/spec/jobs/regular/chat/notify_watching_spec.rb b/plugins/chat/spec/jobs/regular/chat/notify_watching_spec.rb index 4296714fe06..4696296ffd6 100644 --- a/plugins/chat/spec/jobs/regular/chat/notify_watching_spec.rb +++ b/plugins/chat/spec/jobs/regular/chat/notify_watching_spec.rb @@ -44,7 +44,7 @@ RSpec.describe Jobs::Chat::NotifyWatching do before do membership2.update!( - desktop_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], ) end @@ -76,10 +76,11 @@ RSpec.describe Jobs::Chat::NotifyWatching do before { channel.update!(threading_enabled: true) } - context "with channel notification_level is always" do + context "when channel notification_level is always" do before do - always = Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always] - membership1.update!(desktop_notification_level: always, mobile_notification_level: always) + membership1.update!( + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], + ) end it "creates a core notification when watching the thread" do @@ -110,8 +111,14 @@ RSpec.describe Jobs::Chat::NotifyWatching do end end - context "without channel notifications" do + context "when channel notification_level is never" do before do + membership1.update!( + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:never], + ) + membership2.update!( + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:never], + ) thread.membership_for(user1).update!( notification_level: Chat::NotificationLevels.all[:watching], ) @@ -181,15 +188,14 @@ RSpec.describe Jobs::Chat::NotifyWatching do end end - context "when mobile_notification_level is always and desktop_notification_level is none" do + context "when notification_level is always" do before do membership2.update!( - desktop_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:never], - mobile_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], ) end - it "sends a mobile notification" do + it "sends push notifications and message bus notifications" do PostAlerter.expects(:push_notification).with( user2, has_entries( @@ -208,7 +214,7 @@ RSpec.describe Jobs::Chat::NotifyWatching do ), ) messages = notification_messages_for(user2) - expect(messages.length).to be_zero + expect(messages.length).to eq(1) end context "when the channel is muted via membership preferences" do @@ -280,7 +286,7 @@ RSpec.describe Jobs::Chat::NotifyWatching do before do membership2.update!( - desktop_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], ) end @@ -313,15 +319,14 @@ RSpec.describe Jobs::Chat::NotifyWatching do end end - context "when mobile_notification_level is always and desktop_notification_level is none" do + context "when notification_level is always" do before do membership2.update!( - desktop_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:never], - mobile_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], ) end - it "sends a mobile notification" do + it "sends both push notifications and message bus notifications" do PostAlerter.expects(:push_notification).with( user2, has_entries( @@ -340,7 +345,7 @@ RSpec.describe Jobs::Chat::NotifyWatching do ), ) messages = notification_messages_for(user2) - expect(messages.length).to be_zero + expect(messages.length).to eq(1) end context "when the channel is muted via membership preferences" do diff --git a/plugins/chat/spec/lib/chat/channel_fetcher_spec.rb b/plugins/chat/spec/lib/chat/channel_fetcher_spec.rb index ad86be89c6f..021464c2b33 100644 --- a/plugins/chat/spec/lib/chat/channel_fetcher_spec.rb +++ b/plugins/chat/spec/lib/chat/channel_fetcher_spec.rb @@ -121,8 +121,7 @@ describe Chat::ChannelFetcher do user: user1, chat_channel: direct_message_channel1, following: true, - desktop_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], - mobile_notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], + notification_level: Chat::UserChatChannelMembership::NOTIFICATION_LEVELS[:always], ) end diff --git a/plugins/chat/spec/requests/chat/api/channels_current_user_notifications_settings_controller_spec.rb b/plugins/chat/spec/requests/chat/api/channels_current_user_notifications_settings_controller_spec.rb index e36d794b429..b4fc86de0e4 100644 --- a/plugins/chat/spec/requests/chat/api/channels_current_user_notifications_settings_controller_spec.rb +++ b/plugins/chat/spec/requests/chat/api/channels_current_user_notifications_settings_controller_spec.rb @@ -54,8 +54,7 @@ RSpec.describe Chat::Api::ChannelsCurrentUserNotificationsSettingsController do params: { notifications_settings: { muted: true, - desktop_notification_level: "always", - mobile_notification_level: "never", + notification_level: "always", }, } @@ -67,8 +66,7 @@ RSpec.describe Chat::Api::ChannelsCurrentUserNotificationsSettingsController do membership = channel_1.membership_for(current_user) expect(membership.muted).to eq(true) - expect(membership.desktop_notification_level).to eq("always") - expect(membership.mobile_notification_level).to eq("never") + expect(membership.notification_level).to eq("always") end end @@ -123,8 +121,7 @@ RSpec.describe Chat::Api::ChannelsCurrentUserNotificationsSettingsController do params: { notifications_settings: { muted: true, - desktop_notification_level: "always", - mobile_notification_level: "never", + notification_level: "always", }, } @@ -136,8 +133,7 @@ RSpec.describe Chat::Api::ChannelsCurrentUserNotificationsSettingsController do membership = dm_channel_1.membership_for(current_user) expect(membership.muted).to eq(true) - expect(membership.desktop_notification_level).to eq("always") - expect(membership.mobile_notification_level).to eq("never") + expect(membership.notification_level).to eq("always") end end end diff --git a/plugins/chat/spec/serializer/chat/structured_channel_serializer_spec.rb b/plugins/chat/spec/serializer/chat/structured_channel_serializer_spec.rb index c5fd80cf44b..6bca67dcc49 100644 --- a/plugins/chat/spec/serializer/chat/structured_channel_serializer_spec.rb +++ b/plugins/chat/spec/serializer/chat/structured_channel_serializer_spec.rb @@ -46,10 +46,9 @@ RSpec.describe Chat::StructuredChannelSerializer do .as_json, ).to include( "chat_channel_id" => channel1.id, - "desktop_notification_level" => "mention", + "notification_level" => "mention", "following" => true, "last_read_message_id" => nil, - "mobile_notification_level" => "mention", "muted" => false, ) end @@ -64,10 +63,9 @@ RSpec.describe Chat::StructuredChannelSerializer do .as_json, ).to include( "chat_channel_id" => channel3.id, - "desktop_notification_level" => "always", + "notification_level" => "always", "following" => true, "last_read_message_id" => nil, - "mobile_notification_level" => "always", "muted" => false, ) end diff --git a/plugins/chat/spec/services/chat/create_direct_message_channel_spec.rb b/plugins/chat/spec/services/chat/create_direct_message_channel_spec.rb index 0b80c0f6ab8..fa234b6bf4d 100644 --- a/plugins/chat/spec/services/chat/create_direct_message_channel_spec.rb +++ b/plugins/chat/spec/services/chat/create_direct_message_channel_spec.rb @@ -69,8 +69,7 @@ RSpec.describe Chat::CreateDirectMessageChannel do expect(membership).to have_attributes( following: false, muted: false, - desktop_notification_level: "always", - mobile_notification_level: "always", + notification_level: "always", ) end end diff --git a/plugins/chat/spec/services/chat/message_destroyer_spec.rb b/plugins/chat/spec/services/chat/message_destroyer_spec.rb index 1ea2527adc2..835186840e3 100644 --- a/plugins/chat/spec/services/chat/message_destroyer_spec.rb +++ b/plugins/chat/spec/services/chat/message_destroyer_spec.rb @@ -12,8 +12,7 @@ RSpec.describe Chat::MessageDestroyer do chat_channel: message_1.chat_channel, last_read_message: message_1, following: true, - desktop_notification_level: 2, - mobile_notification_level: 2, + notification_level: 2, ) described_class.new.destroy_in_batches(Chat::Message.where(id: message_1.id)) @@ -33,8 +32,7 @@ RSpec.describe Chat::MessageDestroyer do chat_channel: message_1.chat_channel, last_read_message: message_4, following: true, - desktop_notification_level: 2, - mobile_notification_level: 2, + notification_level: 2, ) described_class.new.destroy_in_batches(Chat::Message.where(id: message_4.id)) diff --git a/plugins/chat/spec/support/api/schemas/category_chat_channel.json b/plugins/chat/spec/support/api/schemas/category_chat_channel.json index 2e952ebbd56..ab31d5b905e 100644 --- a/plugins/chat/spec/support/api/schemas/category_chat_channel.json +++ b/plugins/chat/spec/support/api/schemas/category_chat_channel.json @@ -9,8 +9,7 @@ "muted": { "type": "boolean" }, "unread_count": { "type": "number" }, "unread_mentions": { "type": "number" }, - "desktop_notification_level": { "type": "string" }, - "mobile_notification_level": { "type": "string" }, + "notification_level": { "type": "string" }, "following": { "type": "boolean" } } } diff --git a/plugins/chat/spec/support/api/schemas/user_chat_channel_membership.json b/plugins/chat/spec/support/api/schemas/user_chat_channel_membership.json index b19f6d7bd8e..700c3c3da0d 100644 --- a/plugins/chat/spec/support/api/schemas/user_chat_channel_membership.json +++ b/plugins/chat/spec/support/api/schemas/user_chat_channel_membership.json @@ -4,8 +4,7 @@ "chat_channel_id", "last_read_message_id", "muted", - "desktop_notification_level", - "mobile_notification_level", + "notification_level", "following", "last_viewed_at" ], @@ -13,8 +12,7 @@ "chat_channel_id": { "type": "number" }, "last_read_message_id": { "type": ["number", "null"] }, "muted": { "type": "boolean" }, - "desktop_notification_level": { "type": "string" }, - "mobile_notification_level": { "type": "string" }, + "notification_level": { "type": "string" }, "following": { "type": "boolean" }, "user": { "type": ["object", "null"], diff --git a/plugins/chat/spec/system/channel_settings_page_spec.rb b/plugins/chat/spec/system/channel_settings_page_spec.rb index 18df1356a58..7c0cc3bab11 100644 --- a/plugins/chat/spec/system/channel_settings_page_spec.rb +++ b/plugins/chat/spec/system/channel_settings_page_spec.rb @@ -122,36 +122,18 @@ RSpec.describe "Channel - Info - Settings page", type: :system do }.to change { membership.reload.muted }.from(false).to(true) end - it "can change desktop notification level" do + it "can change notification level" do chat_page.visit_channel_settings(channel_1) membership = channel_1.membership_for(current_user) expect { select_kit = - PageObjects::Components::SelectKit.new( - ".c-channel-settings__desktop-notifications-selector", - ) + PageObjects::Components::SelectKit.new(".c-channel-settings__notifications-selector") select_kit.expand select_kit.select_row_by_name("Never") expect(toasts).to have_success(I18n.t("js.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( - ".c-channel-settings__mobile-notifications-selector", - ) - select_kit.expand - select_kit.select_row_by_name("Never") - - expect(toasts).to have_success(I18n.t("js.saved")) - }.to change { membership.reload.mobile_notification_level }.from("mention").to("never") + }.to change { membership.reload.notification_level }.from("mention").to("never") end it "can unfollow channel" do