| 
									
										
										
										
											2017-04-29 18:28:16 -04:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require 'rails_helper' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe ApplicationController, type: :controller do | 
					
						
							|  |  |  |   controller do | 
					
						
							|  |  |  |     include UserTrackingConcern | 
					
						
							| 
									
										
										
										
											2017-10-13 11:00:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-29 18:28:16 -04:00
										 |  |  |     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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-17 23:56:03 +01:00
										 |  |  |     describe 'feed regeneration' do | 
					
						
							|  |  |  |       before do | 
					
						
							|  |  |  |         alice = Fabricate(:account) | 
					
						
							|  |  |  |         bob   = Fabricate(:account) | 
					
						
							| 
									
										
										
										
											2017-04-29 18:28:16 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-17 23:56:03 +01:00
										 |  |  |         user.account.follow!(alice) | 
					
						
							|  |  |  |         user.account.follow!(bob) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Fabricate(:status, account: alice, text: 'hello world') | 
					
						
							|  |  |  |         Fabricate(:status, account: bob, text: 'yes hello') | 
					
						
							|  |  |  |         Fabricate(:status, account: user.account, text: 'test') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         user.update(last_sign_in_at: 'Tue, 04 Jul 2017 14:45:56 UTC +00:00', current_sign_in_at: 'Wed, 05 Jul 2017 22:10:52 UTC +00:00') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         sign_in user, scope: :user | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it 'sets a regeneration marker while regenerating' do | 
					
						
							|  |  |  |         allow(RegenerationWorker).to receive(:perform_async) | 
					
						
							|  |  |  |         get :show | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect_updated_sign_in_at(user) | 
					
						
							|  |  |  |         expect(Redis.current.get("account:#{user.account_id}:regeneration")).to eq 'true' | 
					
						
							|  |  |  |         expect(RegenerationWorker).to have_received(:perform_async) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-18 20:29:56 +01:00
										 |  |  |       it 'sets the regeneration marker to expire' do | 
					
						
							|  |  |  |         allow(RegenerationWorker).to receive(:perform_async) | 
					
						
							|  |  |  |         get :show | 
					
						
							|  |  |  |         expect(Redis.current.ttl("account:#{user.account_id}:regeneration")).to be >= 0
 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-17 23:56:03 +01:00
										 |  |  |       it 'regenerates feed when sign in is older than two weeks' do | 
					
						
							|  |  |  |         get :show | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect_updated_sign_in_at(user) | 
					
						
							|  |  |  |         expect(Redis.current.zcard(FeedManager.instance.key(:home, user.account_id))).to eq 3
 | 
					
						
							|  |  |  |         expect(Redis.current.get("account:#{user.account_id}:regeneration")).to be_nil | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-04-29 18:28:16 -04:00
										 |  |  |     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 |