mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
Merge pull request #4895 from tgxworld/fix_delay_bot_welcome_post
FIX: Delay Discobot welcome post should start counting on user's firs…
This commit is contained in:
commit
76510d695f
@ -45,4 +45,3 @@ class UsersEmailController < ApplicationController
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
@ -912,6 +912,14 @@ class User < ActiveRecord::Base
|
||||
DiscourseEvent.trigger(:user_logged_out, self)
|
||||
end
|
||||
|
||||
def logged_in
|
||||
DiscourseEvent.trigger(:user_logged_in, self)
|
||||
|
||||
if !self.seen_before?
|
||||
DiscourseEvent.trigger(:user_first_logged_in, self)
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def badge_grant
|
||||
|
@ -16,6 +16,7 @@ module CurrentUser
|
||||
|
||||
def log_on_user(user)
|
||||
current_user_provider.log_on_user(user,session,cookies)
|
||||
user.logged_in
|
||||
end
|
||||
|
||||
def log_off_user
|
||||
|
@ -114,6 +114,18 @@ after_initialize do
|
||||
end
|
||||
|
||||
self.add_model_callback(User, :after_commit, on: :create) do
|
||||
if SiteSetting.discourse_narrative_bot_welcome_post_delay == 0
|
||||
self.enqueue_bot_welcome_post
|
||||
end
|
||||
end
|
||||
|
||||
self.on(:user_first_logged_in) do |user|
|
||||
if SiteSetting.discourse_narrative_bot_welcome_post_delay > 0
|
||||
user.enqueue_bot_welcome_post
|
||||
end
|
||||
end
|
||||
|
||||
self.add_to_class(:user, :enqueue_bot_welcome_post) do
|
||||
return if SiteSetting.disable_discourse_narrative_bot_welcome_post
|
||||
|
||||
delay = SiteSetting.discourse_narrative_bot_welcome_post_delay
|
||||
|
@ -0,0 +1,67 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe "Discobot welcome post" do
|
||||
let(:user) { Fabricate(:user) }
|
||||
|
||||
before do
|
||||
SiteSetting.queue_jobs = true
|
||||
SiteSetting.discourse_narrative_bot_enabled = true
|
||||
end
|
||||
|
||||
after do
|
||||
Jobs::NarrativeInit.jobs.clear
|
||||
end
|
||||
|
||||
context 'when discourse_narrative_bot_welcome_post_delay is 0' do
|
||||
it 'should not delay the welcome post' do
|
||||
user
|
||||
expect { sign_in(user) }.to_not change { Jobs::NarrativeInit.jobs.count }
|
||||
end
|
||||
end
|
||||
|
||||
context 'When discourse_narrative_bot_welcome_post_delay is greater than 0' do
|
||||
before do
|
||||
SiteSetting.discourse_narrative_bot_welcome_post_delay = 5
|
||||
end
|
||||
|
||||
context 'when user logs in normally' do
|
||||
it 'should delay the welcome post until user logs in' do
|
||||
expect { sign_in(user) }.to change { Jobs::NarrativeInit.jobs.count }.by(1)
|
||||
expect(Jobs::NarrativeInit.jobs.first["args"].first["user_id"]).to eq(user.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user redeems an invite' do
|
||||
let(:invite) { Fabricate(:invite, invited_by: Fabricate(:admin), email: 'testing@gmail.com') }
|
||||
|
||||
it 'should delay the welcome post until the user logs in' do
|
||||
invite
|
||||
|
||||
expect do
|
||||
xhr :put, "/invites/show/#{invite.invite_key}",
|
||||
username: 'somename',
|
||||
name: 'testing',
|
||||
password: 'asodaasdaosdhq'
|
||||
end.to change { User.count }.by(1)
|
||||
|
||||
expect(Jobs::NarrativeInit.jobs.first["args"].first["user_id"]).to eq(User.last.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user redeems a disposable invite' do
|
||||
it 'should delay the welcome post until the user logs in' do
|
||||
token = Invite.generate_disposable_tokens(user).first
|
||||
|
||||
expect do
|
||||
xhr :get, "/invites/redeem/#{token}",
|
||||
email: 'testing@gmail.com',
|
||||
username: 'somename',
|
||||
name: 'testing',
|
||||
password: 'asodaasdaosdhq'
|
||||
end.to change { User.count }.by(1)
|
||||
|
||||
expect(Jobs::NarrativeInit.jobs.first["args"].first["user_id"]).to eq(User.last.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -30,7 +30,7 @@ describe User do
|
||||
end
|
||||
end
|
||||
|
||||
describe 'enabled' do
|
||||
context 'enabled' do
|
||||
before do
|
||||
SiteSetting.disable_discourse_narrative_bot_welcome_post = false
|
||||
end
|
||||
@ -58,30 +58,16 @@ describe User do
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when welcome message is delayed' do
|
||||
describe 'when welcome message is configured to be delayed' do
|
||||
before do
|
||||
SiteSetting.discourse_narrative_bot_welcome_post_delay = 100
|
||||
SiteSetting.queue_jobs = true
|
||||
end
|
||||
|
||||
it 'should delay the initialization of the new user track' do
|
||||
Timecop.freeze do
|
||||
user
|
||||
it 'should delay the welcome post until user logs in' do
|
||||
user
|
||||
|
||||
expect(Jobs::NarrativeInit.jobs.first['at'])
|
||||
.to be_within(1.second).of(Time.zone.now.to_f + 100)
|
||||
end
|
||||
end
|
||||
|
||||
it 'should delay sending the welcome message' do
|
||||
SiteSetting.discourse_narrative_bot_welcome_post_type = 'welcome_message'
|
||||
|
||||
Timecop.freeze do
|
||||
user
|
||||
|
||||
expect(Jobs::SendDefaultWelcomeMessage.jobs.first['at'])
|
||||
.to be_within(1.second).of(Time.zone.now.to_f + 100)
|
||||
end
|
||||
expect(Jobs::NarrativeInit.jobs.count).to eq(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -197,7 +197,12 @@ describe InvitesController do
|
||||
end
|
||||
|
||||
it 'logs in the user' do
|
||||
subject
|
||||
events = DiscourseEvent.track_events { subject }
|
||||
|
||||
expect(events.map { |event| event[:event_name] }).to include(
|
||||
:user_logged_in, :user_first_logged_in
|
||||
)
|
||||
|
||||
expect(session[:current_user_id]).to eq(user.id)
|
||||
end
|
||||
|
||||
@ -378,10 +383,20 @@ describe InvitesController do
|
||||
|
||||
before do
|
||||
Invite.expects(:redeem_from_token).with(invite.invite_key, user.email, nil, nil, topic.id).returns(user)
|
||||
get :redeem_disposable_invite, email: user.email, token: invite.invite_key, topic: topic.id
|
||||
end
|
||||
|
||||
it 'logs in user' do
|
||||
events = DiscourseEvent.track_events do
|
||||
get :redeem_disposable_invite,
|
||||
email: user.email,
|
||||
token: invite.invite_key,
|
||||
topic: topic.id
|
||||
end
|
||||
|
||||
expect(events.map { |event| event[:event_name] }).to include(
|
||||
:user_logged_in, :user_first_logged_in
|
||||
)
|
||||
|
||||
expect(session[:current_user_id]).to eq(user.id)
|
||||
end
|
||||
|
||||
|
@ -185,7 +185,14 @@ describe SessionController do
|
||||
sso.custom_fields["shop_url"] = "http://my_shop.com"
|
||||
sso.custom_fields["shop_name"] = "Sam"
|
||||
|
||||
get :sso_login, Rack::Utils.parse_query(sso.payload)
|
||||
events = DiscourseEvent.track_events do
|
||||
get :sso_login, Rack::Utils.parse_query(sso.payload)
|
||||
end
|
||||
|
||||
expect(events.map { |event| event[:event_name] }).to include(
|
||||
:user_logged_in, :user_first_logged_in
|
||||
)
|
||||
|
||||
expect(response).to redirect_to('/a/')
|
||||
|
||||
logged_on_user = Discourse.current_user_provider.new(request.env).current_user
|
||||
@ -500,7 +507,13 @@ describe SessionController do
|
||||
|
||||
describe 'success by username' do
|
||||
it 'logs in correctly' do
|
||||
xhr :post, :create, login: user.username, password: 'myawesomepassword'
|
||||
events = DiscourseEvent.track_events do
|
||||
xhr :post, :create, login: user.username, password: 'myawesomepassword'
|
||||
end
|
||||
|
||||
expect(events.map { |event| event[:event_name] }).to include(
|
||||
:user_logged_in, :user_first_logged_in
|
||||
)
|
||||
|
||||
user.reload
|
||||
|
||||
|
@ -152,10 +152,17 @@ describe UsersController do
|
||||
before do
|
||||
Guardian.any_instance.expects(:can_access_forum?).returns(true)
|
||||
EmailToken.expects(:confirm).with('asdfasdf').returns(user)
|
||||
put :perform_account_activation, token: 'asdfasdf'
|
||||
end
|
||||
|
||||
it 'correctly logs on user' do
|
||||
events = DiscourseEvent.track_events do
|
||||
put :perform_account_activation, token: 'asdfasdf'
|
||||
end
|
||||
|
||||
expect(events.map { |event| event[:event_name] }).to include(
|
||||
:user_logged_in, :user_first_logged_in
|
||||
)
|
||||
|
||||
expect(response).to be_success
|
||||
expect(flash[:error]).to be_blank
|
||||
expect(session[:current_user_id]).to be_present
|
||||
@ -266,9 +273,15 @@ describe UsersController do
|
||||
user = Fabricate(:user)
|
||||
user_auth_token = UserAuthToken.generate!(user_id: user.id)
|
||||
token = user.email_tokens.create(email: user.email).token
|
||||
|
||||
get :password_reset, token: token
|
||||
put :password_reset, token: token, password: 'hg9ow8yhg98o'
|
||||
|
||||
events = DiscourseEvent.track_events do
|
||||
put :password_reset, token: token, password: 'hg9ow8yhg98o'
|
||||
end
|
||||
|
||||
expect(events.map { |event| event[:event_name] }).to include(
|
||||
:user_logged_in, :user_first_logged_in
|
||||
)
|
||||
|
||||
expect(response).to be_success
|
||||
expect(assigns[:error]).to be_blank
|
||||
@ -386,22 +399,24 @@ describe UsersController do
|
||||
expect(session[:current_user_id]).to be_blank
|
||||
end
|
||||
|
||||
it 'does log in admin with valid token and SSO disabled' do
|
||||
SiteSetting.enable_sso = false
|
||||
token = admin.email_tokens.create(email: admin.email).token
|
||||
context 'valid token' do
|
||||
it 'does log in admin with SSO disabled' do
|
||||
SiteSetting.enable_sso = false
|
||||
token = admin.email_tokens.create(email: admin.email).token
|
||||
|
||||
get :admin_login, token: token
|
||||
expect(response).to redirect_to('/')
|
||||
expect(session[:current_user_id]).to eq(admin.id)
|
||||
end
|
||||
get :admin_login, token: token
|
||||
expect(response).to redirect_to('/')
|
||||
expect(session[:current_user_id]).to eq(admin.id)
|
||||
end
|
||||
|
||||
it 'logs in admin with valid token and SSO enabled' do
|
||||
SiteSetting.enable_sso = true
|
||||
token = admin.email_tokens.create(email: admin.email).token
|
||||
it 'logs in admin with SSO enabled' do
|
||||
SiteSetting.enable_sso = true
|
||||
token = admin.email_tokens.create(email: admin.email).token
|
||||
|
||||
get :admin_login, token: token
|
||||
expect(response).to redirect_to('/')
|
||||
expect(session[:current_user_id]).to eq(admin.id)
|
||||
get :admin_login, token: token
|
||||
expect(response).to redirect_to('/')
|
||||
expect(session[:current_user_id]).to eq(admin.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -35,7 +35,13 @@ describe UsersEmailController do
|
||||
it 'confirms with a correct token' do
|
||||
user.user_stat.update_columns(bounce_score: 42, reset_bounce_score_after: 1.week.from_now)
|
||||
|
||||
get :confirm, token: user.email_tokens.last.token
|
||||
events = DiscourseEvent.track_events do
|
||||
get :confirm, token: user.email_tokens.last.token
|
||||
end
|
||||
|
||||
expect(events.map { |event| event[:event_name] }).to include(
|
||||
:user_logged_in, :user_first_logged_in
|
||||
)
|
||||
|
||||
expect(response).to be_success
|
||||
expect(assigns(:update_result)).to eq(:complete)
|
||||
|
@ -49,7 +49,13 @@ RSpec.describe "OmniAuth Callbacks" do
|
||||
end
|
||||
|
||||
it 'should return the right response' do
|
||||
get "/auth/google_oauth2/callback.json"
|
||||
events = DiscourseEvent.track_events do
|
||||
get "/auth/google_oauth2/callback.json"
|
||||
end
|
||||
|
||||
expect(events.map { |event| event[:event_name] }).to include(
|
||||
:user_logged_in, :user_first_logged_in
|
||||
)
|
||||
|
||||
expect(response).to be_success
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user