Commit 8b0ca3f517d4480932a7583b80084e15b2eed81a

Authored by Daniela Feitosa
1 parent e4a4505f

Enhancements on patch for browse lists bug

* Replacing actions by activities
* Removing the more_active logic from profile to organization and person

(ActionItem1885)
app/models/organization.rb
... ... @@ -27,6 +27,13 @@ class Organization < Profile
27 27 :joins => "LEFT OUTER JOIN role_assignments ON profiles.id = role_assignments.resource_id",
28 28 :order => "total DESC"
29 29  
  30 + named_scope :more_active,
  31 + :select => "#{Profile.qualified_column_names}, count(action_tracker.id) as total",
  32 + :joins => "LEFT OUTER JOIN action_tracker ON profiles.id = action_tracker.target_id",
  33 + :group => Profile.qualified_column_names,
  34 + :order => 'total DESC',
  35 + :conditions => ['action_tracker.created_at >= ? OR action_tracker.id IS NULL', ActionTracker::Record::RECENT_DELAY.days.ago]
  36 +
30 37 def validation_methodology
31 38 self.validation_info ? self.validation_info.validation_methodology : nil
32 39 end
... ...
app/models/person.rb
... ... @@ -27,6 +27,13 @@ class Person < Profile
27 27 :joins => "LEFT OUTER JOIN friendships on profiles.id = friendships.person_id",
28 28 :order => "total DESC"
29 29  
  30 + named_scope :more_active,
  31 + :select => "#{Profile.qualified_column_names}, count(action_tracker.id) as total",
  32 + :joins => "LEFT OUTER JOIN action_tracker ON profiles.id = action_tracker.user_id",
  33 + :group => Profile.qualified_column_names,
  34 + :order => 'total DESC',
  35 + :conditions => ['action_tracker.created_at >= ? OR action_tracker.id IS NULL', ActionTracker::Record::RECENT_DELAY.days.ago]
  36 +
30 37 after_destroy do |person|
31 38 Friendship.find(:all, :conditions => { :friend_id => person.id}).each { |friendship| friendship.destroy }
32 39 end
... ...
app/models/profile.rb
... ... @@ -78,19 +78,11 @@ class Profile < ActiveRecord::Base
78 78 end
79 79  
80 80 named_scope :visible, :conditions => { :visible => true }
81   - # Subclasses must override this method
  81 + # Subclasses must override these methods
82 82 named_scope :more_popular
  83 + named_scope :more_active
  84 +
83 85 named_scope :more_recent, :order => "created_at DESC"
84   - named_scope :more_active, lambda {
85   - {
86   - :select => "#{Profile.qualified_column_names}, count(action_tracker.id) as total",
87   - :joins => "LEFT OUTER JOIN action_tracker ON profiles.id = action_tracker.user_id" +
88   - (self == Person ? '' : ' OR profiles.id = action_tracker.target_id'),
89   - :group => Profile.qualified_column_names,
90   - :order => 'total DESC',
91   - :conditions => ['action_tracker.created_at >= ? OR action_tracker.id IS NULL', ActionTracker::Record::RECENT_DELAY.days.ago]
92   - }
93   - }
94 86  
95 87 acts_as_trackable :dependent => :destroy
96 88  
... ... @@ -792,9 +784,9 @@ private :generate_url, :url_options
792 784 amount = recent_actions.count
793 785 amount += recent_notifications.count if organization?
794 786 {
795   - 0 => _('no actions'),
796   - 1 => _('one action')
797   - }[amount] || _("%s actions") % amount
  787 + 0 => _('no activity'),
  788 + 1 => _('one activity')
  789 + }[amount] || _("%s activities") % amount
798 790 end
799 791  
800 792 def more_popular_label
... ...
test/functional/browse_controller_test.rb
... ... @@ -201,13 +201,14 @@ class BrowseControllerTest < Test::Unit::TestCase
201 201  
202 202  
203 203 should 'list all communities filter by more active' do
  204 + person = fast_create(Person)
204 205 c1 = create(Community, :name => 'Testing community 1')
205 206 c2 = create(Community, :name => 'Testing community 2')
206 207 c3 = create(Community, :name => 'Testing community 3')
207 208 ActionTracker::Record.delete_all
208   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => c1, :created_at => Time.now)
209   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => c2, :created_at => Time.now)
210   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => c2, :created_at => Time.now)
  209 + fast_create(ActionTracker::Record, :target_id => c1, :user_type => 'Profile', :user_id => person, :created_at => Time.now)
  210 + fast_create(ActionTracker::Record, :target_id => c2, :user_type => 'Profile', :user_id => person, :created_at => Time.now)
  211 + fast_create(ActionTracker::Record, :target_id => c2, :user_type => 'Profile', :user_id => person, :created_at => Time.now)
211 212 get :communities, :filter => 'more_active'
212 213 assert_equal [c2,c1,c3] , assigns(:results)
213 214 end
... ...
test/unit/organization_test.rb
... ... @@ -344,4 +344,46 @@ class OrganizationTest < Test::Unit::TestCase
344 344 organization.add_member(person3)
345 345 assert_equal "3 members", organization.more_popular_label
346 346 end
  347 +
  348 + should 'find more active organizations' do
  349 + person = fast_create(Person)
  350 + Organization.destroy_all
  351 + p1 = fast_create(Organization)
  352 + p2 = fast_create(Organization)
  353 + p3 = fast_create(Organization)
  354 +
  355 + ActionTracker::Record.destroy_all
  356 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => Time.now, :target_id => p1.id)
  357 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => Time.now, :target_id => p2.id)
  358 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => Time.now, :target_id => p2.id)
  359 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => Time.now, :target_id => p3.id)
  360 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => Time.now, :target_id => p3.id)
  361 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => Time.now, :target_id => p3.id)
  362 +
  363 + assert_equal [p3,p2,p1] , Organization.more_active
  364 + end
  365 +
  366 + should 'more active profile take in consideration only actions created only in the recent delay interval' do
  367 + ActionTracker::Record.destroy_all
  368 + recent_delay = ActionTracker::Record::RECENT_DELAY.days.ago
  369 +
  370 + person = fast_create(Person)
  371 + Organization.destroy_all
  372 + p1 = fast_create(Organization)
  373 + p2 = fast_create(Organization)
  374 +
  375 + ActionTracker::Record.destroy_all
  376 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => recent_delay, :target_id => p1.id)
  377 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => recent_delay, :target_id => p1.id)
  378 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => recent_delay, :target_id => p2.id)
  379 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => person, :created_at => recent_delay - 1.day, :target_id => p2.id)
  380 +
  381 + assert_equal [p1,p2] , Organization.more_active
  382 + end
  383 +
  384 + should 'list profiles that have no actions in more active list' do
  385 + profile = fast_create(Organization)
  386 + assert_includes Organization.more_active, profile
  387 + end
  388 +
347 389 end
... ...
test/unit/person_test.rb
... ... @@ -1145,4 +1145,42 @@ class PersonTest < Test::Unit::TestCase
1145 1145 assert_equal [person], Person.members_of(community)
1146 1146 end
1147 1147  
  1148 + should 'find more active people' do
  1149 + Person.destroy_all
  1150 + p1 = fast_create(Person)
  1151 + p2 = fast_create(Person)
  1152 + p3 = fast_create(Person)
  1153 +
  1154 + ActionTracker::Record.destroy_all
  1155 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p1, :created_at => Time.now)
  1156 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p2, :created_at => Time.now)
  1157 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p2, :created_at => Time.now)
  1158 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p3, :created_at => Time.now)
  1159 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p3, :created_at => Time.now)
  1160 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p3, :created_at => Time.now)
  1161 +
  1162 + assert_equal [p3,p2,p1] , Person.more_active
  1163 + end
  1164 +
  1165 + should 'more active profile take in consideration only actions created only in the recent delay interval' do
  1166 + Person.delete_all
  1167 + ActionTracker::Record.destroy_all
  1168 + recent_delay = ActionTracker::Record::RECENT_DELAY.days.ago
  1169 +
  1170 + p1 = fast_create(Person)
  1171 + p2 = fast_create(Person)
  1172 +
  1173 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p1, :created_at => recent_delay)
  1174 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p1, :created_at => recent_delay)
  1175 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p2, :created_at => recent_delay)
  1176 + fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p2, :created_at => recent_delay - 1.day)
  1177 +
  1178 + assert_equal [p1,p2], Person.more_active
  1179 + end
  1180 +
  1181 + should 'list profiles that have no actions in more active list' do
  1182 + profile = fast_create(Person)
  1183 + assert_includes Person.more_active, profile
  1184 + end
  1185 +
1148 1186 end
... ...
test/unit/profile_test.rb
... ... @@ -1564,42 +1564,14 @@ class ProfileTest < Test::Unit::TestCase
1564 1564 assert_equal [p2,p3,p4,p1] , Profile.more_recent
1565 1565 end
1566 1566  
1567   - should 'find more active profiles' do
1568   - Profile.destroy_all
1569   - p1 = fast_create(Profile)
1570   - p2 = fast_create(Profile)
1571   - p3 = fast_create(Profile)
1572   -
1573   - ActionTracker::Record.destroy_all
1574   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p1, :created_at => Time.now)
1575   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p2, :created_at => Time.now)
1576   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p2, :created_at => Time.now)
1577   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p3, :created_at => Time.now)
1578   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p3, :created_at => Time.now)
1579   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p3, :created_at => Time.now)
1580   -
1581   - assert_equal [p3,p2,p1] , Profile.more_active
1582   - end
1583   -
1584   - should 'more active profile take in consideration only actions created only in the recent delay interval' do
1585   - Profile.delete_all
1586   - ActionTracker::Record.destroy_all
1587   - recent_delay = ActionTracker::Record::RECENT_DELAY.days.ago
1588   -
1589   - p1 = fast_create(Profile)
1590   - p2 = fast_create(Profile)
1591   -
1592   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p1, :created_at => recent_delay)
1593   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p1, :created_at => recent_delay)
1594   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p2, :created_at => recent_delay)
1595   - fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p2, :created_at => recent_delay - 1.day)
1596   -
1597   - assert_equal [p1,p2], Profile.more_active
  1567 + should 'respond to more active' do
  1568 + profile = fast_create(Profile)
  1569 + assert_respond_to Profile, :more_active
1598 1570 end
1599 1571  
1600   - should 'list profiles that have no actions in more active list' do
  1572 + should 'respond to more popular' do
1601 1573 profile = fast_create(Profile)
1602   - assert_includes Profile.more_active, profile
  1574 + assert_respond_to Profile, :more_popular
1603 1575 end
1604 1576  
1605 1577 should "return the more recent label" do
... ... @@ -1607,29 +1579,29 @@ class ProfileTest < Test::Unit::TestCase
1607 1579 assert_equal "Since: ", p.more_recent_label
1608 1580 end
1609 1581  
1610   - should "return no actions if profile has 0 actions" do
  1582 + should "return no activity if profile has 0 actions" do
1611 1583 p = fast_create(Profile)
1612 1584 assert_equal 0, p.recent_actions.count
1613   - assert_equal "no actions", p.more_active_label
  1585 + assert_equal "no activity", p.more_active_label
1614 1586 end
1615 1587  
1616   - should "return one action on label if the profile has one action" do
  1588 + should "return one activity on label if the profile has one action" do
1617 1589 p = fast_create(Profile)
1618 1590 fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p, :created_at => Time.now)
1619 1591 assert_equal 1, p.recent_actions.count
1620   - assert_equal "one action", p.more_active_label
  1592 + assert_equal "one activity", p.more_active_label
1621 1593 end
1622 1594  
1623   - should "return number of actions on label if the profile has more than one action" do
  1595 + should "return number of activities on label if the profile has more than one action" do
1624 1596 p = fast_create(Profile)
1625 1597 fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p, :created_at => Time.now)
1626 1598 fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p, :created_at => Time.now)
1627 1599 assert_equal 2, p.recent_actions.count
1628   - assert_equal "2 actions", p.more_active_label
  1600 + assert_equal "2 activities", p.more_active_label
1629 1601  
1630 1602 fast_create(ActionTracker::Record, :user_type => 'Profile', :user_id => p, :created_at => Time.now)
1631 1603 assert_equal 3, p.recent_actions.count
1632   - assert_equal "3 actions", p.more_active_label
  1604 + assert_equal "3 activities", p.more_active_label
1633 1605 end
1634 1606  
1635 1607 should 'provide list of galleries' do
... ...