Compare View

switch
from
...
to
 
Commits (2)
app/models/concerns/follower.rb
... ... @@ -4,6 +4,7 @@ module Follower
4 4 def follow(profile, circles)
5 5 circles = [circles] unless circles.is_a?(Array)
6 6 circles.each do |new_circle|
  7 + next if new_circle.person != self || new_circle.profile_type != profile.class.name
7 8 ProfileFollower.create(profile: profile, circle: new_circle)
8 9 end
9 10 end
... ... @@ -24,16 +25,15 @@ module Follower
24 25 def update_profile_circles(profile, new_circles)
25 26 profile_circles = ProfileFollower.with_profile(profile).with_follower(self).map(&:circle)
26 27 circles_to_add = new_circles - profile_circles
27   - circles_to_remove = profile_circles - new_circles
28   - circles_to_add.each do |new_circle|
29   - ProfileFollower.create(profile: profile, circle: new_circle)
30   - end
  28 + self.follow(profile, circles_to_add)
31 29  
  30 + circles_to_remove = profile_circles - new_circles
32 31 ProfileFollower.where('circle_id IN (?) AND profile_id = ?',
33 32 circles_to_remove.map(&:id), profile.id).destroy_all
34 33 end
35 34  
36 35 def remove_profile_from_circle(profile, circle)
  36 + return if circle.person != self
37 37 ProfileFollower.with_profile(profile).with_circle(circle).destroy_all
38 38 end
39 39  
... ...
app/models/friendship.rb
... ... @@ -10,9 +10,6 @@ class Friendship < ApplicationRecord
10 10 Friendship.update_cache_counter(:friends_count, friendship.person, 1)
11 11 Friendship.update_cache_counter(:friends_count, friendship.friend, 1)
12 12  
13   - p "*"*60
14   - p "BEFORE CIRCLES"
15   - p "*"*60
16 13 circles = friendship.group.blank? ? ['friendships'] : friendship.group.split(',').map(&:strip)
17 14 circles.each do |circle|
18 15 friendship.person.follow(friendship.friend, Circle.find_or_create_by(:person => friendship.person, :name => circle, :profile_type => 'Person'))
... ...
app/models/profile.rb
... ... @@ -249,11 +249,6 @@ class Profile < ApplicationRecord
249 249 has_many :email_templates, :foreign_key => :owner_id
250 250  
251 251 has_many :profile_followers
252   - scope :memberships_of, -> person {
253   - distinct.select('profiles.*').
254   - joins(:role_assignments).
255   - where('role_assignments.accessor_type = ? AND role_assignments.accessor_id = ?', person.class.base_class.name, person.id)
256   - }
257 252  
258 253 def in_circles
259 254 Circle.joins(:profile_followers).
... ... @@ -261,10 +256,10 @@ class Profile < ApplicationRecord
261 256 end
262 257  
263 258 def followers
264   - person_followers = Person.joins(:circles).merge(in_circles)
265   - external_person_followers = ExternalPerson.joins(:circles).merge(in_circles)
  259 + person_followers = Person.joins(:circles).merge(in_circles).uniq
  260 + external_person_followers = ExternalPerson.joins(:circles).merge(in_circles).uniq
266 261  
267   - person_followers+external_person_followers
  262 + person_followers + external_person_followers
268 263 end
269 264  
270 265 # has_many :followers, -> { uniq }, :through => :profile_followers, :source => :person
... ...
test/unit/follower_test.rb 0 → 100644
... ... @@ -0,0 +1,152 @@
  1 +require_relative "../test_helper"
  2 +
  3 +class FollowerTest < ActiveSupport::TestCase
  4 +
  5 + def setup
  6 + @person1 = create_user('perso-test-1').person
  7 + @person2 = create_user('person-test-2').person
  8 +
  9 + @circle1 = Circle.create!(person: @person1, name: "Zombies", profile_type: 'Person')
  10 + @circle2 = Circle.create!(person: @person1, name: "Humans", profile_type: 'Person')
  11 +
  12 + @external_person = ExternalPerson.create!(identifier: 'johnlocke',
  13 + name: 'John Locke',
  14 + source: 'anerenvironment.org',
  15 + email: 'locke@island.org',
  16 + created_at: Date.yesterday)
  17 + end
  18 +
  19 + should 'follows? return false when no profile is passed as parameter' do
  20 + assert_equal false, @person1.follows?(nil)
  21 + end
  22 +
  23 + should 'follow person with regular user' do
  24 + assert_difference '@person1.followed_profiles.count' do
  25 + @person1.follow(@person2, @circle1)
  26 + end
  27 + assert @person1.follows?(@person2)
  28 + end
  29 +
  30 + should 'follow a community' do
  31 + community = fast_create(Community)
  32 + circle = Circle.create!(person: @person1, name: "Terminus", profile_type: 'Community')
  33 +
  34 + assert_difference '@person1.followed_profiles.count' do
  35 + @person1.follow(community, circle)
  36 + end
  37 + assert @person1.follows?(community)
  38 + end
  39 +
  40 + should 'not follow person if the user is not the ownner of the circle' do
  41 + person3 = create_user('perso-test-3').person
  42 +
  43 + assert_no_difference '@circle1.person.followed_profiles.count' do
  44 + person3.follow(@person2, @circle1)
  45 + end
  46 + assert_not @circle1.person.follows?(@person2)
  47 + end
  48 +
  49 + should 'not follow a community if circle profile type does not match' do
  50 + community = fast_create(Community)
  51 +
  52 + assert_no_difference '@person1.followed_profiles.count' do
  53 + @person1.follow(community, @circle1)
  54 + end
  55 + assert_not @person1.follows?(community)
  56 + end
  57 +
  58 + should 'follow person with external user' do
  59 + @circle1.update_attributes(person: @external_person)
  60 +
  61 + assert_difference '@external_person.followed_profiles.count' do
  62 + @external_person.follow(@person2, @circle1)
  63 + end
  64 + assert @external_person.follows?(@person2)
  65 + end
  66 +
  67 + should 'unfollow person with regular user' do
  68 + @person1.follow(@person2, @circle1)
  69 +
  70 + assert_difference '@person1.followed_profiles.count', -1 do
  71 + @person1.unfollow(@person2)
  72 + end
  73 + assert_not @person1.follows?(@person2)
  74 + end
  75 +
  76 + should 'unfollow person with external user' do
  77 + @circle1.update_attributes(person: @external_person)
  78 + @external_person.follow(@person2, @circle1)
  79 +
  80 + assert_difference '@external_person.followed_profiles.count', -1 do
  81 + @external_person.unfollow(@person2)
  82 + end
  83 + assert_not @external_person.follows?(@person2)
  84 + end
  85 +
  86 + should 'get the followed profiles for a regular user' do
  87 + person3 = create_user('person-test-3').person
  88 +
  89 + @person1.follow(@person2, @circle1)
  90 + @person1.follow(person3, @circle1)
  91 + assert_equivalent [@person2, person3], @person1.followed_profiles
  92 + end
  93 +
  94 + should 'get the followed profiles for an external user' do
  95 + person3 = create_user('person-test-3').person
  96 + @circle1.update_attributes(person: @external_person)
  97 +
  98 + @external_person.follow(@person2, @circle1)
  99 + @external_person.follow(person3, @circle1)
  100 + assert_equivalent [@person2, person3], @external_person.followed_profiles
  101 + end
  102 +
  103 + should 'not follow same person twice even with different circles' do
  104 + circle3 = Circle.create!(person: @person1, name: "Free Folk", profile_type: 'Person')
  105 +
  106 + @person1.follow(@person2, @circle1)
  107 + @person1.follow(@person2, @circle2)
  108 + @person1.follow(@person2, circle3)
  109 + assert_equivalent [@person2], @person1.followed_profiles
  110 + end
  111 +
  112 + should 'display an error if a person is already being followed' do
  113 + @person1.follow(@person2, @circle1)
  114 + profile_follower = ProfileFollower.new(circle: @circle1, profile: @person2)
  115 +
  116 + profile_follower.valid?
  117 + assert profile_follower.errors.messages[:profile_id].present?
  118 + end
  119 +
  120 + should 'update profile circles for a person' do
  121 + circle3 = Circle.create!(person: @person1, name: "Brains", profile_type: 'Person')
  122 + @person1.follow(@person2, [@circle1, @circle2])
  123 +
  124 + @person1.update_profile_circles(@person2, [@circle2, circle3])
  125 + assert_equivalent [@circle2, circle3], @person2.in_circles
  126 + end
  127 +
  128 + should 'keep other follower circles after update' do
  129 + person3 = create_user('person-test-3').person
  130 + circle3 = Circle.create!(person: person3, name: "Humans", profile_type: 'Person')
  131 + @person1.follow(@person2, @circle1)
  132 + person3.follow(@person2, circle3)
  133 +
  134 + @person1.update_profile_circles(@person2, [@circle1, @circle2])
  135 + assert_equivalent [@circle1, @circle2, circle3], @person2.in_circles
  136 + end
  137 +
  138 + should 'remove a person from a circle' do
  139 + @person1.follow(@person2, [@circle1, @circle2])
  140 +
  141 + @person1.remove_profile_from_circle(@person2, @circle2)
  142 + assert_equivalent [@circle1], @person2.in_circles
  143 + end
  144 +
  145 + should 'not remove a person from a circle if the user is not the owner' do
  146 + person3 = create_user('person-test-3').person
  147 + @person1.follow(@person2, [@circle1, @circle2])
  148 +
  149 + person3.remove_profile_from_circle(@person2, @circle2)
  150 + assert_equivalent [@circle1, @circle2], @person2.in_circles
  151 + end
  152 +end
... ...
test/unit/friendship_test.rb
... ... @@ -81,8 +81,8 @@ class FriendshipTest &lt; ActiveSupport::TestCase
81 81 p2.add_friend(p1, 'friends')
82 82 end
83 83  
84   - assert_includes p1.followers(true), p2
85   - assert_includes p2.followers(true), p1
  84 + assert_includes p1.followers, p2
  85 + assert_includes p2.followers, p1
86 86 end
87 87  
88 88 should 'remove follower when a friend removal occurs' do
... ... @@ -94,8 +94,8 @@ class FriendshipTest &lt; ActiveSupport::TestCase
94 94  
95 95 Friendship.remove_friendship(p1, p2)
96 96  
97   - assert_not_includes p1.followers(true), p2
98   - assert_not_includes p2.followers(true), p1
  97 + assert_not_includes p1.followers, p2
  98 + assert_not_includes p2.followers, p1
99 99 end
100 100  
101 101 should 'keep friendship intact when stop following' do
... ...
test/unit/person_test.rb
... ... @@ -1640,11 +1640,6 @@ class PersonTest &lt; ActiveSupport::TestCase
1640 1640 assert person.can_change_homepage?
1641 1641 end
1642 1642  
1643   - should 'follow? return false when no profile is passed as parameter' do
1644   - person = Person.new
1645   - assert_equal false, person.follows?(nil)
1646   - end
1647   -
1648 1643 should 'allow posting content when has post_content permission' do
1649 1644 person = create_user('person').person
1650 1645 profile = mock
... ... @@ -1957,53 +1952,4 @@ class PersonTest &lt; ActiveSupport::TestCase
1957 1952 person.user.expects(:save!).never
1958 1953 person.save!
1959 1954 end
1960   -
1961   - should 'update profile circles for a person' do
1962   - person = create_user('testuser').person
1963   - community = fast_create(Community)
1964   - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community')
1965   - circle2 = Circle.create!(:person=> person, :name => "Dota", :profile_type => 'Community')
1966   - circle3 = Circle.create!(:person=> person, :name => "Quadrado", :profile_type => 'Community')
1967   - person.follow(community, [circle, circle2])
1968   - person.update_profile_circles(community, [circle2, circle3])
1969   - assert_equivalent [circle2, circle3], ProfileFollower.with_profile(community).with_follower(person).map(&:circle)
1970   - end
1971   -
1972   - should 'a person follow a profile' do
1973   - person = create_user('testuser').person
1974   - community = fast_create(Community)
1975   - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community')
1976   - person.follow(community, circle)
1977   - assert_includes person.followed_profiles, community
1978   - end
1979   -
1980   - should 'a person follow a profile with more than one circle' do
1981   - person = create_user('testuser').person
1982   - community = fast_create(Community)
1983   - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community')
1984   - circle2 = Circle.create!(:person=> person, :name => "Dota", :profile_type => 'Community')
1985   - person.follow(community, [circle, circle2])
1986   - assert_includes person.followed_profiles, community
1987   - assert_equivalent [circle, circle2], ProfileFollower.with_profile(community).with_follower(person).map(&:circle)
1988   - end
1989   -
1990   - should 'a person unfollow a profile' do
1991   - person = create_user('testuser').person
1992   - community = fast_create(Community)
1993   - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community')
1994   - person.follow(community, circle)
1995   - person.unfollow(community)
1996   - assert_not_includes person.followed_profiles, community
1997   - end
1998   -
1999   - should 'a person remove a profile from a circle' do
2000   - person = create_user('testuser').person
2001   - community = fast_create(Community)
2002   - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community')
2003   - circle2 = Circle.create!(:person=> person, :name => "Dota", :profile_type => 'Community')
2004   - person.follow(community, [circle, circle2])
2005   - person.remove_profile_from_circle(community, circle)
2006   - assert_equivalent [circle2], ProfileFollower.with_profile(community).with_follower(person).map(&:circle)
2007   - end
2008   -
2009 1955 end
... ...
test/unit/profile_followers_test.rb
... ... @@ -1,73 +0,0 @@
1   -require_relative "../test_helper"
2   -
3   -class ProfileFollowersTest < ActiveSupport::TestCase
4   -
5   - should 'a person follow another' do
6   - p1 = create_user('person_test').person
7   - p2 = create_user('person_test_2').person
8   - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person')
9   -
10   - assert_difference 'ProfileFollower.count' do
11   - p1.follow(p2, circle)
12   - end
13   -
14   - assert_includes p2.followers(true), p1
15   - assert_not_includes p1.followers(true), p2
16   - end
17   -
18   - should 'a person unfollow another person' do
19   - p1 = create_user('person_test').person
20   - p2 = create_user('person_test_2').person
21   - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person')
22   -
23   - p1.follow(p2,circle)
24   -
25   - assert_difference 'ProfileFollower.count', -1 do
26   - p1.unfollow(p2)
27   - end
28   -
29   - assert_not_includes p2.followers(true), p1
30   - end
31   -
32   - should 'get the followed persons for a profile' do
33   - p1 = create_user('person_test').person
34   - p2 = create_user('person_test_2').person
35   - p3 = create_user('person_test_3').person
36   - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person')
37   -
38   - p1.follow(p2, circle)
39   - p1.follow(p3, circle)
40   -
41   - assert_equivalent p1.followed_profiles, [p2,p3]
42   - assert_equivalent Profile.followed_by(p1), [p2,p3]
43   - end
44   -
45   - should 'not follow same person twice' do
46   - p1 = create_user('person_test').person
47   - p2 = create_user('person_test_2').person
48   - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person')
49   -
50   - assert_difference 'ProfileFollower.count' do
51   - p1.follow(p2, circle)
52   - p1.follow(p2, circle)
53   - end
54   -
55   - assert_equivalent p1.followed_profiles, [p2]
56   - assert_equivalent p2.followers, [p1]
57   - end
58   -
59   - should 'show the correct message when a profile is followed by the same person' do
60   - p1 = create_user('person_test').person
61   - p2 = create_user('person_test_2').person
62   - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person')
63   -
64   - p1.follow(p2, circle)
65   - profile_follower = ProfileFollower.new
66   - profile_follower.circle = circle
67   - profile_follower.profile = p2
68   - profile_follower.valid?
69   -
70   - assert_includes profile_follower.errors.messages[:profile_id],
71   - "can't put a profile in the same circle twice"
72   - end
73   -end
test/unit/profile_test.rb
... ... @@ -2232,4 +2232,47 @@ class ProfileTest &lt; ActiveSupport::TestCase
2232 2232 c.add_member(p)
2233 2233 end
2234 2234 end
  2235 +
  2236 + should 'return all circles and followers, and do not repeat' do
  2237 + person1 = create_user('testperson-1').person
  2238 + person2 = create_user('testperson-2').person
  2239 + person3 = create_user('testperson-3').person
  2240 + circle1 = Circle.create!(:person => person1, :name => "Night's Watch", :profile_type => 'Person')
  2241 + circle2 = Circle.create!(:person => person1, :name => "Free Folk", :profile_type => 'Person')
  2242 + circle3 = Circle.create!(:person => person2, :name => "The Unsullied", :profile_type => 'Person')
  2243 +
  2244 + person1.follow(person3, circle1)
  2245 + person1.follow(person3, circle2)
  2246 + person2.follow(person3, circle3)
  2247 +
  2248 + assert_equivalent person3.in_circles, [circle1, circle2, circle3]
  2249 + assert_equivalent person3.followers, [person1, person2]
  2250 + end
  2251 +
  2252 + should 'return all profiles followed by a regular person' do
  2253 + person1 = create_user('testperson-1').person
  2254 + person2 = create_user('testperson-2').person
  2255 + community = fast_create(Community)
  2256 + circle1 = Circle.create!(:person => person1, :name => "Night's Watch", :profile_type => 'Person')
  2257 + circle2 = Circle.create!(:person => person1, :name => "Free Folk", :profile_type => 'Community')
  2258 +
  2259 + person1.follow(person2, circle1)
  2260 + person1.follow(community, circle2)
  2261 + assert_equivalent [person2, community], Profile.followed_by(person1)
  2262 + end
  2263 +
  2264 + should 'return all profiles followed by an external person' do
  2265 + external_person = ExternalPerson.create!(identifier: 'johnlocke', name: 'John Locke',
  2266 + source: 'anerenvironment.org', email: 'locke@island.org',
  2267 + created_at: Date.yesterday)
  2268 + person = create_user('testperson-2').person
  2269 + community = fast_create(Community)
  2270 + circle1 = Circle.create!(:person => external_person, :name => "Night's Watch", :profile_type => 'Person')
  2271 + circle2 = Circle.create!(:person => external_person, :name => "Free Folk", :profile_type => 'Community')
  2272 +
  2273 + external_person.follow(person, circle1)
  2274 + external_person.follow(community, circle2)
  2275 + assert_equivalent [person, community], Profile.followed_by(external_person)
  2276 + end
  2277 +
2235 2278 end
... ...
vendor/plugins/action_tracker/lib/action_tracker.rb
... ... @@ -95,9 +95,6 @@ module ActionTracker
95 95 return nil if user.nil?
96 96 if keep_params.is_a? Array
97 97 stored_params = {}
98   - p "&"*40
99   - p "keep_params: #{keep_params}"
100   - p "&"*40
101 98 keep_params.each do |param|
102 99 result = self
103 100 param.to_s.split('.').each { |m| result = result.send(m) }
... ... @@ -117,9 +114,6 @@ module ActionTracker
117 114 Record.new :verb => verb, :params => stored_params, :user => user
118 115 end
119 116 tracked_action.target = target || self
120   - p "*"*40
121   - p "user: #{user}"
122   - p "*"*40
123 117 user.tracked_actions << tracked_action
124 118 post_proc.call tracked_action
125 119 end
... ...