Merge Request #7
← To merge requests
From
hugomelo:merit_delayed
into
noosfero-plugins:master
Commits (1)
Showing
8 changed files
Show diff stats
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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 | ... | ... |