From e818aae71c3e9eb4dff7696d7e7b996f606cf796 Mon Sep 17 00:00:00 2001 From: Nuwan Date: Thu, 22 Apr 2021 17:14:35 +0530 Subject: [PATCH] exclude deleted users from search exclude deleted musicians and fans from search results --- ruby/lib/jam_ruby/models/search.rb | 8 ++--- ruby/lib/jam_ruby/models/user.rb | 6 ++-- ruby/spec/jam_ruby/models/user_spec.rb | 17 ++++++++++ web/spec/requests/musician_search_api_spec.rb | 11 ++++++- web/spec/requests/search_api_spec.rb | 32 +++++++++++++++++++ 5 files changed, 66 insertions(+), 8 deletions(-) diff --git a/ruby/lib/jam_ruby/models/search.rb b/ruby/lib/jam_ruby/models/search.rb index aa0f25a46..0653d374b 100644 --- a/ruby/lib/jam_ruby/models/search.rb +++ b/ruby/lib/jam_ruby/models/search.rb @@ -78,13 +78,13 @@ module JamRuby Band.where(nil) when 'fans' @search_type = :fans - User.fans + User.fans.not_deleted else @search_type = :musicians - User.musicians + User.musicians.not_deleted 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) end @@ -230,7 +230,7 @@ module JamRuby # remote_ip - defunct! 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.group('users.id') diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index 0b181e9e7..e69be3325 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -304,6 +304,7 @@ module JamRuby scope :musicians_geocoded, -> { musicians.geocoded_users } 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 :not_deleted, ->{ where(deleted: false) } def after_save if school_interest && !school_interest_was @@ -1987,9 +1988,8 @@ module JamRuby def permanently_delete 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 - - 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) + 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") end def update_avatar(original_fpfile, cropped_fpfile, cropped_large_fpfile, crop_selection, aws_bucket) diff --git a/ruby/spec/jam_ruby/models/user_spec.rb b/ruby/spec/jam_ruby/models/user_spec.rb index bf27a52a3..9b1d0f336 100644 --- a/ruby/spec/jam_ruby/models/user_spec.rb +++ b/ruby/spec/jam_ruby/models/user_spec.rb @@ -1129,6 +1129,23 @@ describe User do user.remind_take_lesson_at.should_not be_nil 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 describe "update avatar" do diff --git a/web/spec/requests/musician_search_api_spec.rb b/web/spec/requests/musician_search_api_spec.rb index c08778bce..5af05bda1 100644 --- a/web/spec/requests/musician_search_api_spec.rb +++ b/web/spec/requests/musician_search_api_spec.rb @@ -21,7 +21,7 @@ describe "Musician Search API", :type => :api do Score.connection.execute('delete from current_network_scores').check @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) @user2 = FactoryGirl.create(:user, last_jam_locidispid: 1) @@ -67,6 +67,15 @@ describe "Musician Search API", :type => :api do 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 it "gets musicians for default instrument" do diff --git a/web/spec/requests/search_api_spec.rb b/web/spec/requests/search_api_spec.rb index 2b305a77e..6bcbaee0e 100644 --- a/web/spec/requests/search_api_spec.rb +++ b/web/spec/requests/search_api_spec.rb @@ -17,6 +17,7 @@ describe "Search API", :type => :api do } before(:each) do + User.delete_all post '/sessions', "session[email]" => user.email, "session[password]" => user.password rack_mock_session.cookie_jar["remember_token"].should == user.remember_token end @@ -45,5 +46,36 @@ describe "Search API", :type => :api do bands.should include(@band.id) bands.should include(@band2.id) 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