Prompt new users to customize their feed (#6979)
This commit is contained in:
parent
d1fc988ed0
commit
fc728af0cd
4 changed files with 66 additions and 7 deletions
|
|
@ -17,6 +17,7 @@ module Broadcasts
|
|||
send_welcome_notification unless notification_enqueued
|
||||
send_authentication_notification unless notification_enqueued
|
||||
send_ux_customization_notification unless notification_enqueued
|
||||
send_feed_customization_notification unless notification_enqueued
|
||||
end
|
||||
|
||||
private
|
||||
|
|
@ -38,12 +39,18 @@ module Broadcasts
|
|||
end
|
||||
|
||||
def send_ux_customization_notification
|
||||
return if received_notification?(customize_broadcast) || user.created_at > 5.days.ago
|
||||
return if received_notification?(customize_ux_broadcast) || user.created_at > 5.days.ago
|
||||
|
||||
Notification.send_welcome_notification(user.id, customize_broadcast.id)
|
||||
Notification.send_welcome_notification(user.id, customize_ux_broadcast.id)
|
||||
@notification_enqueued = true
|
||||
end
|
||||
|
||||
def send_feed_customization_notification
|
||||
return if user_is_following_tags? || received_notification?(customize_feed_broadcast) || user.created_at > 3.days.ago
|
||||
|
||||
Notification.send_welcome_notification(user.id, customize_feed_broadcast.id)
|
||||
end
|
||||
|
||||
def received_notification?(broadcast)
|
||||
Notification.exists?(notifiable: broadcast, user: user)
|
||||
end
|
||||
|
|
@ -57,12 +64,20 @@ module Broadcasts
|
|||
identities.count == SiteConfig.authentication_providers.count
|
||||
end
|
||||
|
||||
def user_is_following_tags?
|
||||
user.cached_followed_tag_names.count > 1
|
||||
end
|
||||
|
||||
def welcome_broadcast
|
||||
@welcome_broadcast ||= Broadcast.find_by(title: "Welcome Notification: welcome_thread")
|
||||
end
|
||||
|
||||
def customize_broadcast
|
||||
@customize_broadcast ||= Broadcast.find_by(title: "Welcome Notification: customize_experience")
|
||||
def customize_ux_broadcast
|
||||
@customize_ux_broadcast ||= Broadcast.find_by(title: "Welcome Notification: customize_experience")
|
||||
end
|
||||
|
||||
def customize_feed_broadcast
|
||||
@customize_feed_broadcast ||= Broadcast.find_by(title: "Welcome Notification: customize_feed")
|
||||
end
|
||||
|
||||
def identities
|
||||
|
|
|
|||
|
|
@ -250,6 +250,7 @@ broadcast_messages = {
|
|||
welcome_thread: "Sloan here again! 👋 DEV is a friendly community. Why not introduce yourself by leaving a comment in <a href='/welcome'>the welcome thread</a>!",
|
||||
twitter_connect: "You're on a roll! 🎉 Let's connect your <a href='/settings'> Twitter account</a> to complete your identity so that we don't think you're a robot. 🤖",
|
||||
github_connect: "You're on a roll! 🎉 Let's connect your <a href='/settings'> GitHub account</a> to complete your identity so that we don't think you're a robot. 🤖",
|
||||
customize_feed: "Hi, it's me again! 👋 Now that you're a part of the DEV community, let's focus on personalizing your content. You can start by <a href='/tags'>following some tags</a> to help customize your feed! 🎉",
|
||||
customize_experience: "Sloan here! 👋 Did you know that that you can customize your DEV experience? Try changing <a href='settings/ux'>your font and theme</a> and find the best style for you!"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,12 +20,18 @@ FactoryBot.define do
|
|||
processed_html { "You're on a roll! 🎉 Let's connect your <a href='/settings'> GitHub account</a> to complete your identity so that we don't think you're a robot. 🤖" }
|
||||
end
|
||||
|
||||
factory :customize_broadcast do
|
||||
factory :customize_ux_broadcast do
|
||||
title { "Welcome Notification: customize_experience" }
|
||||
type_of { "Welcome" }
|
||||
processed_html { "Sloan here! 👋 Did you know that that you can customize your DEV experience? Try changing <a href='settings/ux'>your font and theme</a> and find the best style for you!" }
|
||||
end
|
||||
|
||||
factory :customize_feed_broadcast do
|
||||
title { "Welcome Notification: customize_feed" }
|
||||
type_of { "Welcome" }
|
||||
processed_html { "Hi, it's me again! 👋 Now that you're a part of the DEV community, let's focus on personalizing your content. You can start by <a href='/tags'>following some tags</a> to help customize your feed! 🎉" }
|
||||
end
|
||||
|
||||
# TODO: [@thepracticaldev/delightful] Remove onboarding factory once welcome notifications are live.
|
||||
factory :onboarding_broadcast do
|
||||
title { "Welcome Notification" }
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ RSpec.describe Broadcasts::WelcomeNotification::Generator, type: :service do
|
|||
let!(:welcome_broadcast) { create(:welcome_broadcast) }
|
||||
let!(:twitter_connect_broadcast) { create(:twitter_connect_broadcast) }
|
||||
let!(:github_connect_broadcast) { create(:github_connect_broadcast) }
|
||||
let!(:customize_broadcast) { create(:customize_broadcast) }
|
||||
let!(:customize_ux_broadcast) { create(:customize_ux_broadcast) }
|
||||
let!(:customize_feed_broadcast) { create(:customize_feed_broadcast) }
|
||||
|
||||
before do
|
||||
allow(Notification).to receive(:send_welcome_notification).and_call_original
|
||||
|
|
@ -126,7 +127,7 @@ RSpec.describe Broadcasts::WelcomeNotification::Generator, type: :service do
|
|||
it "generates the correct broadcast type and sends the notification to the user" do
|
||||
sidekiq_perform_enqueued_jobs { described_class.new(user.id).send(:send_ux_customization_notification) }
|
||||
expect(user.notifications.count).to eq(1)
|
||||
expect(user.notifications.first.notifiable).to eq(customize_broadcast)
|
||||
expect(user.notifications.first.notifiable).to eq(customize_ux_broadcast)
|
||||
end
|
||||
|
||||
it "does not send duplicate notifications" do
|
||||
|
|
@ -136,4 +137,40 @@ RSpec.describe Broadcasts::WelcomeNotification::Generator, type: :service do
|
|||
expect(user.notifications.count).to eq(1)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#send_feed_customization_notification" do
|
||||
let!(:user) { create(:user, :with_identity, identities: %w[twitter github], created_at: 3.days.ago) }
|
||||
|
||||
it "does not send a notification to a newly-created user" do
|
||||
user.update!(created_at: Time.zone.now)
|
||||
sidekiq_perform_enqueued_jobs { described_class.new(user.id).send(:send_feed_customization_notification) }
|
||||
expect(Notification).not_to have_received(:send_welcome_notification)
|
||||
end
|
||||
|
||||
it "does not send a notification to a user that is following 2 tags" do
|
||||
2.times { user.follow(create(:tag)) }
|
||||
sidekiq_perform_enqueued_jobs { described_class.new(user.id).send(:send_feed_customization_notification) }
|
||||
expect(Notification).not_to have_received(:send_welcome_notification)
|
||||
end
|
||||
|
||||
it "sends a notification to a user with 0 tag follows" do
|
||||
sidekiq_perform_enqueued_jobs { described_class.new(user.id).send(:send_feed_customization_notification) }
|
||||
expect(user.notifications.count).to eq(1)
|
||||
expect(user.notifications.first.notifiable).to eq(customize_feed_broadcast)
|
||||
end
|
||||
|
||||
it "does not send duplicate notifications" do
|
||||
2.times do
|
||||
sidekiq_perform_enqueued_jobs { described_class.new(user.id).send(:send_feed_customization_notification) }
|
||||
end
|
||||
expect(user.notifications.count).to eq(1)
|
||||
end
|
||||
end
|
||||
|
||||
context "when sending a set_up_profile notification" do
|
||||
xit "generates the appropriate broadcast to be sent to a user"
|
||||
xit "it sends a welcome notification for that broadcast"
|
||||
xit "it does not send duplicate welcome notification for that broadcast"
|
||||
xit "does not send a notification to a user who has set up their profile"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue