diff options
author | Matt Jankowski <mjankowski@thoughtbot.com> | 2017-04-29 18:28:16 -0400 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-04-30 00:28:16 +0200 |
commit | fdcf884cf719b682e413ee047542861b5a5cf3b7 (patch) | |
tree | 26234ef9661c33c7935f1a3857c76cd9c57da7dd /spec/controllers | |
parent | 964035b1186a4dd66be0e0fb6cf56959e21c10e4 (diff) |
Extract user tracking into concern (#2600)
Diffstat (limited to 'spec/controllers')
-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 |