Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/diaspora/diaspora.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Robinson <mail@jasonrobinson.me>2014-09-30 00:20:36 +0400
committerJason Robinson <mail@jasonrobinson.me>2014-10-16 23:53:08 +0400
commit69c35669585896249db1eb3e3487a30ae09cff46 (patch)
tree941488aaa4cbb611c926a626a8e02e939a281472 /spec/workers
parentef71c5719072d6dc314bf567c4300eb96e0dddfc (diff)
Maintenance feature to remove old users
Add Sidetiq webview to the Sidekiq monitoring panel Add rake task maintenance:queue_users_for_removal This basically just triggers an immediate run of the normal maintenance remove old users functionality that is normally (if enabled) scheduled to run once a day via sidetiq Add extra safety when checking for user removal due to inactivity. Now also user.last_seen will also be checked to make sure a user will not be removed in the event that the Devise rememember me login functionality has stopped the users remove_after timestamp from being removed. Add initializer for maintenance job. Add warning about mail being disabled if remove_old_users maintenance is enabled.
Diffstat (limited to 'spec/workers')
-rw-r--r--spec/workers/queue_users_for_removal_spec.rb82
-rw-r--r--spec/workers/remove_old_user_spec.rb52
2 files changed, 134 insertions, 0 deletions
diff --git a/spec/workers/queue_users_for_removal_spec.rb b/spec/workers/queue_users_for_removal_spec.rb
new file mode 100644
index 000000000..6e00fe76c
--- /dev/null
+++ b/spec/workers/queue_users_for_removal_spec.rb
@@ -0,0 +1,82 @@
+require 'spec_helper'
+
+describe Workers::QueueUsersForRemoval do
+ describe 'remove_old_users is active' do
+ before do
+ AppConfig.settings.maintenance.remove_old_users.enable = true
+ ActionMailer::Base.deliveries = nil
+ Timecop.freeze
+ end
+
+ it '#does not queue user that is not inactive' do
+ user = FactoryGirl.create(:user, :last_seen => Time.now-728.days, :sign_in_count => 5)
+ Workers::QueueUsersForRemoval.new.perform
+ user.reload
+ expect(user.remove_after).to eq(nil)
+ expect(ActionMailer::Base.deliveries.count).to eq(0)
+ end
+
+ it '#queues user that is inactive' do
+ removal_date = Time.now + (AppConfig.settings.maintenance.remove_old_users.warn_days.to_i).days
+ user = FactoryGirl.create(:user, :last_seen => Time.now-732.days, :sign_in_count => 5)
+ Workers::QueueUsersForRemoval.new.perform
+ user.reload
+ expect(user.remove_after.to_i).to eq(removal_date.utc.to_i)
+ expect(ActionMailer::Base.deliveries.count).to eq(1)
+ end
+
+ it '#queues user that is inactive and has not logged in' do
+ removal_date = Time.now
+ user = FactoryGirl.create(:user, :last_seen => Time.now-735.days, :sign_in_count => 0)
+ Workers::QueueUsersForRemoval.new.perform
+ user.reload
+ expect(user.remove_after.to_i).to eq(removal_date.utc.to_i)
+ expect(ActionMailer::Base.deliveries.count).to eq(0) # no email sent
+ end
+
+ it '#does not queue user that is not inactive and has not logged in' do
+ user = FactoryGirl.create(:user, :last_seen => Time.now-728.days, :sign_in_count => 0)
+ Workers::QueueUsersForRemoval.new.perform
+ user.reload
+ expect(user.remove_after).to eq(nil)
+ expect(ActionMailer::Base.deliveries.count).to eq(0)
+ end
+
+ it '#does not queue user that has already been flagged for removal' do
+ removal_date = Date.today + 5.days
+ user = FactoryGirl.create(:user, :last_seen => Time.now-735.days, :sign_in_count => 5, :remove_after => removal_date)
+ Workers::QueueUsersForRemoval.new.perform
+ user.reload
+ expect(user.remove_after).to eq(removal_date)
+ expect(ActionMailer::Base.deliveries.count).to eq(0)
+ end
+
+ after do
+ Timecop.return
+ end
+ end
+
+ describe 'remove_old_users is inactive' do
+ before do
+ AppConfig.settings.maintenance.remove_old_users.enable = false
+ ActionMailer::Base.deliveries = nil
+ end
+
+ it '#does not queue user that is not inactive' do
+ user = FactoryGirl.create(:user, :last_seen => Time.now-728.days, :sign_in_count => 5)
+ Workers::QueueUsersForRemoval.new.perform
+ user.reload
+ expect(user.remove_after).to eq(nil)
+ expect(ActionMailer::Base.deliveries.count).to eq(0)
+ end
+
+ it '#does not queue user that is inactive' do
+ user = FactoryGirl.create(:user, :last_seen => Time.now-735.days, :sign_in_count => 5)
+ Workers::QueueUsersForRemoval.new.perform
+ user.reload
+ expect(user.remove_after).to eq(nil)
+ expect(ActionMailer::Base.deliveries.count).to eq(0)
+ end
+
+ end
+end
diff --git a/spec/workers/remove_old_user_spec.rb b/spec/workers/remove_old_user_spec.rb
new file mode 100644
index 000000000..12e0fad57
--- /dev/null
+++ b/spec/workers/remove_old_user_spec.rb
@@ -0,0 +1,52 @@
+require 'spec_helper'
+
+describe Workers::RemoveOldUser do
+ describe 'remove_old_users is active' do
+ before do
+ AppConfig.settings.maintenance.remove_old_users.enable = true
+ end
+
+ it '#removes user whose remove_after timestamp has passed' do
+ user = double(id: 1, remove_after: 1.day.ago, last_seen: 1000.days.ago)
+ allow(User).to receive(:find).with(user.id).and_return(user)
+ expect(user).to receive(:close_account!)
+ Workers::RemoveOldUser.new.perform(user.id)
+ end
+
+ it '#doesnt remove user whose remove_after timestamp hasnt passed' do
+ user = double(id: 1, remove_after: 1.day.from_now, last_seen: 1000.days.ago)
+ allow(User).to receive(:find).with(user.id).and_return(user)
+ expect(user).to_not receive(:close_account!)
+ Workers::RemoveOldUser.new.perform(user.id)
+ end
+
+ it '#doesnt remove user whose remove_after timestamp has passed but last_seen is recent' do
+ user = double(id: 1, remove_after: 1.day.ago, last_seen: 1.day.ago)
+ allow(User).to receive(:find).with(user.id).and_return(user)
+ expect(user).to_not receive(:close_account!)
+ Workers::RemoveOldUser.new.perform(user.id)
+ end
+
+ end
+
+ describe 'remove_old_users is inactive' do
+ before do
+ AppConfig.settings.maintenance.remove_old_users.enable = false
+ end
+
+ it '#doesnt remove user whose remove_after timestamp has passed' do
+ user = double(id: 1, remove_after: 1.day.ago, last_seen: 1000.days.ago)
+ allow(User).to receive(:find).with(user.id).and_return(user)
+ expect(user).to_not receive(:close_account!)
+ Workers::RemoveOldUser.new.perform(user.id)
+ end
+
+ it '#doesnt remove user whose remove_after timestamp hasnt passed' do
+ user = double(id: 1, remove_after: 1.day.from_now, last_seen: 1000.days.ago)
+ allow(User).to receive(:find).with(user.id).and_return(user)
+ expect(user).to_not receive(:close_account!)
+ Workers::RemoveOldUser.new.perform(user.id)
+ end
+
+ end
+end