Merge Request #7

Open
noosfero-plugins/gamification!7
Created by Hugo Melo

Merit callback moved to delayed_job

Assignee: Victor Costa
Milestone: None
This can't be merged automatically, even if it could be merged you don't have the permission to do so.
This can be merged automatically but you don't have the permission to do so.
Commits (1)
2 participants
lib/merit_ext.rb
... ... @@ -43,7 +43,7 @@ module Merit
43 43 module ClassMethods
44 44  
45 45 def has_merit_actions(options = {})
46   - after_create { |obj| obj.new_merit_action(:create, options) }
  46 + after_create { |obj| obj.delay.new_merit_action(:create, options) }
47 47 before_destroy { |obj| obj.new_merit_action(:destroy, options) }
48 48 end
49 49  
... ...
test/unit/api_test.rb
... ... @@ -56,7 +56,7 @@ class APITest < ActiveSupport::TestCase
56 56 another_person.save
57 57 another_person.add_badge(badge.id)
58 58 get "/api/v1/gamification_plugin/people/#{another_person.id}/badges?#{params.to_query}"
59   - json = JSON.parse(last_response.body)
  59 + JSON.parse(last_response.body)
60 60 assert_equal 404, last_response.status
61 61 end
62 62  
... ... @@ -80,6 +80,8 @@ class APITest < ActiveSupport::TestCase
80 80 article = create(TextArticle, :profile_id => @person.id, :author => @person)
81 81 create(Comment, :source_id => article.id, :author => fast_create(Person))
82 82  
  83 + process_delayed_job_queue
  84 +
83 85 get "/api/v1/gamification_plugin/my/points?#{params.to_query}"
84 86 json = JSON.parse(last_response.body)
85 87 assert_equal default_point_weight(:article_author) + default_point_weight(:comment_article_author), json['points']
... ... @@ -88,6 +90,9 @@ class APITest < ActiveSupport::TestCase
88 90 should 'get my points filtered by type' do
89 91 article = create(TextArticle, :profile_id => @person.id, :author => @person)
90 92 create(Comment, :source_id => article.id, :author => fast_create(Person))
  93 +
  94 + process_delayed_job_queue
  95 +
91 96 params[:type] = 'article_author'
92 97  
93 98 get "/api/v1/gamification_plugin/my/points_by_type?#{params.to_query}"
... ... @@ -100,6 +105,9 @@ class APITest < ActiveSupport::TestCase
100 105 create_point_rule_definition('article_author', community)
101 106 create(TextArticle, :profile_id => @person.id, :author => @person)
102 107 create(TextArticle, :profile_id => community.id, :author => @person)
  108 +
  109 + process_delayed_job_queue
  110 +
103 111 params[:profile] = community.identifier
104 112  
105 113 get "/api/v1/gamification_plugin/my/points_by_profile?#{params.to_query}"
... ... @@ -113,6 +121,8 @@ class APITest < ActiveSupport::TestCase
113 121 create(TextArticle, :profile_id => @person.id, :author => @person)
114 122 create(TextArticle, :profile_id => community.id, :author => @person)
115 123  
  124 + process_delayed_job_queue
  125 +
116 126 get "/api/v1/gamification_plugin/my/points_out_of_profiles?#{params.to_query}"
117 127 json = JSON.parse(last_response.body)
118 128 assert_equal 2*default_point_weight(:article_author), json['points']
... ... @@ -122,6 +132,8 @@ class APITest < ActiveSupport::TestCase
122 132 article = create(TextArticle, :profile_id => @person.id, :author => @person)
123 133 create(Comment, :source_id => article.id, :author => fast_create(Person))
124 134  
  135 + process_delayed_job_queue
  136 +
125 137 get "/api/v1/gamification_plugin/people/#{person.id}/points?#{params.to_query}"
126 138 json = JSON.parse(last_response.body)
127 139 assert_equal default_point_weight(:article_author) + default_point_weight(:comment_article_author), json['points']
... ... @@ -130,6 +142,9 @@ class APITest < ActiveSupport::TestCase
130 142 should 'get points of a person filtered by type' do
131 143 article = create(TextArticle, :profile_id => @person.id, :author => @person)
132 144 create(Comment, :source_id => article.id, :author => fast_create(Person))
  145 +
  146 + process_delayed_job_queue
  147 +
133 148 params[:type] = 'article_author'
134 149  
135 150 get "/api/v1/gamification_plugin/people/#{@person.id}/points_by_type?#{params.to_query}"
... ... @@ -142,6 +157,9 @@ class APITest < ActiveSupport::TestCase
142 157 create_point_rule_definition('article_author', community)
143 158 create(TextArticle, :profile_id => @person.id, :author => @person)
144 159 create(TextArticle, :profile_id => community.id, :author => @person)
  160 +
  161 + process_delayed_job_queue
  162 +
145 163 params[:profile] = community.identifier
146 164  
147 165 get "/api/v1/gamification_plugin/people/#{@person.id}/points_by_profile?#{params.to_query}"
... ... @@ -155,6 +173,8 @@ class APITest < ActiveSupport::TestCase
155 173 create(TextArticle, :profile_id => @person.id, :author => @person)
156 174 create(TextArticle, :profile_id => community.id, :author => @person)
157 175  
  176 + process_delayed_job_queue
  177 +
158 178 get "/api/v1/gamification_plugin/people/#{@person.id}/points_out_of_profiles?#{params.to_query}"
159 179 json = JSON.parse(last_response.body)
160 180 assert_equal 2*default_point_weight(:article_author), json['points']
... ...
test/unit/article_follower_test.rb
... ... @@ -14,9 +14,12 @@ class ArticleFollowerTest < ActiveSupport::TestCase
14 14 create_point_rule_definition('followed_article')
15 15 article = create(TextArticle, :name => 'Test', :profile => community, :author => person)
16 16  
  17 + process_delayed_job_queue
  18 +
17 19 c = GamificationPlugin::PointsCategorization.for_type(:followed_article).first
18 20 assert_difference 'article.points(:category => c.id.to_s)', c.weight do
19 21 article.person_followers << person
  22 + process_delayed_job_queue
20 23 end
21 24 end
22 25  
... ... @@ -25,9 +28,12 @@ class ArticleFollowerTest &lt; ActiveSupport::TestCase
25 28  
26 29 article = create(TextArticle, :name => 'Test', :profile => community, :author => person)
27 30  
  31 + process_delayed_job_queue
  32 +
28 33 c = GamificationPlugin::PointsCategorization.for_type(:follower).first
29 34 assert_difference 'person.points(:category => c.id.to_s)', c.weight do
30 35 article.person_followers << person
  36 + process_delayed_job_queue
31 37 end
32 38 end
33 39  
... ... @@ -36,9 +42,12 @@ class ArticleFollowerTest &lt; ActiveSupport::TestCase
36 42  
37 43 article = create(TextArticle, :name => 'Test', :profile => community, :author => person)
38 44  
  45 + process_delayed_job_queue
  46 +
39 47 c = GamificationPlugin::PointsCategorization.for_type(:followed_article_author).first
40 48 assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do
41 49 article.person_followers << person
  50 + process_delayed_job_queue
42 51 end
43 52 end
44 53  
... ... @@ -46,11 +55,18 @@ class ArticleFollowerTest &lt; ActiveSupport::TestCase
46 55 create_point_rule_definition('follower')
47 56 follower = create_user('someuser').person
48 57 article = create(TextArticle, :profile_id => community.id, :author => person)
  58 +
  59 + process_delayed_job_queue
  60 +
49 61 score_points = follower.score_points.count
50 62 points = follower.points
51 63 article.person_followers << follower
  64 + process_delayed_job_queue
  65 +
52 66 assert_equal score_points + 1, follower.score_points.count
53 67 ArticleFollower.last.destroy
  68 + process_delayed_job_queue
  69 +
54 70 assert_equal score_points + 2, follower.score_points.count
55 71 assert_equal points, follower.points
56 72 end
... ... @@ -58,9 +74,13 @@ class ArticleFollowerTest &lt; ActiveSupport::TestCase
58 74 should 'subtract merit points to article author when a user unfollow an article' do
59 75 create_point_rule_definition('follower')
60 76 article = create(TextArticle, :profile_id => community.id, :author => person)
  77 +
  78 + process_delayed_job_queue
  79 +
61 80 assert_no_difference 'person.points' do
62 81 assert_difference 'person.score_points.count' do
63 82 article.person_followers << fast_create(Person)
  83 + process_delayed_job_queue
64 84 end
65 85 assert_difference 'person.score_points.count' do
66 86 ArticleFollower.last.destroy
... ... @@ -71,11 +91,16 @@ class ArticleFollowerTest &lt; ActiveSupport::TestCase
71 91 should 'subtract merit points to article when a user unfollow an article' do
72 92 create_point_rule_definition('followed_article')
73 93 article = create(TextArticle, :profile_id => community.id, :author => person)
  94 + process_delayed_job_queue
74 95 score_points = article.score_points.count
75 96 points = article.points
76 97 article.person_followers << person
  98 + process_delayed_job_queue
  99 +
77 100 assert_equal score_points + 1, article.score_points.count
78 101 ArticleFollower.last.destroy
  102 + process_delayed_job_queue
  103 +
79 104 assert_equal score_points + 2, article.score_points.count
80 105 assert_equal points, article.points
81 106 end
... ...
test/unit/article_test.rb
... ... @@ -12,6 +12,7 @@ class ArticleTest &lt; ActiveSupport::TestCase
12 12 should 'add merit points to author when create a new article' do
13 13 create_point_rule_definition('article_author')
14 14 create(TextArticle, :profile_id => person.id, :author => person)
  15 + process_delayed_job_queue
15 16 assert_equal 1, person.score_points.count
16 17 assert person.score_points.first.action.present?
17 18 end
... ... @@ -19,8 +20,10 @@ class ArticleTest &lt; ActiveSupport::TestCase
19 20 should 'subtract merit points to author when destroy an article' do
20 21 create_point_rule_definition('article_author')
21 22 article = create(TextArticle, :profile_id => person.id, :author => person)
  23 + process_delayed_job_queue
22 24 assert_equal 1, person.score_points.count
23 25 article.destroy
  26 + process_delayed_job_queue
24 27 assert_equal 2, person.score_points.count
25 28 assert_equal 0, person.points
26 29 end
... ... @@ -30,6 +33,7 @@ class ArticleTest &lt; ActiveSupport::TestCase
30 33 GamificationPlugin.gamification_set_rules(environment)
31 34  
32 35 5.times { create(TextArticle, :profile_id => person.id, :author => person) }
  36 + process_delayed_job_queue
33 37 assert_equal 'article_author', person.badges.first.name
34 38 assert_equal 1, person.badges.first.level
35 39 end
... ... @@ -40,6 +44,8 @@ class ArticleTest &lt; ActiveSupport::TestCase
40 44 GamificationPlugin.gamification_set_rules(environment)
41 45  
42 46 10.times { create(TextArticle, :profile_id => person.id, :author => person) }
  47 + process_delayed_job_queue
  48 + sleep 4
43 49 assert_equal ['article_author'], person.badges.map(&:name).uniq
44 50 assert_equal [1, 2], person.badges.map(&:level)
45 51 end
... ... @@ -48,49 +54,59 @@ class ArticleTest &lt; ActiveSupport::TestCase
48 54 create_point_rule_definition('vote_voteable_author')
49 55 community = fast_create(Community)
50 56 article = create(TextArticle, :name => 'Test', :profile => community, :author => person)
  57 + process_delayed_job_queue
51 58  
52 59 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first
53   - assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do
54   - Vote.create!(:voter => person, :voteable => article, :vote => 1)
55   - end
  60 + points = article.author.points(:category => c.id.to_s)
  61 + Vote.create!(:voter => person, :voteable => article, :vote => 1)
  62 + process_delayed_job_queue
  63 + assert_equal article.author.points(:category => c.id.to_s), points + c.weight
56 64 end
57 65  
58 66 should 'add merit points to article when an user like it' do
59 67 create_point_rule_definition('vote_voteable')
60 68 article = create(TextArticle, :name => 'Test', :profile => person, :author => person)
  69 + process_delayed_job_queue
61 70 article = article.reload
62 71  
63 72 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable).first
64 73 assert_difference 'article.points(:category => c.id.to_s)', c.weight do
65 74 Vote.create!(:voter => person, :voteable => article, :vote => 1)
  75 + process_delayed_job_queue
66 76 end
67 77 end
68 78  
69 79 should 'add merit points to community when create a new article' do
70 80 create_point_rule_definition('article_community')
71 81 community = fast_create(Community)
  82 + process_delayed_job_queue
72 83 assert_difference 'community.score_points.count' do
73 84 create(TextArticle, :profile_id => community.id, :author => person)
  85 + process_delayed_job_queue
74 86 end
75 87 end
76 88  
77 89 should 'add merit points to voter when he likes an article' do
78 90 create_point_rule_definition('vote_voter')
79 91 article = create(TextArticle, :name => 'Test', :profile => person, :author => person)
  92 + process_delayed_job_queue
80 93  
81 94 c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first
82 95 assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do
83 96 Vote.create!(:voter => person, :voteable => article, :vote => 1)
  97 + process_delayed_job_queue
84 98 end
85 99 end
86 100  
87 101 should 'add merit points to voter when he dislikes an article' do
88 102 create_point_rule_definition('vote_voter')
89 103 article = create(TextArticle, :name => 'Test', :profile => person, :author => person)
  104 + process_delayed_job_queue
90 105  
91 106 c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first
92 107 assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do
93 108 Vote.create!(:voter => person, :voteable => article, :vote => -1)
  109 + process_delayed_job_queue
94 110 end
95 111 end
96 112  
... ... @@ -101,8 +117,10 @@ class ArticleTest &lt; ActiveSupport::TestCase
101 117 article = create(TextArticle, :name => 'Test', :profile => person, :author => person)
102 118 4.times { Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1) }
103 119 Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1)
  120 + process_delayed_job_queue
104 121 assert_equal [], person.badges
105 122 Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1)
  123 + process_delayed_job_queue
106 124 assert_equal 'positive_votes_received', person.reload.badges.first.name
107 125 end
108 126  
... ... @@ -113,8 +131,10 @@ class ArticleTest &lt; ActiveSupport::TestCase
113 131 article = create(TextArticle, :name => 'Test', :profile => person, :author => person)
114 132 4.times { Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1) }
115 133 Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1)
  134 + process_delayed_job_queue
116 135 assert_equal [], person.badges
117 136 Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1)
  137 + process_delayed_job_queue
118 138 assert_equal 'negative_votes_received', person.reload.badges.first.name
119 139 end
120 140  
... ... @@ -123,6 +143,7 @@ class ArticleTest &lt; ActiveSupport::TestCase
123 143 community = fast_create(Community)
124 144 rule = create_point_rule_definition('article_author', community)
125 145 create(TextArticle, profile_id: community.id, author_id: person.id)
  146 + process_delayed_job_queue
126 147 assert_equal rule.weight, person.points_by_profile(community.identifier)
127 148 assert person.score_points.first.action.present?
128 149 end
... ... @@ -131,8 +152,10 @@ class ArticleTest &lt; ActiveSupport::TestCase
131 152 community = fast_create(Community)
132 153 rule = create_point_rule_definition('article_author', community)
133 154 article = create(TextArticle, profile_id: community.id, author_id: person.id)
  155 + process_delayed_job_queue
134 156 assert_equal rule.weight, person.points_by_profile(community.identifier)
135 157 article.destroy
  158 + process_delayed_job_queue
136 159 assert_equal 0, person.points
137 160 end
138 161  
... ... @@ -140,10 +163,12 @@ class ArticleTest &lt; ActiveSupport::TestCase
140 163 community = fast_create(Community)
141 164 create_point_rule_definition('vote_voteable_author', community)
142 165 article = create(TextArticle, :name => 'Test', :profile => community, :author => person)
  166 + process_delayed_job_queue
143 167  
144 168 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first
145 169 assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do
146 170 Vote.create!(:voter => person, :voteable => article, :vote => 1)
  171 + process_delayed_job_queue
147 172 end
148 173 end
149 174  
... ... @@ -151,19 +176,23 @@ class ArticleTest &lt; ActiveSupport::TestCase
151 176 community = fast_create(Community)
152 177 create_point_rule_definition('vote_voteable', community)
153 178 article = create(TextArticle, :name => 'Test', :profile => community, :author => person)
  179 + process_delayed_job_queue
154 180 article = article.reload
155 181  
156 182 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable).first
157 183 assert_difference 'article.points(:category => c.id.to_s)', c.weight do
158 184 Vote.create!(:voter => person, :voteable => article, :vote => 1)
  185 + process_delayed_job_queue
159 186 end
160 187 end
161 188  
162 189 should 'add merit points to community when create a new article on community' do
163 190 community = fast_create(Community)
164 191 create_point_rule_definition('article_community')
  192 + process_delayed_job_queue
165 193 assert_difference 'community.score_points.count' do
166 194 create(TextArticle, :profile_id => community.id, :author => person)
  195 + process_delayed_job_queue
167 196 end
168 197 end
169 198  
... ... @@ -171,10 +200,12 @@ class ArticleTest &lt; ActiveSupport::TestCase
171 200 community = fast_create(Community)
172 201 create_point_rule_definition('vote_voter', community)
173 202 article = create(TextArticle, :name => 'Test', :profile => community, :author => person)
  203 + process_delayed_job_queue
174 204  
175 205 c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first
176 206 assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do
177 207 Vote.create!(:voter => person, :voteable => article, :vote => 1)
  208 + process_delayed_job_queue
178 209 end
179 210 end
180 211  
... ... @@ -182,10 +213,12 @@ class ArticleTest &lt; ActiveSupport::TestCase
182 213 community = fast_create(Community)
183 214 create_point_rule_definition('vote_voter', community)
184 215 article = create(TextArticle, :name => 'Test', :profile => community, :author => person)
  216 + process_delayed_job_queue
185 217  
186 218 c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first
187 219 assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do
188 220 Vote.create!(:voter => person, :voteable => article, :vote => -1)
  221 + process_delayed_job_queue
189 222 end
190 223 end
191 224  
... ... @@ -195,6 +228,7 @@ class ArticleTest &lt; ActiveSupport::TestCase
195 228 GamificationPlugin.gamification_set_rules(environment)
196 229  
197 230 5.times { create(TextArticle, :profile_id => organization.id, :author => person) }
  231 + process_delayed_job_queue
198 232 assert_equal 'article_author', person.badges.first.name
199 233 assert_equal 1, person.badges.first.level
200 234 end
... ... @@ -206,6 +240,7 @@ class ArticleTest &lt; ActiveSupport::TestCase
206 240 GamificationPlugin.gamification_set_rules(environment)
207 241  
208 242 5.times { create(TextArticle, :profile_id => other_organization.id, :author => person) }
  243 + process_delayed_job_queue
209 244 assert_equal [], person.badges
210 245 end
211 246  
... ...
test/unit/comment_test.rb
... ... @@ -13,14 +13,17 @@ class CommentTest &lt; ActiveSupport::TestCase
13 13 should 'add merit points to author when create a new comment' do
14 14 create_point_rule_definition('comment_author')
15 15 create(Comment, :source => article, :author_id => person.id)
  16 + process_delayed_job_queue
16 17 assert_equal 1, person.score_points.count
17 18 end
18 19  
19 20 should 'subtract merit points from author when destroy a comment' do
20 21 create_point_rule_definition('comment_author')
21 22 comment = create(Comment, :source => article, :author_id => person.id)
  23 + process_delayed_job_queue
22 24 assert_equal 1, person.score_points.count
23 25 comment.destroy
  26 + process_delayed_job_queue
24 27 assert_equal 2, person.score_points.count
25 28 assert_equal 0, person.points
26 29 end
... ... @@ -30,6 +33,7 @@ class CommentTest &lt; ActiveSupport::TestCase
30 33 GamificationPlugin.gamification_set_rules(environment)
31 34  
32 35 5.times { create(Comment, :source => article, :author_id => person.id) }
  36 + process_delayed_job_queue
33 37 assert_equal 'comment_author', person.badges.first.name
34 38 end
35 39  
... ... @@ -38,6 +42,7 @@ class CommentTest &lt; ActiveSupport::TestCase
38 42 GamificationPlugin.gamification_set_rules(environment)
39 43  
40 44 5.times { create(Comment, :source => article, :author_id => person.id) }
  45 + process_delayed_job_queue
41 46 assert_equal 'comment_received', author.badges.first.name
42 47 end
43 48  
... ... @@ -48,8 +53,10 @@ class CommentTest &lt; ActiveSupport::TestCase
48 53 comment = create(Comment, :source => article, :author_id => person.id)
49 54 4.times { Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1) }
50 55 Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1)
  56 + process_delayed_job_queue
51 57 assert_equal [], person.badges
52 58 Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1)
  59 + process_delayed_job_queue
53 60 assert_equal 'positive_votes_received', person.reload.badges.first.name
54 61 end
55 62  
... ... @@ -60,18 +67,22 @@ class CommentTest &lt; ActiveSupport::TestCase
60 67 comment = create(Comment, :source => article, :author_id => person.id)
61 68 4.times { Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) }
62 69 Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1)
  70 + process_delayed_job_queue
63 71 assert_equal [], person.badges
64 72 Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1)
  73 + process_delayed_job_queue
65 74 assert_equal 'negative_votes_received', person.reload.badges.first.name
66 75 end
67 76  
68 77 should 'add merit points to comment owner when an user like his comment' do
69 78 create_point_rule_definition('vote_voteable_author')
70 79 comment = create(Comment, :source => article, :author_id => person.id)
  80 + process_delayed_job_queue
71 81  
72 82 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first
73 83 assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do
74 84 Vote.create!(:voter => person, :voteable => comment, :vote => 1)
  85 + process_delayed_job_queue
75 86 end
76 87 end
77 88  
... ... @@ -79,20 +90,24 @@ class CommentTest &lt; ActiveSupport::TestCase
79 90 create_point_rule_definition('vote_voteable_author')
80 91 comment = create(Comment, :source => article, :author_id => author.id)
81 92 Vote.create!(:voter => person, :voteable => comment, :vote => 1)
  93 + process_delayed_job_queue
82 94  
83 95 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first
84 96 assert_difference 'comment.author.points', -1*c.weight do
85 97 Vote.where(:voteable_id => comment.id).destroy_all
  98 + process_delayed_job_queue
86 99 end
87 100 end
88 101  
89 102 should 'subtract merit points from comment owner when an user dislike his comment' do
90 103 create_point_rule_definition('vote_voteable_author')
91 104 comment = create(Comment, :source => article, :author_id => person.id)
  105 + process_delayed_job_queue
92 106  
93 107 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first
94 108 assert_difference 'comment.author.points(:category => c.id.to_s)', -1*c.weight do
95 109 Vote.create!(:voter => person, :voteable => comment, :vote => -1)
  110 + process_delayed_job_queue
96 111 end
97 112 end
98 113  
... ... @@ -100,37 +115,44 @@ class CommentTest &lt; ActiveSupport::TestCase
100 115 create_point_rule_definition('vote_voteable_author')
101 116 comment = create(Comment, :source => article, :author_id => author.id)
102 117 Vote.create!(:voter => person, :voteable => comment, :vote => -1)
  118 + process_delayed_job_queue
103 119  
104 120 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first
105 121 assert_difference 'comment.author.points', c.weight do
106 122 Vote.where(:voteable_id => comment.id).destroy_all
  123 + process_delayed_job_queue
107 124 end
108 125 end
109 126  
110 127 should 'add merit points to article author when create a new comment' do
111 128 create_point_rule_definition('comment_article_author')
112   - assert_difference 'author.score_points.count' do
113   - create(Comment, :source => article, :author_id => person.id)
114   - end
  129 + scores = author.score_points.count
  130 + create(Comment, :source => article, :author_id => person.id)
  131 + process_delayed_job_queue
  132 + assert_not_equal author.reload.score_points.count, scores
115 133 end
116 134  
117 135 should 'add merit points to voter when he likes a comment' do
118 136 create_point_rule_definition('vote_voter')
119 137 comment = create(Comment, :source => article, :author_id => person.id)
  138 + process_delayed_job_queue
120 139  
121 140 c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first
122 141 assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do
123 142 Vote.create!(:voter => person, :voteable => comment, :vote => 1)
  143 + process_delayed_job_queue
124 144 end
125 145 end
126 146  
127 147 should 'add merit points to voter when he dislikes a comment' do
128 148 create_point_rule_definition('vote_voter')
129 149 comment = create(Comment, :source => article, :author_id => person.id)
  150 + process_delayed_job_queue
130 151  
131 152 c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first
132 153 assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do
133 154 Vote.create!(:voter => person, :voteable => comment, :vote => -1)
  155 + process_delayed_job_queue
134 156 end
135 157 end
136 158  
... ... @@ -139,6 +161,7 @@ class CommentTest &lt; ActiveSupport::TestCase
139 161 c = GamificationPlugin::PointsCategorization.for_type(:comment_article).first
140 162 assert_difference 'article.points(:category => c.id.to_s)', c.weight do
141 163 create(Comment, :source => article, :author_id => person.id)
  164 + process_delayed_job_queue
142 165 end
143 166 end
144 167  
... ... @@ -146,10 +169,12 @@ class CommentTest &lt; ActiveSupport::TestCase
146 169 create_point_rule_definition('comment_community')
147 170 community = fast_create(Community)
148 171 article = create(TextileArticle, :profile_id => community.id, :author_id => author.id)
  172 + process_delayed_job_queue
149 173  
150 174 c = GamificationPlugin::PointsCategorization.for_type(:comment_community).first
151 175 assert_difference 'community.points(:category => c.id.to_s)', c.weight do
152 176 create(Comment, :source => article, :author_id => person.id)
  177 + process_delayed_job_queue
153 178 end
154 179 end
155 180  
... ... @@ -157,8 +182,10 @@ class CommentTest &lt; ActiveSupport::TestCase
157 182 should 'add merit community points to author when create a new comment in a community' do
158 183 community = fast_create(Community)
159 184 article = create(TextArticle, profile_id: community.id, author_id: person.id)
  185 + process_delayed_job_queue
160 186 rule = create_point_rule_definition('comment_author', article.profile)
161 187 create(Comment, :source => article, :author_id => person.id)
  188 + process_delayed_job_queue
162 189 assert_equal rule.weight, person.points_by_profile(article.profile.identifier)
163 190 end
164 191  
... ... @@ -167,6 +194,7 @@ class CommentTest &lt; ActiveSupport::TestCase
167 194 article = create(TextArticle, profile_id: community.id, author_id: fast_create(Person).id)
168 195 rule = create_point_rule_definition('comment_author', article.profile)
169 196 comment = create(Comment, :source => article, :author_id => person.id)
  197 + process_delayed_job_queue
170 198 assert_equal rule.weight, person.points_by_profile(article.profile.identifier)
171 199 comment.destroy
172 200 assert_equal 0, person.points_by_profile(article.profile.identifier)
... ... @@ -177,10 +205,12 @@ class CommentTest &lt; ActiveSupport::TestCase
177 205 article = create(TextArticle, profile_id: community.id, author_id: person.id)
178 206 create_point_rule_definition('vote_voteable_author', community)
179 207 comment = create(Comment, :source => article, :author_id => person.id)
  208 + process_delayed_job_queue
180 209  
181 210 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).where(profile_id: article.profile.id).first
182 211 assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do
183 212 Vote.create!(:voter => person, :voteable => comment, :vote => 1)
  213 + process_delayed_job_queue
184 214 end
185 215 end
186 216  
... ... @@ -190,6 +220,7 @@ class CommentTest &lt; ActiveSupport::TestCase
190 220 create_point_rule_definition('vote_voteable_author', community)
191 221 comment = create(Comment, :source => article, :author_id => author.id)
192 222 Vote.create!(:voter => person, :voteable => comment, :vote => 1)
  223 + process_delayed_job_queue
193 224  
194 225 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first
195 226 assert_difference 'comment.author.points_by_profile(community.identifier)', -1*c.weight do
... ... @@ -202,10 +233,12 @@ class CommentTest &lt; ActiveSupport::TestCase
202 233 article = create(TextArticle, profile_id: community.id, author_id: person.id)
203 234 create_point_rule_definition('vote_voteable_author', community)
204 235 comment = create(Comment, :source => article, :author_id => person.id)
  236 + process_delayed_job_queue
205 237  
206 238 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).where(profile_id: article.profile.id).first
207 239 assert_difference 'comment.author.points(:category => c.id.to_s)', -1*c.weight do
208 240 Vote.create!(:voter => person, :voteable => comment, :vote => -1)
  241 + process_delayed_job_queue
209 242 end
210 243 end
211 244  
... ... @@ -215,6 +248,7 @@ class CommentTest &lt; ActiveSupport::TestCase
215 248 create_point_rule_definition('vote_voteable_author', community)
216 249 comment = create(Comment, :source => article, :author_id => author.id)
217 250 Vote.create!(:voter => person, :voteable => comment, :vote => -1)
  251 + process_delayed_job_queue
218 252  
219 253 c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first
220 254 assert_difference 'comment.author.points_by_profile(community.identifier)', c.weight do
... ... @@ -225,9 +259,11 @@ class CommentTest &lt; ActiveSupport::TestCase
225 259 should 'add merit community points to article author when create a new comment inside a community' do
226 260 community = fast_create(Community)
227 261 article = create(TextArticle, profile_id: community.id, author_id: author.id)
  262 + process_delayed_job_queue
228 263 rule = create_point_rule_definition('comment_article_author', community)
229 264 assert_difference 'author.points_by_profile(community.identifier)', rule.weight do
230 265 create(Comment, :source => article, :author_id => author.id)
  266 + process_delayed_job_queue
231 267 end
232 268 end
233 269  
... ... @@ -236,10 +272,12 @@ class CommentTest &lt; ActiveSupport::TestCase
236 272 article = create(TextArticle, profile_id: community.id, author_id: person.id)
237 273 create_point_rule_definition('vote_voter')
238 274 comment = create(Comment, :source => article, :author_id => person.id)
  275 + process_delayed_job_queue
239 276  
240 277 c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first
241 278 assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do
242 279 Vote.create!(:voter => person, :voteable => comment, :vote => 1)
  280 + process_delayed_job_queue
243 281 end
244 282 end
245 283  
... ... @@ -248,20 +286,24 @@ class CommentTest &lt; ActiveSupport::TestCase
248 286 article = create(TextArticle, profile_id: community.id, author_id: person.id)
249 287 create_point_rule_definition('vote_voter')
250 288 comment = create(Comment, :source => article, :author_id => person.id)
  289 + process_delayed_job_queue
251 290  
252 291 c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first
253 292 assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do
254 293 Vote.create!(:voter => person, :voteable => comment, :vote => -1)
  294 + process_delayed_job_queue
255 295 end
256 296 end
257 297  
258 298 should 'add merit community points to source article when create a comment inside a community' do
259 299 community = fast_create(Community)
260 300 article = create(TextArticle, profile_id: community.id, author_id: person.id)
  301 + process_delayed_job_queue
261 302 create_point_rule_definition('comment_article')
262 303 c = GamificationPlugin::PointsCategorization.for_type(:comment_article).first
263 304 assert_difference 'article.points(:category => c.id.to_s)', c.weight do
264 305 create(Comment, :source => article, :author_id => person.id)
  306 + process_delayed_job_queue
265 307 end
266 308 end
267 309  
... ... @@ -269,10 +311,12 @@ class CommentTest &lt; ActiveSupport::TestCase
269 311 create_point_rule_definition('comment_community')
270 312 community = fast_create(Community)
271 313 article = create(TextileArticle, :profile_id => community.id, :author_id => author.id)
  314 + process_delayed_job_queue
272 315  
273 316 c = GamificationPlugin::PointsCategorization.for_type(:comment_community).first
274 317 assert_difference 'community.points(:category => c.id.to_s)', c.weight do
275 318 create(Comment, :source => article, :author_id => person.id)
  319 + process_delayed_job_queue
276 320 end
277 321 end
278 322  
... ... @@ -283,6 +327,7 @@ class CommentTest &lt; ActiveSupport::TestCase
283 327 article.profile = organization
284 328  
285 329 5.times { create(Comment, :source => article, :author_id => person.id) }
  330 + process_delayed_job_queue
286 331 assert_equal 'comment_author', person.badges.first.name
287 332 end
288 333  
... ...
test/unit/person_test.rb
... ... @@ -13,8 +13,10 @@ class PersonTest &lt; ActiveSupport::TestCase
13 13 GamificationPlugin.gamification_set_rules(environment)
14 14  
15 15 4.times { Vote.create!(:voter => person, :voteable => fast_create(Comment), :vote => 1) }
  16 + process_delayed_job_queue
16 17 assert_equal [], person.badges
17 18 Vote.create!(:voter => person, :voteable => fast_create(Comment), :vote => 1)
  19 + process_delayed_job_queue
18 20 assert_equal 'votes_performed', person.reload.badges.first.name
19 21 end
20 22  
... ... @@ -23,6 +25,7 @@ class PersonTest &lt; ActiveSupport::TestCase
23 25 GamificationPlugin.gamification_set_rules(environment)
24 26  
25 27 5.times { |i| person.add_friend(create_user("testuser#{i}").person) }
  28 + process_delayed_job_queue
26 29 assert_equal 'friendly', person.reload.badges.first.name
27 30 end
28 31  
... ... @@ -30,6 +33,7 @@ class PersonTest &lt; ActiveSupport::TestCase
30 33 create_point_rule_definition('friends')
31 34 other_person = create_user("testuserfriend").person
32 35 person.add_friend(other_person)
  36 + process_delayed_job_queue
33 37 c = GamificationPlugin::PointsCategorization.for_type(:friends).first
34 38 assert_equal 5, person.score_points(:category => c.id.to_s).sum(:num_points)
35 39 end
... ...
test/unit/point_rules_test.rb
... ... @@ -23,6 +23,7 @@ class PointRulesTest &lt; ActiveSupport::TestCase
23 23 person = create_user('testuser').person
24 24 create_point_rule_definition('article_author')
25 25 article = create(TextArticle, :profile_id => person.id, :author => person)
  26 + process_delayed_job_queue
26 27 url = Merit::PointRules.target_url(person.score_points.last)
27 28 assert_equal article.url, url
28 29 end
... ... @@ -32,6 +33,7 @@ class PointRulesTest &lt; ActiveSupport::TestCase
32 33 create_point_rule_definition('comment_author')
33 34 article = create(Article, :profile_id => person.id, :author => person)
34 35 comment = create(Comment, :source_id => article.id, :author => person)
  36 + process_delayed_job_queue
35 37 url = Merit::PointRules.target_url(person.score_points.last)
36 38 assert_equal comment.url, url
37 39 end
... ...
test/unit/profile_test.rb
... ... @@ -50,6 +50,7 @@ class ProfileTest &lt; ActiveSupport::TestCase
50 50 Person.any_instance.stubs(:is_profile_complete?).returns(true)
51 51 create_point_rule_definition('profile_completion', nil, {value: 0})
52 52 GamificationPlugin.gamification_set_rules(environment)
  53 + process_delayed_job_queue
53 54 assert_equal 0, person.level
54 55 assert_nothing_raised do
55 56 person.save
... ... @@ -62,8 +63,10 @@ class ProfileTest &lt; ActiveSupport::TestCase
62 63 GamificationPlugin.gamification_set_rules(environment)
63 64  
64 65 person = create_user('testuser').person
  66 + process_delayed_job_queue
65 67 assert_equal 0, person.level
66 68 create(TextArticle, :profile_id => community.id, :author => person)
  69 + process_delayed_job_queue
67 70 assert_equal 3, person.reload.level
68 71 end
69 72  
... ...