socialization 0.5.0.beta3 → 0.5.0.beta4

Sign up to get free protection for your applications and to get access to all the features.
@@ -108,6 +108,24 @@ class ActiveRecordLikeStoreTest < Test::Unit::TestCase
108
108
  end
109
109
  end
110
110
 
111
+ context "#remove_likers" do
112
+ should "delete all likers relationships for a likeable" do
113
+ @liker.like!(@likeable)
114
+ assert_equal 1, @likeable.likers(@liker.class).count
115
+ @klass.remove_likers(@likeable)
116
+ assert_equal 0, @likeable.likers(@liker.class).count
117
+ end
118
+ end
119
+
120
+ context "#remove_likeables" do
121
+ should "delete all likeables relationships for a liker" do
122
+ @liker.like!(@likeable)
123
+ assert_equal 1, @liker.likeables(@likeable.class).count
124
+ @klass.remove_likeables(@liker)
125
+ assert_equal 0, @liker.likeables(@likeable.class).count
126
+ end
127
+ end
128
+
111
129
  end
112
130
 
113
131
  # Helpers
@@ -108,6 +108,23 @@ class ActiveRecordMentionStoreTest < Test::Unit::TestCase
108
108
  end
109
109
  end
110
110
 
111
+ context "#remove_mentioners" do
112
+ should "delete all mentioners relationships for a mentionable" do
113
+ @mentioner.mention!(@mentionable)
114
+ assert_equal 1, @mentionable.mentioners(@mentioner.class).count
115
+ @klass.remove_mentioners(@mentionable)
116
+ assert_equal 0, @mentionable.mentioners(@mentioner.class).count
117
+ end
118
+ end
119
+
120
+ context "#remove_mentionables" do
121
+ should "delete all mentionables relationships for a mentioner" do
122
+ @mentioner.mention!(@mentionable)
123
+ assert_equal 1, @mentioner.mentionables(@mentionable.class).count
124
+ @klass.remove_mentionables(@mentioner)
125
+ assert_equal 0, @mentioner.mentionables(@mentionable.class).count
126
+ end
127
+ end
111
128
  end
112
129
 
113
130
  # Helpers
@@ -0,0 +1,203 @@
1
+ require File.expand_path(File.dirname(__FILE__))+'/../../test_helper'
2
+
3
+ class RedisBaseStoreTest < Test::Unit::TestCase
4
+ # Testing through RedisStores::Follow for easy testing
5
+ context "RedisStores::Base through RedisStores::Follow" do
6
+ setup do
7
+ use_redis_store
8
+ @klass = Socialization::RedisStores::Follow
9
+ @klass.touch nil
10
+ @klass.after_follow nil
11
+ @klass.after_unfollow nil
12
+ @follower1 = ImAFollower.create
13
+ @follower2 = ImAFollower.create
14
+ @followable1 = ImAFollowable.create
15
+ @followable2 = ImAFollowable.create
16
+ end
17
+
18
+ context "Stores" do
19
+ should "inherit Socialization::RedisStores::Follow" do
20
+ assert_equal Socialization::RedisStores::Follow, Socialization.follow_model
21
+ end
22
+ end
23
+
24
+ context "#follow!" do
25
+ should "create follow records" do
26
+ @klass.follow!(@follower1, @followable1)
27
+ assert_array_similarity ["#{@follower1.class}:#{@follower1.id}"], Socialization.redis.smembers(forward_key(@followable1))
28
+ assert_array_similarity ["#{@followable1.class}:#{@followable1.id}"], Socialization.redis.smembers(backward_key(@follower1))
29
+
30
+ @klass.follow!(@follower2, @followable1)
31
+ assert_array_similarity ["#{@follower1.class}:#{@follower1.id}", "#{@follower2.class}:#{@follower2.id}"], Socialization.redis.smembers(forward_key(@followable1))
32
+ assert_array_similarity ["#{@followable1.class}:#{@followable1.id}"], Socialization.redis.smembers(backward_key(@follower1))
33
+ assert_array_similarity ["#{@followable1.class}:#{@followable1.id}"], Socialization.redis.smembers(backward_key(@follower2))
34
+ end
35
+
36
+ should "touch follower when instructed" do
37
+ @klass.touch :follower
38
+ @follower1.expects(:touch).once
39
+ @followable1.expects(:touch).never
40
+ @klass.follow!(@follower1, @followable1)
41
+ end
42
+
43
+ should "touch followable when instructed" do
44
+ @klass.touch :followable
45
+ @follower1.expects(:touch).never
46
+ @followable1.expects(:touch).once
47
+ @klass.follow!(@follower1, @followable1)
48
+ end
49
+
50
+ should "touch all when instructed" do
51
+ @klass.touch :all
52
+ @follower1.expects(:touch).once
53
+ @followable1.expects(:touch).once
54
+ @klass.follow!(@follower1, @followable1)
55
+ end
56
+
57
+ should "call after follow hook" do
58
+ @klass.after_follow :after_follow
59
+ @klass.expects(:after_follow).once
60
+ @klass.follow!(@follower1, @followable1)
61
+ end
62
+
63
+ should "call after unfollow hook" do
64
+ @klass.after_follow :after_unfollow
65
+ @klass.expects(:after_unfollow).once
66
+ @klass.follow!(@follower1, @followable1)
67
+ end
68
+ end
69
+
70
+ context "#unfollow!" do
71
+ setup do
72
+ @klass.follow!(@follower1, @followable1)
73
+ end
74
+
75
+ should "remove follow records" do
76
+ @klass.unfollow!(@follower1, @followable1)
77
+ assert_empty Socialization.redis.smembers forward_key(@followable1)
78
+ assert_empty Socialization.redis.smembers backward_key(@follower1)
79
+ end
80
+ end
81
+
82
+ context "#follows?" do
83
+ should "return true when follow exists" do
84
+ @klass.follow!(@follower1, @followable1)
85
+ assert_true @klass.follows?(@follower1, @followable1)
86
+ end
87
+
88
+ should "return false when follow doesn't exist" do
89
+ assert_false @klass.follows?(@follower1, @followable1)
90
+ end
91
+ end
92
+
93
+ context "#followers" do
94
+ should "return an array of followers" do
95
+ follower1 = ImAFollower.create
96
+ follower2 = ImAFollower.create
97
+ follower1.follow!(@followable1)
98
+ follower2.follow!(@followable1)
99
+ assert_array_similarity [follower1, follower2], @klass.followers(@followable1, follower1.class)
100
+ end
101
+
102
+ should "return an array of follower ids when plucking" do
103
+ follower1 = ImAFollower.create
104
+ follower2 = ImAFollower.create
105
+ follower1.follow!(@followable1)
106
+ follower2.follow!(@followable1)
107
+ assert_array_similarity ["#{follower1.id}", "#{follower2.id}"], @klass.followers(@followable1, follower1.class, :pluck => :id)
108
+ end
109
+ end
110
+
111
+ context "#followables" do
112
+ should "return an array of followables" do
113
+ followable1 = ImAFollowable.create
114
+ followable2 = ImAFollowable.create
115
+ @follower1.follow!(followable1)
116
+ @follower1.follow!(followable2)
117
+
118
+ assert_array_similarity [followable1, followable2], @klass.followables(@follower1, followable1.class)
119
+ end
120
+
121
+ should "return an array of followables ids when plucking" do
122
+ followable1 = ImAFollowable.create
123
+ followable2 = ImAFollowable.create
124
+ @follower1.follow!(followable1)
125
+ @follower1.follow!(followable2)
126
+ assert_array_similarity ["#{followable1.id}", "#{followable2.id}"], @klass.followables(@follower1, followable1.class, :pluck => :id)
127
+ end
128
+ end
129
+
130
+ context "#generate_forward_key" do
131
+ should "return valid key when passed an object" do
132
+ assert_equal "Followers:#{@followable1.class.name}:#{@followable1.id}", forward_key(@followable1)
133
+ end
134
+
135
+ should "return valid key when passed a String" do
136
+ assert_equal "Followers:Followable:1", forward_key("Followable:1")
137
+ end
138
+ end
139
+
140
+ context "#generate_backward_key" do
141
+ should "return valid key when passed an object" do
142
+ assert_equal "Followables:#{@follower1.class.name}:#{@follower1.id}", backward_key(@follower1)
143
+ end
144
+
145
+ should "return valid key when passed a String" do
146
+ assert_equal "Followables:Follower:1", backward_key("Follower:1")
147
+ end
148
+ end
149
+
150
+ context "#remove_followers" do
151
+ should "delete all followers relationships for a followable" do
152
+ @follower1.follow!(@followable1)
153
+ @follower2.follow!(@followable1)
154
+ assert_equal 2, @followable1.followers(@follower1.class).count
155
+
156
+ @klass.remove_followers(@followable1)
157
+ assert_equal 0, @followable1.followers(@follower1.class).count
158
+ assert_empty Socialization.redis.smembers forward_key(@followable1)
159
+ assert_empty Socialization.redis.smembers backward_key(@follower1)
160
+ assert_empty Socialization.redis.smembers backward_key(@follower2)
161
+ end
162
+ end
163
+
164
+ context "#remove_followables" do
165
+ should "delete all followables relationships for a follower" do
166
+ @follower1.follow!(@followable1)
167
+ @follower1.follow!(@followable2)
168
+ assert_equal 2, @follower1.followables(@followable1.class).count
169
+
170
+ @klass.remove_followables(@follower1)
171
+ assert_equal 0, @follower1.followables(@followable1.class).count
172
+ assert_empty Socialization.redis.smembers backward_key(@followable1)
173
+ assert_empty Socialization.redis.smembers backward_key(@follower2)
174
+ assert_empty Socialization.redis.smembers forward_key(@follower1)
175
+ end
176
+ end
177
+
178
+ context "#key_type_to_type_names" do
179
+ should "return the proper arrays" do
180
+ assert_equal ['follower', 'followable'], @klass.send(:key_type_to_type_names, Socialization::RedisStores::Follow)
181
+ assert_equal ['mentioner', 'mentionable'], @klass.send(:key_type_to_type_names, Socialization::RedisStores::Mention)
182
+ assert_equal ['liker', 'likeable'], @klass.send(:key_type_to_type_names, Socialization::RedisStores::Like)
183
+ end
184
+ end
185
+ end
186
+
187
+ # Helpers
188
+ def assert_match_follower(follow_record, follower)
189
+ assert follow_record.follower_type == follower.class.to_s && follow_record.follower_id == follower.id
190
+ end
191
+
192
+ def assert_match_followable(follow_record, followable)
193
+ assert follow_record.followable_type == followable.class.to_s && follow_record.followable_id == followable.id
194
+ end
195
+
196
+ def forward_key(followable)
197
+ Socialization::RedisStores::Follow.send(:generate_forward_key, followable)
198
+ end
199
+
200
+ def backward_key(follower)
201
+ Socialization::RedisStores::Follow.send(:generate_backward_key, follower)
202
+ end
203
+ end
@@ -1,153 +1,27 @@
1
1
  require File.expand_path(File.dirname(__FILE__))+'/../../test_helper'
2
2
 
3
3
  class RedisFollowStoreTest < Test::Unit::TestCase
4
- context "RedisStores::FollowStoreTest" do
4
+ context "RedisStores::Follow" do
5
5
  setup do
6
6
  use_redis_store
7
7
  @klass = Socialization::RedisStores::Follow
8
- @klass.touch nil
9
- @klass.after_follow nil
10
- @klass.after_unfollow nil
11
- @follower = ImAFollower.create
12
- @followable = ImAFollowable.create
8
+ @base = Socialization::RedisStores::Base
13
9
  end
14
10
 
15
- context "Stores" do
16
- should "inherit Socialization::RedisStores::Follow" do
17
- assert_equal Socialization::RedisStores::Follow, Socialization.follow_model
11
+ context "method aliases" do
12
+ should "be set properly and made public" do
13
+ # TODO: Can't figure out how to test method aliases properly. The following doesn't work:
14
+ # assert @klass.method(:follow!) == @base.method(:relation!)
15
+ assert_method_public @klass, :follow!
16
+ assert_method_public @klass, :unfollow!
17
+ assert_method_public @klass, :follows?
18
+ assert_method_public @klass, :followers_relation
19
+ assert_method_public @klass, :followers
20
+ assert_method_public @klass, :followables_relation
21
+ assert_method_public @klass, :followables
22
+ assert_method_public @klass, :remove_followers
23
+ assert_method_public @klass, :remove_followables
18
24
  end
19
25
  end
20
-
21
- context "#follow!" do
22
- should "create a Follow record" do
23
- @klass.follow!(@follower, @followable)
24
- assert_equal ["#{@follower.id}"], Socialization.redis.smembers(followers_key)
25
- assert_equal ["#{@followable.id}"], Socialization.redis.smembers(followables_key)
26
- end
27
-
28
- should "touch follower when instructed" do
29
- @klass.touch :follower
30
- @follower.expects(:touch).once
31
- @followable.expects(:touch).never
32
- @klass.follow!(@follower, @followable)
33
- end
34
-
35
- should "touch followable when instructed" do
36
- @klass.touch :followable
37
- @follower.expects(:touch).never
38
- @followable.expects(:touch).once
39
- @klass.follow!(@follower, @followable)
40
- end
41
-
42
- should "touch all when instructed" do
43
- @klass.touch :all
44
- @follower.expects(:touch).once
45
- @followable.expects(:touch).once
46
- @klass.follow!(@follower, @followable)
47
- end
48
-
49
- should "call after follow hook" do
50
- @klass.after_follow :after_follow
51
- @klass.expects(:after_follow).once
52
- @klass.follow!(@follower, @followable)
53
- end
54
-
55
- should "call after unfollow hook" do
56
- @klass.after_follow :after_unfollow
57
- @klass.expects(:after_unfollow).once
58
- @klass.follow!(@follower, @followable)
59
- end
60
- end
61
-
62
- context "#follows?" do
63
- should "return true when follow exists" do
64
- Socialization.redis.sadd followers_key, @follower.id
65
- Socialization.redis.sadd followables_key, @followable.id
66
- assert_true @klass.follows?(@follower, @followable)
67
- end
68
-
69
- should "return false when follow doesn't exist" do
70
- assert_false @klass.follows?(@follower, @followable)
71
- end
72
- end
73
-
74
- context "#followers" do
75
- should "return an array of followers" do
76
- follower1 = ImAFollower.create
77
- follower2 = ImAFollower.create
78
- follower1.follow!(@followable)
79
- follower2.follow!(@followable)
80
- assert_array_similarity [follower1, follower2], @klass.followers(@followable, follower1.class)
81
- end
82
-
83
- should "return an array of follower ids when plucking" do
84
- follower1 = ImAFollower.create
85
- follower2 = ImAFollower.create
86
- follower1.follow!(@followable)
87
- follower2.follow!(@followable)
88
- assert_array_similarity [follower1.id, follower2.id], @klass.followers(@followable, follower1.class, :pluck => :id)
89
- end
90
- end
91
-
92
- context "#followables" do
93
- should "return an array of followables" do
94
- followable1 = ImAFollowable.create
95
- followable2 = ImAFollowable.create
96
- @follower.follow!(followable1)
97
- @follower.follow!(followable2)
98
-
99
- assert_array_similarity [followable1, followable2], @klass.followables(@follower, followable1.class)
100
- end
101
-
102
- should "return an array of followables ids when plucking" do
103
- followable1 = ImAFollowable.create
104
- followable2 = ImAFollowable.create
105
- @follower.follow!(followable1)
106
- @follower.follow!(followable2)
107
- assert_array_similarity [followable1.id, followable2.id], @klass.followables(@follower, followable1.class, :pluck => :id)
108
- end
109
- end
110
-
111
- context "#generate_followers_key" do
112
- should "return valid key when passed objects" do
113
- assert_equal "Followers:ImAFollowable:#{@followable.id}:ImAFollower", followers_key(@follower, @followable)
114
- end
115
-
116
- should "return valid key when follower is a class" do
117
- assert_equal "Followers:ImAFollowable:#{@followable.id}:ImAFollower", followers_key(@follower.class, @followable)
118
- end
119
- end
120
-
121
- context "#generate_followables_key" do
122
- should "return valid key when passed objects" do
123
- assert_equal "Followables:ImAFollower:#{@follower.id}:ImAFollowable", followables_key(@follower, @followable)
124
- end
125
-
126
- should "return valid key when followable is a class" do
127
- assert_equal "Followables:ImAFollower:#{@follower.id}:ImAFollowable", followables_key(@follower, @followable.class)
128
- end
129
- end
130
-
131
- end
132
-
133
- # Helpers
134
- def assert_match_follower(follow_record, follower)
135
- assert follow_record.follower_type == follower.class.to_s && follow_record.follower_id == follower.id
136
- end
137
-
138
- def assert_match_followable(follow_record, followable)
139
- assert follow_record.followable_type == followable.class.to_s && follow_record.followable_id == followable.id
140
- end
141
-
142
- def followers_key(follower = nil, followable = nil)
143
- follower ||= @follower
144
- followable ||= @followable
145
- @klass.send(:generate_followers_key, follower, followable)
146
- end
147
-
148
- def followables_key(follower = nil, followable = nil)
149
- follower ||= @follower
150
- followable ||= @followable
151
- @klass.send(:generate_followables_key, follower, followable)
152
26
  end
153
- end
27
+ end
@@ -1,153 +1,25 @@
1
1
  require File.expand_path(File.dirname(__FILE__))+'/../../test_helper'
2
2
 
3
3
  class RedisLikeStoreTest < Test::Unit::TestCase
4
- context "RedisStores::LikeStoreTest" do
4
+ context "RedisStores::Like" do
5
5
  setup do
6
6
  use_redis_store
7
7
  @klass = Socialization::RedisStores::Like
8
- @klass.touch nil
9
- @klass.after_like nil
10
- @klass.after_unlike nil
11
- @liker = ImALiker.create
12
- @likeable = ImALikeable.create
8
+ @base = Socialization::RedisStores::Base
13
9
  end
14
10
 
15
- context "Stores" do
16
- should "inherit Socialization::RedisStores::Like" do
17
- assert_equal Socialization::RedisStores::Like, Socialization.like_model
11
+ context "method aliases" do
12
+ should "be set properly and made public" do
13
+ assert_method_public @klass, :like!
14
+ assert_method_public @klass, :unlike!
15
+ assert_method_public @klass, :likes?
16
+ assert_method_public @klass, :likers_relation
17
+ assert_method_public @klass, :likers
18
+ assert_method_public @klass, :likeables_relation
19
+ assert_method_public @klass, :likeables
20
+ assert_method_public @klass, :remove_likers
21
+ assert_method_public @klass, :remove_likeables
18
22
  end
19
23
  end
20
-
21
- context "#like!" do
22
- should "create a Like record" do
23
- @klass.like!(@liker, @likeable)
24
- assert_equal ["#{@liker.id}"], Socialization.redis.smembers(likers_key)
25
- assert_equal ["#{@likeable.id}"], Socialization.redis.smembers(likeables_key)
26
- end
27
-
28
- should "touch liker when instructed" do
29
- @klass.touch :liker
30
- @liker.expects(:touch).once
31
- @likeable.expects(:touch).never
32
- @klass.like!(@liker, @likeable)
33
- end
34
-
35
- should "touch likeable when instructed" do
36
- @klass.touch :likeable
37
- @liker.expects(:touch).never
38
- @likeable.expects(:touch).once
39
- @klass.like!(@liker, @likeable)
40
- end
41
-
42
- should "touch all when instructed" do
43
- @klass.touch :all
44
- @liker.expects(:touch).once
45
- @likeable.expects(:touch).once
46
- @klass.like!(@liker, @likeable)
47
- end
48
-
49
- should "call after like hook" do
50
- @klass.after_like :after_like
51
- @klass.expects(:after_like).once
52
- @klass.like!(@liker, @likeable)
53
- end
54
-
55
- should "call after unlike hook" do
56
- @klass.after_like :after_unlike
57
- @klass.expects(:after_unlike).once
58
- @klass.like!(@liker, @likeable)
59
- end
60
- end
61
-
62
- context "#likes?" do
63
- should "return true when like exists" do
64
- Socialization.redis.sadd likers_key, @liker.id
65
- Socialization.redis.sadd likeables_key, @likeable.id
66
- assert_true @klass.likes?(@liker, @likeable)
67
- end
68
-
69
- should "return false when like doesn't exist" do
70
- assert_false @klass.likes?(@liker, @likeable)
71
- end
72
- end
73
-
74
- context "#likers" do
75
- should "return an array of likers" do
76
- liker1 = ImALiker.create
77
- liker2 = ImALiker.create
78
- liker1.like!(@likeable)
79
- liker2.like!(@likeable)
80
- assert_array_similarity [liker1, liker2], @klass.likers(@likeable, liker1.class)
81
- end
82
-
83
- should "return an array of liker ids when plucking" do
84
- liker1 = ImALiker.create
85
- liker2 = ImALiker.create
86
- liker1.like!(@likeable)
87
- liker2.like!(@likeable)
88
- assert_array_similarity [liker1.id, liker2.id], @klass.likers(@likeable, liker1.class, :pluck => :id)
89
- end
90
- end
91
-
92
- context "#likeables" do
93
- should "return an array of likeables" do
94
- likeable1 = ImALikeable.create
95
- likeable2 = ImALikeable.create
96
- @liker.like!(likeable1)
97
- @liker.like!(likeable2)
98
-
99
- assert_array_similarity [likeable1, likeable2], @klass.likeables(@liker, likeable1.class)
100
- end
101
-
102
- should "return an array of likeables ids when plucking" do
103
- likeable1 = ImALikeable.create
104
- likeable2 = ImALikeable.create
105
- @liker.like!(likeable1)
106
- @liker.like!(likeable2)
107
- assert_array_similarity [likeable1.id, likeable2.id], @klass.likeables(@liker, likeable1.class, :pluck => :id)
108
- end
109
- end
110
-
111
- context "#generate_likers_key" do
112
- should "return valid key when passed objects" do
113
- assert_equal "Likers:ImALikeable:#{@likeable.id}:ImALiker", likers_key(@liker, @likeable)
114
- end
115
-
116
- should "return valid key when liker is a class" do
117
- assert_equal "Likers:ImALikeable:#{@likeable.id}:ImALiker", likers_key(@liker.class, @likeable)
118
- end
119
- end
120
-
121
- context "#generate_likeables_key" do
122
- should "return valid key when passed objects" do
123
- assert_equal "Likeables:ImALiker:#{@liker.id}:ImALikeable", likeables_key(@liker, @likeable)
124
- end
125
-
126
- should "return valid key when likeable is a class" do
127
- assert_equal "Likeables:ImALiker:#{@liker.id}:ImALikeable", likeables_key(@liker, @likeable.class)
128
- end
129
- end
130
-
131
- end
132
-
133
- # Helpers
134
- def assert_match_liker(like_record, liker)
135
- assert like_record.liker_type == liker.class.to_s && like_record.liker_id == liker.id
136
- end
137
-
138
- def assert_match_likeable(like_record, likeable)
139
- assert like_record.likeable_type == likeable.class.to_s && like_record.likeable_id == likeable.id
140
- end
141
-
142
- def likers_key(liker = nil, likeable = nil)
143
- liker ||= @liker
144
- likeable ||= @likeable
145
- @klass.send(:generate_likers_key, liker, likeable)
146
- end
147
-
148
- def likeables_key(liker = nil, likeable = nil)
149
- liker ||= @liker
150
- likeable ||= @likeable
151
- @klass.send(:generate_likeables_key, liker, likeable)
152
24
  end
153
- end
25
+ end