Skip to content

Commit 9e09246

Browse files
committed
1 parent a116459 commit 9e09246

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

lib/tasks/delete_member.rake

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
def usage_example
2+
"Usage: rake member:delete'[[email protected]]'"
3+
end
4+
5+
namespace :member do
6+
desc 'Delete member account'
7+
task :delete, [:email] => :environment do |_, args|
8+
email = args[:email]
9+
10+
abort("You have to provide an email address. #{usage_example}") if email.blank?
11+
12+
member = Member.find_by!(email: email)
13+
14+
$stdout.puts "Deleting #{member.name} #{member.surname}'s account..."
15+
$stdout.puts 'This action is irreversible.'
16+
$stdout.puts 'Press any key to continue.'
17+
$stdin.getch
18+
19+
ActiveRecord::Base.transaction do
20+
MailingList.new(ENV['NEWSLETTER_ID']).unsubscribe(member.email)
21+
22+
member.auth_services.delete_all
23+
member.subscriptions.delete_all
24+
25+
# generate new invitation tokens so the current email links stop working
26+
member.workshop_invitations.each do |invitation|
27+
invitation.send(:set_token)
28+
invitation.save
29+
end
30+
31+
member.email = "deleted_user_#{Time.zone.now.to_s(:number)}@codebar.io"
32+
member.name = 'Deleted'
33+
member.surname = 'User'
34+
member.pronouns = nil
35+
member.about_you = nil
36+
member.twitter = nil
37+
member.mobile = nil
38+
member.save(validate: false)
39+
end
40+
41+
Rails.logger.info 'Member account deleted.'
42+
end
43+
end
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
require 'spec_helper'
2+
3+
RSpec.describe 'rake member:delete', type: :task do
4+
let!(:member) { Fabricate.create(:member) }
5+
before do
6+
allow($stdout).to receive(:puts)
7+
end
8+
9+
it "preloads the Rails environment" do
10+
expect(task.prerequisites).to include "environment"
11+
end
12+
13+
it 'when no email is provided' do
14+
expect { task.invoke }.to raise_error(SystemExit, "You have to provide an email address. Usage: rake member:delete'[[email protected]]'")
15+
end
16+
17+
it 'anonymises member information' do
18+
invitations = Fabricate.times(4, :workshop_invitation, member: member)
19+
tokens = invitations.map(&:token)
20+
21+
subscriptions = Fabricate.times(3, :subscription, member: member)
22+
23+
allow($stdin).to receive(:getch)
24+
25+
task.execute(email: member.email)
26+
27+
member.reload
28+
29+
expect(member.name).to eq('Deleted')
30+
expect(member.surname).to eq('User')
31+
expect(member.pronouns).to be_nil
32+
expect(member.about_you).to be_nil
33+
expect(member.twitter).to be_nil
34+
expect(member.mobile).to be_nil
35+
36+
expect(member.subscriptions).to be_empty
37+
expect(member.auth_services).to be_empty
38+
39+
invitations.each do |invitation|
40+
expect(tokens).not_to include(invitation.reload.token)
41+
end
42+
end
43+
end

0 commit comments

Comments
 (0)