2015-10-11 17:41:23 +08:00
|
|
|
require "rails_helper"
|
2015-03-07 05:44:54 +08:00
|
|
|
|
|
|
|
describe UserAnonymizer do
|
|
|
|
|
|
|
|
describe "make_anonymous" do
|
|
|
|
let(:admin) { Fabricate(:admin) }
|
2017-02-01 06:21:37 +08:00
|
|
|
let(:user) { Fabricate(:user, username: "edward") }
|
2015-03-07 05:44:54 +08:00
|
|
|
|
|
|
|
subject(:make_anonymous) { described_class.make_anonymous(user, admin) }
|
|
|
|
|
|
|
|
it "changes username" do
|
|
|
|
make_anonymous
|
2015-04-25 23:18:35 +08:00
|
|
|
expect(user.reload.username).to match(/^anon\d{3,}$/)
|
2015-03-07 05:44:54 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "changes email address" do
|
|
|
|
make_anonymous
|
2015-04-25 23:18:35 +08:00
|
|
|
expect(user.reload.email).to eq("#{user.username}@example.com")
|
2015-03-07 05:44:54 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "turns off all notifications" do
|
2016-02-17 12:46:19 +08:00
|
|
|
user.user_option.update_columns(
|
|
|
|
email_always: true
|
|
|
|
)
|
|
|
|
|
2015-03-07 05:44:54 +08:00
|
|
|
make_anonymous
|
|
|
|
user.reload
|
2016-02-17 12:46:19 +08:00
|
|
|
expect(user.user_option.email_digests).to eq(false)
|
|
|
|
expect(user.user_option.email_private_messages).to eq(false)
|
|
|
|
expect(user.user_option.email_direct).to eq(false)
|
|
|
|
expect(user.user_option.email_always).to eq(false)
|
|
|
|
expect(user.user_option.mailing_list_mode).to eq(false)
|
2015-03-07 05:44:54 +08:00
|
|
|
end
|
|
|
|
|
2016-03-18 06:43:48 +08:00
|
|
|
context "Site Settings do not require full name" do
|
|
|
|
before do
|
|
|
|
SiteSetting.full_name_required = false
|
|
|
|
end
|
|
|
|
|
|
|
|
it "resets profile to default values" do
|
2017-07-28 09:20:09 +08:00
|
|
|
user.update_attributes(name: "Bibi", date_of_birth: 19.years.ago, title: "Super Star")
|
2016-03-18 06:43:48 +08:00
|
|
|
|
2017-08-31 12:06:56 +08:00
|
|
|
profile = user.reload.user_profile
|
2017-07-28 09:20:09 +08:00
|
|
|
profile.update_attributes(location: "Moose Jaw",
|
|
|
|
website: "www.bim.com",
|
|
|
|
bio_raw: "I'm Bibi from Moosejaw. I sing and dance.",
|
|
|
|
bio_cooked: "I'm Bibi from Moosejaw. I sing and dance.",
|
|
|
|
profile_background: "http://example.com/bg.jpg",
|
|
|
|
bio_cooked_version: 2,
|
|
|
|
card_background: "http://example.com/cb.jpg")
|
2016-03-18 09:32:09 +08:00
|
|
|
|
|
|
|
prev_username = user.username
|
|
|
|
|
2017-02-01 06:21:37 +08:00
|
|
|
UserAuthToken.generate!(user_id: user.id)
|
|
|
|
|
2016-03-18 06:43:48 +08:00
|
|
|
make_anonymous
|
|
|
|
user.reload
|
|
|
|
|
2016-03-18 09:32:09 +08:00
|
|
|
expect(user.username).not_to eq(prev_username)
|
2016-03-18 06:43:48 +08:00
|
|
|
expect(user.name).not_to be_present
|
|
|
|
expect(user.date_of_birth).to eq(nil)
|
|
|
|
expect(user.title).not_to be_present
|
2017-02-01 06:21:37 +08:00
|
|
|
expect(user.user_auth_tokens.count).to eq(0)
|
2016-03-18 06:43:48 +08:00
|
|
|
|
2017-08-31 12:06:56 +08:00
|
|
|
profile = user.reload.user_profile
|
2016-03-18 06:43:48 +08:00
|
|
|
expect(profile.location).to eq(nil)
|
|
|
|
expect(profile.website).to eq(nil)
|
|
|
|
expect(profile.bio_cooked).to eq(nil)
|
|
|
|
expect(profile.profile_background).to eq(nil)
|
|
|
|
expect(profile.bio_cooked_version).to eq(nil)
|
|
|
|
expect(profile.card_background).to eq(nil)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "Site Settings require full name" do
|
|
|
|
before do
|
|
|
|
SiteSetting.full_name_required = true
|
|
|
|
end
|
|
|
|
|
|
|
|
it "changes name to anonymized username" do
|
2016-03-18 09:32:09 +08:00
|
|
|
prev_username = user.username
|
|
|
|
|
2017-07-28 09:20:09 +08:00
|
|
|
user.update_attributes(name: "Bibi", date_of_birth: 19.years.ago, title: "Super Star")
|
2016-03-18 06:43:48 +08:00
|
|
|
|
|
|
|
make_anonymous
|
|
|
|
user.reload
|
2015-03-07 05:44:54 +08:00
|
|
|
|
2016-03-18 09:32:09 +08:00
|
|
|
expect(user.name).not_to eq(prev_username)
|
2016-03-18 06:43:48 +08:00
|
|
|
expect(user.name).to eq(user.username)
|
|
|
|
end
|
2015-03-07 05:44:54 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "removes the avatar" do
|
|
|
|
upload = Fabricate(:upload, user: user)
|
|
|
|
user.user_avatar = UserAvatar.new(user_id: user.id, custom_upload_id: upload.id)
|
2015-11-28 03:37:20 +08:00
|
|
|
user.uploaded_avatar_id = upload.id # chosen in user preferences
|
2015-03-07 05:44:54 +08:00
|
|
|
user.save!
|
|
|
|
expect { make_anonymous }.to change { Upload.count }.by(-1)
|
|
|
|
user.reload
|
2015-04-25 23:18:35 +08:00
|
|
|
expect(user.user_avatar).to eq(nil)
|
2015-11-28 03:37:20 +08:00
|
|
|
expect(user.uploaded_avatar_id).to eq(nil)
|
2015-03-07 05:44:54 +08:00
|
|
|
end
|
|
|
|
|
2018-03-06 03:38:18 +08:00
|
|
|
it "logs the action with the original details" do
|
|
|
|
SiteSetting.log_anonymizer_details = true
|
|
|
|
helper = UserAnonymizer.new(user, admin)
|
|
|
|
orig_email = user.email
|
|
|
|
orig_username = user.username
|
|
|
|
helper.make_anonymous
|
|
|
|
|
|
|
|
history = helper.user_history
|
|
|
|
expect(history).to be_present
|
|
|
|
expect(history.email).to eq(orig_email)
|
|
|
|
expect(history.details).to match(orig_username)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "logs the action without the original details" do
|
|
|
|
SiteSetting.log_anonymizer_details = false
|
|
|
|
helper = UserAnonymizer.new(user, admin)
|
|
|
|
orig_email = user.email
|
|
|
|
orig_username = user.username
|
|
|
|
helper.make_anonymous
|
|
|
|
|
|
|
|
history = helper.user_history
|
|
|
|
expect(history).to be_present
|
|
|
|
expect(history.email).not_to eq(orig_email)
|
|
|
|
expect(history.details).not_to match(orig_username)
|
2015-03-07 05:44:54 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "removes external auth assocations" do
|
|
|
|
user.twitter_user_info = TwitterUserInfo.create(user_id: user.id, screen_name: "example", twitter_user_id: "examplel123123")
|
|
|
|
user.google_user_info = GoogleUserInfo.create(user_id: user.id, google_user_id: "google@gmail.com")
|
|
|
|
user.github_user_info = GithubUserInfo.create(user_id: user.id, screen_name: "example", github_user_id: "examplel123123")
|
|
|
|
user.facebook_user_info = FacebookUserInfo.create(user_id: user.id, facebook_user_id: "example")
|
|
|
|
user.single_sign_on_record = SingleSignOnRecord.create(user_id: user.id, external_id: "example", last_payload: "looks good")
|
|
|
|
user.oauth2_user_info = Oauth2UserInfo.create(user_id: user.id, uid: "example", provider: "example")
|
2018-03-01 19:10:27 +08:00
|
|
|
user.instagram_user_info = InstagramUserInfo.create(user_id: user.id, screen_name: "example", instagram_user_id: "examplel123123")
|
2015-03-07 05:44:54 +08:00
|
|
|
UserOpenId.create(user_id: user.id, email: user.email, url: "http://example.com/openid", active: true)
|
|
|
|
make_anonymous
|
|
|
|
user.reload
|
2015-04-25 23:18:35 +08:00
|
|
|
expect(user.twitter_user_info).to eq(nil)
|
|
|
|
expect(user.google_user_info).to eq(nil)
|
|
|
|
expect(user.github_user_info).to eq(nil)
|
|
|
|
expect(user.facebook_user_info).to eq(nil)
|
|
|
|
expect(user.single_sign_on_record).to eq(nil)
|
|
|
|
expect(user.oauth2_user_info).to eq(nil)
|
2018-03-01 19:10:27 +08:00
|
|
|
expect(user.instagram_user_info).to eq(nil)
|
2015-04-25 23:18:35 +08:00
|
|
|
expect(user.user_open_ids.count).to eq(0)
|
2015-03-07 05:44:54 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "removes api key" do
|
|
|
|
ApiKey.create(user_id: user.id, key: "123123123")
|
|
|
|
expect { make_anonymous }.to change { ApiKey.count }.by(-1)
|
|
|
|
user.reload
|
2015-04-25 23:18:35 +08:00
|
|
|
expect(user.api_key).to eq(nil)
|
2015-03-07 05:44:54 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|