Commit 4aa45dd80513a07f352af8848f1096c725f68805

Authored by Arthur Esposte
Committed by Daniela Feitosa
1 parent b4000b01

Handle related suggestions when a profile is destroyed

app/controllers/my_profile/friends_controller.rb
1 1 class FriendsController < MyProfileController
2   -
  2 +
3 3 protect 'manage_friends', :profile
4   -
  4 +
5 5 def index
6   - @suggestions = profile.profile_suggestions.of_person.enabled.includes(:suggestion).limit(per_page)
  6 + @suggestions = profile.suggested_profiles.of_person.enabled.includes(:suggestion).limit(per_page)
7 7 if is_cache_expired?(profile.manage_friends_cache_key(params))
8 8 @friends = profile.friends.paginate(:per_page => per_page, :page => params[:npage])
9 9 end
... ... @@ -18,7 +18,7 @@ class FriendsController &lt; MyProfileController
18 18 end
19 19  
20 20 def suggest
21   - @suggestions = profile.profile_suggestions.of_person.enabled.includes(:suggestion).limit(per_page)
  21 + @suggestions = profile.suggested_profiles.of_person.enabled.includes(:suggestion).limit(per_page)
22 22 end
23 23  
24 24 def remove_suggestion
... ... @@ -26,13 +26,13 @@ class FriendsController &lt; MyProfileController
26 26 redirect_to :action => 'suggest' unless @person
27 27 if @person && request.post?
28 28 profile.remove_suggestion(@person)
29   - @suggestions = profile.profile_suggestions.of_person.enabled.includes(:suggestion).limit(per_page)
  29 + @suggestions = profile.suggested_profiles.of_person.enabled.includes(:suggestion).limit(per_page)
30 30 render :partial => 'shared/profile_suggestions_list', :locals => { :suggestions => @suggestions, :collection => :friends_suggestions, :per_page => params[:per_page] || per_page }
31 31 end
32 32 end
33 33  
34 34 def connections
35   - @suggestion = profile.profile_suggestions.of_person.enabled.find_by_suggestion_id(params[:id])
  35 + @suggestion = profile.suggested_profiles.of_person.enabled.find_by_suggestion_id(params[:id])
36 36 if @suggestion
37 37 @tags = @suggestion.tag_connections
38 38 @profiles = @suggestion.profile_connections
... ...
app/controllers/my_profile/memberships_controller.rb
... ... @@ -40,7 +40,7 @@ class MembershipsController &lt; MyProfileController
40 40 end
41 41  
42 42 def suggest
43   - @suggestions = profile.profile_suggestions.of_community.enabled.includes(:suggestion).limit(per_page)
  43 + @suggestions = profile.suggested_profiles.of_community.enabled.includes(:suggestion).limit(per_page)
44 44 end
45 45  
46 46 def remove_suggestion
... ... @@ -49,13 +49,13 @@ class MembershipsController &lt; MyProfileController
49 49 redirect_to :action => 'suggest' unless @community
50 50 if @community && request.post?
51 51 profile.remove_suggestion(@community)
52   - @suggestions = profile.profile_suggestions.of_community.enabled.includes(:suggestion).limit(custom_per_page)
  52 + @suggestions = profile.suggested_profiles.of_community.enabled.includes(:suggestion).limit(custom_per_page)
53 53 render :partial => 'shared/profile_suggestions_list', :locals => { :suggestions => @suggestions, :collection => :communities_suggestions, :per_page => custom_per_page}
54 54 end
55 55 end
56 56  
57 57 def connections
58   - @suggestion = profile.profile_suggestions.of_community.enabled.find_by_suggestion_id(params[:id])
  58 + @suggestion = profile.suggested_profiles.of_community.enabled.find_by_suggestion_id(params[:id])
59 59 if @suggestion
60 60 @tags = @suggestion.tag_connections
61 61 @profiles = @suggestion.profile_connections
... ...
app/models/add_friend.rb
... ... @@ -54,7 +54,7 @@ class AddFriend &lt; Task
54 54 end
55 55  
56 56 def remove_from_suggestion_list(task)
57   - suggestion = task.requestor.profile_suggestions.find_by_suggestion_id task.target.id
  57 + suggestion = task.requestor.suggested_profiles.find_by_suggestion_id task.target.id
58 58 suggestion.disable if suggestion
59 59 end
60 60 end
... ...
app/models/person.rb
... ... @@ -84,9 +84,9 @@ roles] }
84 84 has_and_belongs_to_many :acepted_forums, :class_name => 'Forum', :join_table => 'terms_forum_people'
85 85 has_and_belongs_to_many :articles_with_access, :class_name => 'Article', :join_table => 'article_privacy_exceptions'
86 86  
87   - has_many :profile_suggestions, :foreign_key => :person_id, :order => 'score DESC', :dependent => :destroy
88   - has_many :suggested_people, :through => :profile_suggestions, :source => :suggestion, :conditions => ['profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Person', true]
89   - has_many :suggested_communities, :through => :profile_suggestions, :source => :suggestion, :conditions => ['profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Community', true]
  87 + has_many :suggested_profiles, :class_name => 'ProfileSuggestion', :foreign_key => :person_id, :order => 'score DESC', :dependent => :destroy
  88 + has_many :suggested_people, :through => :suggested_profiles, :source => :suggestion, :conditions => ['profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Person', true]
  89 + has_many :suggested_communities, :through => :suggested_profiles, :source => :suggestion, :conditions => ['profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Community', true]
90 90  
91 91 scope :more_popular, :order => 'friends_count DESC'
92 92  
... ... @@ -524,7 +524,7 @@ roles] }
524 524 end
525 525  
526 526 def remove_suggestion(profile)
527   - suggestion = profile_suggestions.find_by_suggestion_id profile.id
  527 + suggestion = suggested_profiles.find_by_suggestion_id profile.id
528 528 suggestion.disable if suggestion
529 529 end
530 530  
... ...
app/models/profile.rb
... ... @@ -1033,7 +1033,7 @@ private :generate_url, :url_options
1033 1033 end
1034 1034  
1035 1035 def remove_from_suggestion_list(person)
1036   - suggestion = person.profile_suggestions.find_by_suggestion_id self.id
  1036 + suggestion = person.suggested_profiles.find_by_suggestion_id self.id
1037 1037 suggestion.disable if suggestion
1038 1038 end
1039 1039  
... ...
app/models/profile_suggestion.rb
... ... @@ -113,14 +113,14 @@ class ProfileSuggestion &lt; ActiveRecord::Base
113 113 suggested_profiles = all_suggestions(person)
114 114 return if suggested_profiles.nil?
115 115  
116   - already_suggested_profiles = person.profile_suggestions.map(&:suggestion_id).join(',')
  116 + already_suggested_profiles = person.suggested_profiles.map(&:suggestion_id).join(',')
117 117 suggested_profiles = suggested_profiles.where("profiles.id NOT IN (#{already_suggested_profiles})") if already_suggested_profiles.present?
118 118 #TODO suggested_profiles = suggested_profiles.order('score DESC')
119 119 suggested_profiles = suggested_profiles.limit(N_SUGGESTIONS)
120 120 return if suggested_profiles.blank?
121 121  
122 122 suggested_profiles.each do |suggested_profile|
123   - suggestion = person.profile_suggestions.find_or_initialize_by_suggestion_id(suggested_profile.id)
  123 + suggestion = person.suggested_profiles.find_or_initialize_by_suggestion_id(suggested_profile.id)
124 124 RULES.each do |rule, options|
125 125 begin
126 126 value = suggested_profile.send("#{rule}_count").to_i
... ... @@ -273,7 +273,7 @@ class ProfileSuggestion &lt; ActiveRecord::Base
273 273 end
274 274  
275 275 def self.generate_profile_suggestions(person, force = false)
276   - return if person.profile_suggestions.enabled.count >= MIN_LIMIT && !force
  276 + return if person.suggested_profiles.enabled.count >= MIN_LIMIT && !force
277 277 Delayed::Job.enqueue ProfileSuggestionsJob.new(person.id) unless ProfileSuggestionsJob.exists?(person.id)
278 278 end
279 279  
... ...
test/functional/friends_controller_test.rb
... ... @@ -46,7 +46,7 @@ class FriendsControllerTest &lt; ActionController::TestCase
46 46  
47 47 should 'display find people button' do
48 48 get :index, :profile => 'testuser'
49   - assert_tag :tag => 'a', :content => 'Find people', :attributes => { :href => '/assets/people' }
  49 + assert_tag :tag => 'a', :content => 'Find people', :attributes => { :href => '/search/assets?asset=people' }
50 50 end
51 51  
52 52 should 'not display invite friends button if any plugin tells not to' do
... ... @@ -76,25 +76,25 @@ class FriendsControllerTest &lt; ActionController::TestCase
76 76 end
77 77  
78 78 should 'display people suggestions' do
79   - profile.profile_suggestions.create(:suggestion => friend)
  79 + profile.suggested_profiles.create(:suggestion => friend)
80 80 get :suggest, :profile => 'testuser'
81 81 assert_tag :tag => 'a', :content => "+ #{friend.name}", :attributes => { :href => "/profile/#{friend.identifier}/add" }
82 82 end
83 83  
84 84 should 'display button to add friend suggestion' do
85   - profile.profile_suggestions.create(:suggestion => friend)
  85 + profile.suggested_profiles.create(:suggestion => friend)
86 86 get :suggest, :profile => 'testuser'
87 87 assert_tag :tag => 'a', :attributes => { :href => "/profile/#{friend.identifier}/add" }
88 88 end
89 89  
90 90 should 'display button to remove people suggestion' do
91   - profile.profile_suggestions.create(:suggestion => friend)
  91 + profile.suggested_profiles.create(:suggestion => friend)
92 92 get :suggest, :profile => 'testuser'
93 93 assert_tag :tag => 'a', :attributes => { :href => /\/myprofile\/testuser\/friends\/remove_suggestion\/#{friend.identifier}/ }
94 94 end
95 95  
96 96 should 'remove suggestion of friend' do
97   - suggestion = profile.profile_suggestions.create(:suggestion => friend)
  97 + suggestion = profile.suggested_profiles.create(:suggestion => friend)
98 98 post :remove_suggestion, :profile => 'testuser', :id => friend.identifier
99 99  
100 100 assert_response :success
... ...
test/functional/memberships_controller_test.rb
... ... @@ -331,35 +331,35 @@ class MembershipsControllerTest &lt; ActionController::TestCase
331 331  
332 332 should 'display list suggestions button' do
333 333 community = fast_create(Community)
334   - profile.profile_suggestions.create(:suggestion => community)
  334 + profile.suggested_profiles.create(:suggestion => community)
335 335 get :index, :profile => 'testuser'
336 336 assert_tag :tag => 'a', :content => 'See some suggestions of communities...', :attributes => { :href => "/myprofile/testuser/memberships/suggest" }
337 337 end
338 338  
339 339 should 'display communities suggestions' do
340 340 community = fast_create(Community)
341   - profile.profile_suggestions.create(:suggestion => community)
  341 + profile.suggested_profiles.create(:suggestion => community)
342 342 get :suggest, :profile => 'testuser'
343 343 assert_tag :tag => 'a', :content => "+ #{community.name}", :attributes => { :href => "/profile/#{community.identifier}/join" }
344 344 end
345 345  
346 346 should 'display button to join on community suggestion' do
347 347 community = fast_create(Community)
348   - profile.profile_suggestions.create(:suggestion => community)
  348 + profile.suggested_profiles.create(:suggestion => community)
349 349 get :suggest, :profile => 'testuser'
350 350 assert_tag :tag => 'a', :attributes => { :href => "/profile/#{community.identifier}/join" }
351 351 end
352 352  
353 353 should 'display button to remove community suggestion' do
354 354 community = fast_create(Community)
355   - profile.profile_suggestions.create(:suggestion => community)
  355 + profile.suggested_profiles.create(:suggestion => community)
356 356 get :suggest, :profile => 'testuser'
357 357 assert_tag :tag => 'a', :attributes => { :href => /\/myprofile\/testuser\/memberships\/remove_suggestion\/#{community.identifier}/ }
358 358 end
359 359  
360 360 should 'remove suggestion of community' do
361 361 community = fast_create(Community)
362   - suggestion = profile.profile_suggestions.create(:suggestion => community)
  362 + suggestion = profile.suggested_profiles.create(:suggestion => community)
363 363 post :remove_suggestion, :profile => 'testuser', :id => community.identifier
364 364  
365 365 assert_response :success
... ...
test/unit/profile_suggestion_test.rb
... ... @@ -142,7 +142,7 @@ class ProfileSuggestionTest &lt; ActiveSupport::TestCase
142 142 p2 = create_user('testuser2').person
143 143 p3 = create_user('testuser3').person
144 144 p4 = create_user('testuser4').person
145   - p5 = create_user('testuser4').person
  145 + p5 = create_user('testuser5').person
146 146  
147 147 p1.add_friend(p2)
148 148 p1.add_friend(p3)
... ... @@ -212,8 +212,8 @@ class ProfileSuggestionTest &lt; ActiveSupport::TestCase
212 212  
213 213 ProfileSuggestion.expects(:calculate_suggestions)
214 214  
215   - person.profile_suggestions.enabled.last.disable
216   - person.profile_suggestions.enabled.last.destroy
  215 + person.suggested_profiles.enabled.last.disable
  216 + person.suggested_profiles.enabled.last.destroy
217 217 process_delayed_job_queue
218 218 end
219 219  
... ...
test/unit/profile_test.rb
... ... @@ -2139,6 +2139,16 @@ class ProfileTest &lt; ActiveSupport::TestCase
2139 2139 assert_equal false, ProfileSuggestion.find(suggestion.id).enabled
2140 2140 end
2141 2141  
  2142 + should 'destroy related suggestion if profile is destroyed' do
  2143 + person = fast_create(Person)
  2144 + suggested_person = fast_create(Person)
  2145 + suggestion = ProfileSuggestion.create(:person => person, :suggestion => suggested_person, :enabled => true)
  2146 +
  2147 + assert_difference 'ProfileSuggestion.find_all_by_suggestion_id(suggested_person.id).count', -1 do
  2148 + suggested_person.destroy
  2149 + end
  2150 + end
  2151 +
2142 2152 should 'enable profile visibility' do
2143 2153 profile = fast_create(Profile)
2144 2154  
... ...