Merged in VRFS-5144-deleted_user_improvements (pull request #15)

exclude deleted users from search

Approved-by: Seth Call
This commit is contained in:
Nuwan Chaturanga 2021-04-22 21:55:17 +00:00 committed by Seth Call
commit 3a248df971
5 changed files with 66 additions and 8 deletions

View File

@ -78,13 +78,13 @@ module JamRuby
Band.where(nil) Band.where(nil)
when 'fans' when 'fans'
@search_type = :fans @search_type = :fans
User.fans User.fans.not_deleted
else else
@search_type = :musicians @search_type = :musicians
User.musicians User.musicians.not_deleted
end end
@results = rel.where("(name_tsv @@ to_tsquery('jamenglish', ?))", tsquery).limit(10)
@results = rel.where("(name_tsv @@ to_tsquery('jamenglish', ?))", tsquery).limit(10)
@results = Search.scope_schools_together(@results, user) @results = Search.scope_schools_together(@results, user)
end end
@ -230,7 +230,7 @@ module JamRuby
# remote_ip - defunct! # remote_ip - defunct!
def musician_filter(params={}, user=nil) def musician_filter(params={}, user=nil)
rel = User.musicians # not musicians_geocoded on purpose; we allow 'unknowns' to surface in the search page rel = User.musicians.not_deleted # not musicians_geocoded on purpose; we allow 'unknowns' to surface in the search page
rel = rel.select('users.*') rel = rel.select('users.*')
rel = rel.group('users.id') rel = rel.group('users.id')

View File

@ -304,6 +304,7 @@ module JamRuby
scope :musicians_geocoded, -> { musicians.geocoded_users } scope :musicians_geocoded, -> { musicians.geocoded_users }
scope :email_opt_in, -> { where(:subscribe_email => true) } scope :email_opt_in, -> { where(:subscribe_email => true) }
scope :came_through_amazon, -> { joins(:posa_cards).where('posa_cards.lesson_package_type_id in (?)', LessonPackageType::AMAZON_PACKAGES + LessonPackageType::LESSON_PACKAGE_TYPES)} scope :came_through_amazon, -> { joins(:posa_cards).where('posa_cards.lesson_package_type_id in (?)', LessonPackageType::AMAZON_PACKAGES + LessonPackageType::LESSON_PACKAGE_TYPES)}
scope :not_deleted, ->{ where(deleted: false) }
def after_save def after_save
if school_interest && !school_interest_was if school_interest && !school_interest_was
@ -1987,9 +1988,8 @@ module JamRuby
def permanently_delete def permanently_delete
original_email = self.email original_email = self.email
AdminMailer.ugly({to: original_email, cc: 'support@jamkazam.com', subject:'Your account has been deleted!', body: "This will be the last email you receive from JamKazam.\n\nRegards,\nTeam JamKazam"}).deliver_now AdminMailer.ugly({to: original_email, cc: APP_CONFIG.email_support_alias, subject:'Your account has been deleted!', body: "This will be the last email you receive from JamKazam.\n\nRegards,\nTeam JamKazam"}).deliver_now
User.where(id: self.id).update_all(encrypted_password: SecureRandom.uuid, email: "deleted+#{SecureRandom.uuid}@jamkazam.com", subscribe_email: false, remember_token: SecureRandom.uuid, deleted: true, first_name: "deleted", last_name: "deleted")
User.where(id: self.id).update_all(encrypted_password: SecureRandom.uuid, email: "deleted+#{SecureRandom.uuid}@jamkazam.com", subscribe_email: false, remember_token: SecureRandom.uuid, deleted: true)
end end
def update_avatar(original_fpfile, cropped_fpfile, cropped_large_fpfile, crop_selection, aws_bucket) def update_avatar(original_fpfile, cropped_fpfile, cropped_large_fpfile, crop_selection, aws_bucket)

View File

@ -1129,6 +1129,23 @@ describe User do
user.remind_take_lesson_at.should_not be_nil user.remind_take_lesson_at.should_not be_nil
end end
end end
describe "permanently_delete" do
let(:user) {FactoryGirl.create(:user)}
before(:each) {
UserMailer.deliveries.clear
}
it "works" do
user.permanently_delete
expect(user.reload.deleted).to eq(true)
expect(user.reload.first_name).to eq("deleted")
expect(user.reload.last_name).to eq("deleted")
expect(UserMailer.deliveries.size).to eq(1)
end
end
=begin =begin
describe "update avatar" do describe "update avatar" do

View File

@ -21,7 +21,7 @@ describe "Musician Search API", :type => :api do
Score.connection.execute('delete from current_network_scores').check Score.connection.execute('delete from current_network_scores').check
@user = FactoryGirl.create(:user, last_jam_locidispid: 1) @user = FactoryGirl.create(:user, last_jam_locidispid: 1)
@conn = FactoryGirl.create(:connection, user_id: @user.id, locidispid: 1) @conn = FactoryGirl.create(:connection, user_id: @user.id, locidispid: 1, addr: '1')
@user1 = FactoryGirl.create(:user, last_jam_locidispid: 1) @user1 = FactoryGirl.create(:user, last_jam_locidispid: 1)
@user2 = FactoryGirl.create(:user, last_jam_locidispid: 1) @user2 = FactoryGirl.create(:user, last_jam_locidispid: 1)
@ -67,6 +67,15 @@ describe "Musician Search API", :type => :api do
end end
context 'exclude deleted' do
it "exclude deleted musicians" do
@user1.permanently_delete
get_query
good_response
expect(json['musicians'].count).to be [Search::M_PER_PAGE, User.musicians_geocoded.count - 1].min
end
end
context 'instrument filtering' do context 'instrument filtering' do
it "gets musicians for default instrument" do it "gets musicians for default instrument" do

View File

@ -17,6 +17,7 @@ describe "Search API", :type => :api do
} }
before(:each) do before(:each) do
User.delete_all
post '/sessions', "session[email]" => user.email, "session[password]" => user.password post '/sessions', "session[email]" => user.email, "session[password]" => user.password
rack_mock_session.cookie_jar["remember_token"].should == user.remember_token rack_mock_session.cookie_jar["remember_token"].should == user.remember_token
end end
@ -45,5 +46,36 @@ describe "Search API", :type => :api do
bands.should include(@band.id) bands.should include(@band.id)
bands.should include(@band2.id) bands.should include(@band2.id)
end end
it "excludes forever deleted musicians" do
@musician1 = FactoryGirl.create(:user, first_name: "Peach Peach", last_name: "Grovery", email: "user@example.com", musician: true)
@musician2 = FactoryGirl.create(:user, first_name: "Peach Peach", last_name: "Grovery", email: "user1@example.com", musician: true)
@musician1.permanently_delete
get '/api/search.json?query=peach&search_text_type=musicians'
last_response.status.should == 200
response = JSON.parse(last_response.body)
response["musicians"].length.should == 1
get '/api/search.json?query=deleted&search_text_type=musicians'
last_response.status.should == 200
response = JSON.parse(last_response.body)
response["musicians"].length.should == 0
end
it "excludes forever deleted fans" do
@fan1 = FactoryGirl.create(:user, first_name: "Peach", last_name: "Nothing", email: "user@example.com", musician: false)
@fan2 = FactoryGirl.create(:user, first_name: "Peach Peach", last_name: "Grovery", email: "user1@example.com", musician: false)
@fan1.permanently_delete
get '/api/search.json?query=peach&search_text_type=fans'
last_response.status.should == 200
response = JSON.parse(last_response.body)
response["fans"].length.should == 1
get '/api/search.json?query=deleted&search_text_type=fans'
last_response.status.should == 200
response = JSON.parse(last_response.body)
response["fans"].length.should == 0
end
end end
end end