diff options
Diffstat (limited to 'spec/controllers/concerns')
-rw-r--r-- | spec/controllers/concerns/user_tracking_concern_spec.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/spec/controllers/concerns/user_tracking_concern_spec.rb b/spec/controllers/concerns/user_tracking_concern_spec.rb new file mode 100644 index 000000000..6bd29f887 --- /dev/null +++ b/spec/controllers/concerns/user_tracking_concern_spec.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe ApplicationController, type: :controller do + controller do + include UserTrackingConcern + def show + render plain: 'show' + end + end + + before do + routes.draw { get 'show' => 'anonymous#show' } + end + + describe 'when signed in' do + let(:user) { Fabricate(:user) } + + it 'does not track when there is a recent sign in' do + user.update(current_sign_in_at: 60.minutes.ago) + prior = user.current_sign_in_at + sign_in user, scope: :user + get :show + + expect(user.reload.current_sign_in_at).to be_within(1.0).of(prior) + end + + it 'tracks when sign in is nil' do + user.update(current_sign_in_at: nil) + sign_in user, scope: :user + get :show + + expect_updated_sign_in_at(user) + end + + it 'tracks when sign in is older than one day' do + user.update(current_sign_in_at: 2.days.ago) + sign_in user, scope: :user + get :show + + expect_updated_sign_in_at(user) + end + + it 'regenerates feed when sign in is older than two weeks' do + allow(RegenerationWorker).to receive(:perform_async) + user.update(current_sign_in_at: 3.weeks.ago) + sign_in user, scope: :user + get :show + + expect_updated_sign_in_at(user) + expect(RegenerationWorker).to have_received(:perform_async) + end + + def expect_updated_sign_in_at(user) + expect(user.reload.current_sign_in_at).to be_within(1.0).of(Time.now.utc) + end + end +end |