Commit 27f9186b0d4285c9557ae64c279259bf44469afc
1 parent
7e8e2832
Exists in
master
and in
1 other branch
refatoring unit tests
Showing
8 changed files
with
352 additions
and
49 deletions
Show diff stats
test/test_helper.rb
1 | require_relative "../../../test/test_helper" | 1 | require_relative "../../../test/test_helper" |
2 | 2 | ||
3 | -def create_merit_categorization | ||
4 | - c = fast_create(Community) | ||
5 | - Merit::PointRules::AVAILABLE_RULES.each do |name, setting| | ||
6 | - point_type = GamificationPlugin::PointsType.find_by_name name | ||
7 | - point_type = GamificationPlugin::PointsType.create name: name, description: setting['description'] if point_type.nil? | ||
8 | - profile = setting.fetch(:profile_action, true) ? c : nil | ||
9 | - GamificationPlugin::PointsCategorization.create! point_type_id: point_type.id, profile: profile, weight: setting[:default_weight] | 3 | +def create_point_rule_definition(rule_name, profile = nil, config = {}) |
4 | + rule = load_point_rule(rule_name, config) | ||
5 | + point_type = GamificationPlugin::PointsType.find_by_name rule_name | ||
6 | + point_type = GamificationPlugin::PointsType.create name: rule_name, description: rule['description'] if point_type.nil? | ||
7 | + GamificationPlugin::PointsCategorization.create! point_type_id: point_type.id, profile: profile, weight: rule[:default_weight] | ||
8 | + GamificationPlugin.gamification_set_rules(@environment) | ||
9 | +end | ||
10 | + | ||
11 | +def create_all_point_rules | ||
12 | + Merit::PointRules::AVAILABLE_RULES.map do |rule, config| | ||
13 | + create_point_rule_definition(rule) | ||
14 | + end | ||
15 | +end | ||
16 | + | ||
17 | +def load_point_rule(rule_name, config) | ||
18 | + rule_config = Merit::PointRules::AVAILABLE_RULES[rule_name.to_sym] | ||
19 | + raise "Point rule '#{rule_name}' is not available" if rule_config.nil? | ||
20 | + rule_config.merge!(config) | ||
21 | + rule_config | ||
22 | +end | ||
23 | + | ||
24 | +#person_points_debug(person) | ||
25 | +def person_points_debug(person) | ||
26 | + person.score_points.map do |sp| | ||
27 | + puts 'Ponto:' | ||
28 | + puts sp.inspect | ||
29 | + puts sp.action.inspect | ||
30 | + puts sp.score.inspect | ||
31 | + puts GamificationPlugin::PointsCategorization.find(sp.score.category).inspect | ||
32 | + puts GamificationPlugin::PointsCategorization.find(sp.score.category).point_type.inspect | ||
10 | end | 33 | end |
11 | - c | ||
12 | -end# | 34 | +end |
test/unit/api_test.rb
@@ -7,7 +7,6 @@ class APITest < ActiveSupport::TestCase | @@ -7,7 +7,6 @@ class APITest < ActiveSupport::TestCase | ||
7 | login_api | 7 | login_api |
8 | environment = Environment.default | 8 | environment = Environment.default |
9 | environment.enable_plugin(GamificationPlugin) | 9 | environment.enable_plugin(GamificationPlugin) |
10 | - @community = create_merit_categorization | ||
11 | GamificationPlugin.gamification_set_rules(@environment) | 10 | GamificationPlugin.gamification_set_rules(@environment) |
12 | end | 11 | end |
13 | 12 |
test/unit/article_follower.rb
@@ -5,21 +5,47 @@ class ArticleTest < ActiveSupport::TestCase | @@ -5,21 +5,47 @@ class ArticleTest < ActiveSupport::TestCase | ||
5 | def setup | 5 | def setup |
6 | @person = create_user('testuser').person | 6 | @person = create_user('testuser').person |
7 | @environment = Environment.default | 7 | @environment = Environment.default |
8 | - @community = create_merit_categorization | ||
9 | - GamificationPlugin.gamification_set_rules(@environment) | 8 | + @community = fast_create(Community) |
10 | end | 9 | end |
11 | 10 | ||
12 | attr_accessor :person, :environment, :community | 11 | attr_accessor :person, :environment, :community |
13 | 12 | ||
14 | should 'add merit points to follower when it follows an article' do | 13 | should 'add merit points to follower when it follows an article' do |
15 | - article = create(TextArticle, :profile_id => community.id, :author => person) | 14 | + create_point_rule_definition('follower') |
15 | + article = create(TextArticle, :profile_id => community.id, :author => create_user('someuser').person) | ||
16 | amount = person.score_points.count | 16 | amount = person.score_points.count |
17 | article.person_followers << person | 17 | article.person_followers << person |
18 | -puts person.score_points.first.action.inspect | 18 | + article.reload |
19 | assert_equal amount + 1, person.score_points.count | 19 | assert_equal amount + 1, person.score_points.count |
20 | - assert person.score_points.first.action.present? | 20 | + last_point = person.score_points.last |
21 | + assert_equal article.article_followers.last.id, last_point.action.target_id | ||
21 | end | 22 | end |
22 | 23 | ||
24 | + should "add merit points for article's author followed by an user" do | ||
25 | + create_point_rule_definition('followed_article_author') | ||
26 | + author = create_user('someuser').person | ||
27 | + article = create(TextArticle, :profile_id => community.id, :author => author) | ||
28 | + amount = author.score_points.count | ||
29 | + article.person_followers << person | ||
30 | + assert_equal amount + 1, author.score_points.count | ||
31 | + last_point = author.score_points.last | ||
32 | + assert_equal article.article_followers.last.id, last_point.action.target_id | ||
33 | + end | ||
34 | + | ||
35 | + should "add merit points for article's author and person who follow an article at the same time" do | ||
36 | + create_point_rule_definition('follower') | ||
37 | + create_point_rule_definition('followed_article_author') | ||
38 | + author = create_user('someuser').person | ||
39 | + article = create(TextArticle, :profile_id => community.id, :author => author) | ||
40 | + amount = author.score_points.count | ||
41 | + article.person_followers << person | ||
42 | + assert_equal amount + 1, author.score_points.count | ||
43 | + last_point = author.score_points.last | ||
44 | + assert_equal article.article_followers.last.id, last_point.action.target_id | ||
45 | + assert_equal amount + 1, person.score_points.count | ||
46 | + last_point = person.score_points.last | ||
47 | + assert_equal article.article_followers.last.id, last_point.action.target_id | ||
48 | + end | ||
23 | # should 'subtract merit points to author when destroy an article' do | 49 | # should 'subtract merit points to author when destroy an article' do |
24 | # article = create(TextArticle, :profile_id => @community.id, :author => person) | 50 | # article = create(TextArticle, :profile_id => @community.id, :author => person) |
25 | # assert_equal 1, person.score_points.count | 51 | # assert_equal 1, person.score_points.count |
test/unit/article_test.rb
@@ -5,20 +5,20 @@ class ArticleTest < ActiveSupport::TestCase | @@ -5,20 +5,20 @@ class ArticleTest < ActiveSupport::TestCase | ||
5 | def setup | 5 | def setup |
6 | @person = create_user('testuser').person | 6 | @person = create_user('testuser').person |
7 | @environment = Environment.default | 7 | @environment = Environment.default |
8 | - @community = create_merit_categorization | ||
9 | - GamificationPlugin.gamification_set_rules(@environment) | ||
10 | end | 8 | end |
11 | 9 | ||
12 | - attr_accessor :person, :environment, :community | 10 | + attr_accessor :person, :environment |
13 | 11 | ||
14 | should 'add merit points to author when create a new article' do | 12 | should 'add merit points to author when create a new article' do |
15 | - create(TextArticle, :profile_id => community.id, :author => person) | 13 | + create_point_rule_definition('article_author') |
14 | + create(TextArticle, :profile_id => person.id, :author => person) | ||
16 | assert_equal 1, person.score_points.count | 15 | assert_equal 1, person.score_points.count |
17 | assert person.score_points.first.action.present? | 16 | assert person.score_points.first.action.present? |
18 | end | 17 | end |
19 | 18 | ||
20 | should 'subtract merit points to author when destroy an article' do | 19 | should 'subtract merit points to author when destroy an article' do |
21 | - article = create(TextArticle, :profile_id => @community.id, :author => person) | 20 | + create_point_rule_definition('article_author') |
21 | + article = create(TextArticle, :profile_id => person.id, :author => person) | ||
22 | assert_equal 1, person.score_points.count | 22 | assert_equal 1, person.score_points.count |
23 | article.destroy | 23 | article.destroy |
24 | assert_equal 2, person.score_points.count | 24 | assert_equal 2, person.score_points.count |
@@ -45,43 +45,50 @@ class ArticleTest < ActiveSupport::TestCase | @@ -45,43 +45,50 @@ class ArticleTest < ActiveSupport::TestCase | ||
45 | end | 45 | end |
46 | 46 | ||
47 | should 'add merit points to community article owner when an user like it' do | 47 | should 'add merit points to community article owner when an user like it' do |
48 | - article = create(TextArticle, :name => 'Test', :profile => @community, :author => person) | 48 | + create_point_rule_definition('vote_voteable_author') |
49 | + community = fast_create(Community) | ||
50 | + article = create(TextArticle, :name => 'Test', :profile => community, :author => person) | ||
49 | 51 | ||
50 | - c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).where(profile_id: @community.id).first | 52 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first |
51 | assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do | 53 | assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do |
52 | Vote.create!(:voter => person, :voteable => article, :vote => 1) | 54 | Vote.create!(:voter => person, :voteable => article, :vote => 1) |
53 | end | 55 | end |
54 | end | 56 | end |
55 | 57 | ||
56 | should 'add merit points to article when an user like it' do | 58 | should 'add merit points to article when an user like it' do |
57 | - article = create(TextArticle, :name => 'Test', :profile => @community, :author => person) | 59 | + create_point_rule_definition('vote_voteable') |
60 | + article = create(TextArticle, :name => 'Test', :profile => person, :author => person) | ||
58 | article = article.reload | 61 | article = article.reload |
59 | 62 | ||
60 | - c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable).where(profile_id: @community.id).first | 63 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable).first |
61 | assert_difference 'article.points(:category => c.id.to_s)', c.weight do | 64 | assert_difference 'article.points(:category => c.id.to_s)', c.weight do |
62 | Vote.create!(:voter => person, :voteable => article, :vote => 1) | 65 | Vote.create!(:voter => person, :voteable => article, :vote => 1) |
63 | end | 66 | end |
64 | end | 67 | end |
65 | 68 | ||
66 | should 'add merit points to community when create a new article' do | 69 | should 'add merit points to community when create a new article' do |
70 | + create_point_rule_definition('article_community') | ||
71 | + community = fast_create(Community) | ||
67 | assert_difference 'community.score_points.count' do | 72 | assert_difference 'community.score_points.count' do |
68 | - create(TextArticle, :profile_id => @community.id, :author => person) | 73 | + create(TextArticle, :profile_id => community.id, :author => person) |
69 | end | 74 | end |
70 | end | 75 | end |
71 | 76 | ||
72 | should 'add merit points to voter when he likes an article' do | 77 | should 'add merit points to voter when he likes an article' do |
73 | - article = create(TextArticle, :name => 'Test', :profile => @community, :author => person) | 78 | + create_point_rule_definition('vote_voter') |
79 | + article = create(TextArticle, :name => 'Test', :profile => person, :author => person) | ||
74 | 80 | ||
75 | - c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).where(profile_id: @community.id).first | 81 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first |
76 | assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do | 82 | assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do |
77 | Vote.create!(:voter => person, :voteable => article, :vote => 1) | 83 | Vote.create!(:voter => person, :voteable => article, :vote => 1) |
78 | end | 84 | end |
79 | end | 85 | end |
80 | 86 | ||
81 | should 'add merit points to voter when he dislikes an article' do | 87 | should 'add merit points to voter when he dislikes an article' do |
82 | - article = create(TextArticle, :name => 'Test', :profile => @community, :author => person) | 88 | + create_point_rule_definition('vote_voter') |
89 | + article = create(TextArticle, :name => 'Test', :profile => person, :author => person) | ||
83 | 90 | ||
84 | - c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).where(profile_id: @community.id).first | 91 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first |
85 | assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do | 92 | assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do |
86 | Vote.create!(:voter => person, :voteable => article, :vote => -1) | 93 | Vote.create!(:voter => person, :voteable => article, :vote => -1) |
87 | end | 94 | end |
@@ -111,4 +118,108 @@ class ArticleTest < ActiveSupport::TestCase | @@ -111,4 +118,108 @@ class ArticleTest < ActiveSupport::TestCase | ||
111 | assert_equal 'negative_votes_received', person.reload.badges.first.name | 118 | assert_equal 'negative_votes_received', person.reload.badges.first.name |
112 | end | 119 | end |
113 | 120 | ||
121 | +# FIXME Put the tests above to works in profile context. | ||
122 | +# They are the same tests of the general context | ||
123 | +# | ||
124 | +# should 'add merit points to author when create a new article' do | ||
125 | +# create(TextArticle, :profile_id => community.id, :author => person) | ||
126 | +# assert_equal 1, person.score_points.count | ||
127 | +# assert person.score_points.first.action.present? | ||
128 | +# end | ||
129 | +# | ||
130 | +# should 'subtract merit points to author when destroy an article' do | ||
131 | +# article = create(TextArticle, :profile_id => @community.id, :author => person) | ||
132 | +# assert_equal 1, person.score_points.count | ||
133 | +# article.destroy | ||
134 | +# assert_equal 2, person.score_points.count | ||
135 | +# assert_equal 0, person.points | ||
136 | +# end | ||
137 | +# | ||
138 | +# should 'add merit badge to author when create 5 new articles' do | ||
139 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'article_author', :level => 1) | ||
140 | +# GamificationPlugin.gamification_set_rules(environment) | ||
141 | +# | ||
142 | +# 5.times { create(TextArticle, :profile_id => person.id, :author => person) } | ||
143 | +# assert_equal 'article_author', person.badges.first.name | ||
144 | +# assert_equal 1, person.badges.first.level | ||
145 | +# end | ||
146 | +# | ||
147 | +# should 'add merit badge level 2 to author when create 10 new articles' do | ||
148 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'article_author', :level => 1) | ||
149 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'article_author', :level => 2, :custom_fields => {:threshold => 10}) | ||
150 | +# GamificationPlugin.gamification_set_rules(environment) | ||
151 | +# | ||
152 | +# 10.times { create(TextArticle, :profile_id => person.id, :author => person) } | ||
153 | +# assert_equal ['article_author'], person.badges.map(&:name).uniq | ||
154 | +# assert_equal [1, 2], person.badges.map(&:level) | ||
155 | +# end | ||
156 | +# | ||
157 | +# should 'add merit points to community article owner when an user like it' do | ||
158 | +# article = create(TextArticle, :name => 'Test', :profile => @community, :author => person) | ||
159 | +# | ||
160 | +# c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).where(profile_id: @community.id).first | ||
161 | +# assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do | ||
162 | +# Vote.create!(:voter => person, :voteable => article, :vote => 1) | ||
163 | +# end | ||
164 | +# end | ||
165 | +# | ||
166 | +# should 'add merit points to article when an user like it' do | ||
167 | +# article = create(TextArticle, :name => 'Test', :profile => @community, :author => person) | ||
168 | +# article = article.reload | ||
169 | +# | ||
170 | +# c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable).where(profile_id: @community.id).first | ||
171 | +# assert_difference 'article.points(:category => c.id.to_s)', c.weight do | ||
172 | +# Vote.create!(:voter => person, :voteable => article, :vote => 1) | ||
173 | +# end | ||
174 | +# end | ||
175 | +# | ||
176 | +# should 'add merit points to community when create a new article' do | ||
177 | +# assert_difference 'community.score_points.count' do | ||
178 | +# create(TextArticle, :profile_id => @community.id, :author => person) | ||
179 | +# end | ||
180 | +# end | ||
181 | +# | ||
182 | +# should 'add merit points to voter when he likes an article' do | ||
183 | +# article = create(TextArticle, :name => 'Test', :profile => @community, :author => person) | ||
184 | +# | ||
185 | +# c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).where(profile_id: @community.id).first | ||
186 | +# assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do | ||
187 | +# Vote.create!(:voter => person, :voteable => article, :vote => 1) | ||
188 | +# end | ||
189 | +# end | ||
190 | +# | ||
191 | +# should 'add merit points to voter when he dislikes an article' do | ||
192 | +# article = create(TextArticle, :name => 'Test', :profile => @community, :author => person) | ||
193 | +# | ||
194 | +# c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).where(profile_id: @community.id).first | ||
195 | +# assert_difference 'article.author.points(:category => c.id.to_s)', c.weight do | ||
196 | +# Vote.create!(:voter => person, :voteable => article, :vote => -1) | ||
197 | +# end | ||
198 | +# end | ||
199 | +# | ||
200 | +# should 'add badge to author when users like his article' do | ||
201 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'positive_votes_received') | ||
202 | +# GamificationPlugin.gamification_set_rules(environment) | ||
203 | +# | ||
204 | +# article = create(TextArticle, :name => 'Test', :profile => person, :author => person) | ||
205 | +# 4.times { Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1) } | ||
206 | +# Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1) | ||
207 | +# assert_equal [], person.badges | ||
208 | +# Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1) | ||
209 | +# assert_equal 'positive_votes_received', person.reload.badges.first.name | ||
210 | +# end | ||
211 | +# | ||
212 | +# should 'add badge to author when users dislike his article' do | ||
213 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'negative_votes_received') | ||
214 | +# GamificationPlugin.gamification_set_rules(environment) | ||
215 | +# | ||
216 | +# article = create(TextArticle, :name => 'Test', :profile => person, :author => person) | ||
217 | +# 4.times { Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1) } | ||
218 | +# Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1) | ||
219 | +# assert_equal [], person.badges | ||
220 | +# Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1) | ||
221 | +# assert_equal 'negative_votes_received', person.reload.badges.first.name | ||
222 | +# end | ||
223 | +# | ||
224 | + | ||
114 | end | 225 | end |
test/unit/comment_test.rb
@@ -5,19 +5,19 @@ class CommentTest < ActiveSupport::TestCase | @@ -5,19 +5,19 @@ class CommentTest < ActiveSupport::TestCase | ||
5 | def setup | 5 | def setup |
6 | @person = create_user('testuser').person | 6 | @person = create_user('testuser').person |
7 | @author = create_user('testauthoruser').person | 7 | @author = create_user('testauthoruser').person |
8 | - @community = create_merit_categorization | ||
9 | - @article = create(TextileArticle, :profile_id => @community.id, :author_id => @author.id) | 8 | + @article = create(TextileArticle, :profile_id => @person.id, :author_id => @author.id) |
10 | @environment = Environment.default | 9 | @environment = Environment.default |
11 | - GamificationPlugin.gamification_set_rules(@environment) | ||
12 | end | 10 | end |
13 | - attr_accessor :person, :article, :environment, :author, :community | 11 | + attr_accessor :person, :article, :environment, :author |
14 | 12 | ||
15 | should 'add merit points to author when create a new comment' do | 13 | should 'add merit points to author when create a new comment' do |
14 | + create_point_rule_definition('comment_author') | ||
16 | create(Comment, :source => article, :author_id => person.id) | 15 | create(Comment, :source => article, :author_id => person.id) |
17 | assert_equal 1, person.score_points.count | 16 | assert_equal 1, person.score_points.count |
18 | end | 17 | end |
19 | 18 | ||
20 | should 'subtract merit points from author when destroy a comment' do | 19 | should 'subtract merit points from author when destroy a comment' do |
20 | + create_point_rule_definition('comment_author') | ||
21 | comment = create(Comment, :source => article, :author_id => person.id) | 21 | comment = create(Comment, :source => article, :author_id => person.id) |
22 | assert_equal 1, person.score_points.count | 22 | assert_equal 1, person.score_points.count |
23 | comment.destroy | 23 | comment.destroy |
@@ -66,79 +66,225 @@ class CommentTest < ActiveSupport::TestCase | @@ -66,79 +66,225 @@ class CommentTest < ActiveSupport::TestCase | ||
66 | end | 66 | end |
67 | 67 | ||
68 | should 'add merit points to comment owner when an user like his comment' do | 68 | should 'add merit points to comment owner when an user like his comment' do |
69 | + create_point_rule_definition('vote_voteable_author') | ||
69 | comment = create(Comment, :source => article, :author_id => person.id) | 70 | comment = create(Comment, :source => article, :author_id => person.id) |
70 | 71 | ||
71 | - c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).where(profile_id: article.profile.id).first | 72 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first |
72 | assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do | 73 | assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do |
73 | Vote.create!(:voter => person, :voteable => comment, :vote => 1) | 74 | Vote.create!(:voter => person, :voteable => comment, :vote => 1) |
74 | end | 75 | end |
75 | end | 76 | end |
76 | 77 | ||
77 | should 'subtract merit points to comment owner when an user unlike his comment' do | 78 | should 'subtract merit points to comment owner when an user unlike his comment' do |
79 | + create_point_rule_definition('vote_voteable_author') | ||
78 | comment = create(Comment, :source => article, :author_id => author.id) | 80 | comment = create(Comment, :source => article, :author_id => author.id) |
79 | Vote.create!(:voter => person, :voteable => comment, :vote => 1) | 81 | Vote.create!(:voter => person, :voteable => comment, :vote => 1) |
80 | 82 | ||
81 | - assert_difference 'comment.author.points', -20 do | 83 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first |
84 | + assert_difference 'comment.author.points', -1*c.weight do | ||
82 | Vote.where(:voteable_id => comment.id).destroy_all | 85 | Vote.where(:voteable_id => comment.id).destroy_all |
83 | end | 86 | end |
84 | end | 87 | end |
85 | 88 | ||
86 | should 'subtract merit points from comment owner when an user dislike his comment' do | 89 | should 'subtract merit points from comment owner when an user dislike his comment' do |
90 | + create_point_rule_definition('vote_voteable_author') | ||
87 | comment = create(Comment, :source => article, :author_id => person.id) | 91 | comment = create(Comment, :source => article, :author_id => person.id) |
88 | 92 | ||
89 | - c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).where(profile_id: article.profile.id).first | 93 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first |
90 | assert_difference 'comment.author.points(:category => c.id.to_s)', -1*c.weight do | 94 | assert_difference 'comment.author.points(:category => c.id.to_s)', -1*c.weight do |
91 | Vote.create!(:voter => person, :voteable => comment, :vote => -1) | 95 | Vote.create!(:voter => person, :voteable => comment, :vote => -1) |
92 | end | 96 | end |
93 | end | 97 | end |
94 | 98 | ||
95 | should 'add merit points from comment owner when an user remove a dislike in his comment' do | 99 | should 'add merit points from comment owner when an user remove a dislike in his comment' do |
100 | + create_point_rule_definition('vote_voteable_author') | ||
96 | comment = create(Comment, :source => article, :author_id => author.id) | 101 | comment = create(Comment, :source => article, :author_id => author.id) |
97 | Vote.create!(:voter => person, :voteable => comment, :vote => -1) | 102 | Vote.create!(:voter => person, :voteable => comment, :vote => -1) |
98 | 103 | ||
99 | - assert_difference 'comment.author.points', 20 do | 104 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).first |
105 | + assert_difference 'comment.author.points', c.weight do | ||
100 | Vote.where(:voteable_id => comment.id).destroy_all | 106 | Vote.where(:voteable_id => comment.id).destroy_all |
101 | end | 107 | end |
102 | end | 108 | end |
103 | 109 | ||
104 | should 'add merit points to article author when create a new comment' do | 110 | should 'add merit points to article author when create a new comment' do |
111 | + create_point_rule_definition('comment_article_author') | ||
105 | assert_difference 'author.score_points.count' do | 112 | assert_difference 'author.score_points.count' do |
106 | create(Comment, :source => article, :author_id => person.id) | 113 | create(Comment, :source => article, :author_id => person.id) |
107 | end | 114 | end |
108 | end | 115 | end |
109 | 116 | ||
110 | should 'add merit points to voter when he likes a comment' do | 117 | should 'add merit points to voter when he likes a comment' do |
118 | + create_point_rule_definition('vote_voter') | ||
111 | comment = create(Comment, :source => article, :author_id => person.id) | 119 | comment = create(Comment, :source => article, :author_id => person.id) |
112 | 120 | ||
113 | - c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).where(profile_id: community.id).first | 121 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first |
114 | assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do | 122 | assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do |
115 | Vote.create!(:voter => person, :voteable => comment, :vote => 1) | 123 | Vote.create!(:voter => person, :voteable => comment, :vote => 1) |
116 | end | 124 | end |
117 | end | 125 | end |
118 | 126 | ||
119 | should 'add merit points to voter when he dislikes a comment' do | 127 | should 'add merit points to voter when he dislikes a comment' do |
128 | + create_point_rule_definition('vote_voter') | ||
120 | comment = create(Comment, :source => article, :author_id => person.id) | 129 | comment = create(Comment, :source => article, :author_id => person.id) |
121 | 130 | ||
122 | - c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).where(profile_id: community.id).first | 131 | + c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).first |
123 | assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do | 132 | assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do |
124 | Vote.create!(:voter => person, :voteable => comment, :vote => -1) | 133 | Vote.create!(:voter => person, :voteable => comment, :vote => -1) |
125 | end | 134 | end |
126 | end | 135 | end |
127 | 136 | ||
128 | should 'add merit points to source article when create a comment' do | 137 | should 'add merit points to source article when create a comment' do |
129 | - c = GamificationPlugin::PointsCategorization.for_type(:comment_article).where(profile_id: community.id).first | 138 | + create_point_rule_definition('comment_article') |
139 | + c = GamificationPlugin::PointsCategorization.for_type(:comment_article).first | ||
130 | assert_difference 'article.points(:category => c.id.to_s)', c.weight do | 140 | assert_difference 'article.points(:category => c.id.to_s)', c.weight do |
131 | create(Comment, :source => article, :author_id => person.id) | 141 | create(Comment, :source => article, :author_id => person.id) |
132 | end | 142 | end |
133 | end | 143 | end |
134 | 144 | ||
135 | should 'add merit points to source community when create a comment' do | 145 | should 'add merit points to source community when create a comment' do |
146 | + create_point_rule_definition('comment_community') | ||
147 | + community = fast_create(Community) | ||
136 | article = create(TextileArticle, :profile_id => community.id, :author_id => author.id) | 148 | article = create(TextileArticle, :profile_id => community.id, :author_id => author.id) |
137 | 149 | ||
138 | - c = GamificationPlugin::PointsCategorization.for_type(:comment_community).where(profile_id: community.id).first | 150 | + c = GamificationPlugin::PointsCategorization.for_type(:comment_community).first |
139 | assert_difference 'community.points(:category => c.id.to_s)', c.weight do | 151 | assert_difference 'community.points(:category => c.id.to_s)', c.weight do |
140 | create(Comment, :source => article, :author_id => person.id) | 152 | create(Comment, :source => article, :author_id => person.id) |
141 | end | 153 | end |
142 | end | 154 | end |
143 | 155 | ||
156 | + | ||
157 | +# FIXME Put the tests above to works in profile context. | ||
158 | +# They are the same tests of the general context | ||
159 | +# | ||
160 | +# should 'add merit points to author when create a new comment' do | ||
161 | +# create(Comment, :source => article, :author_id => person.id) | ||
162 | +# assert_equal 1, person.score_points.count | ||
163 | +# end | ||
164 | +# | ||
165 | +# should 'subtract merit points from author when destroy a comment' do | ||
166 | +# comment = create(Comment, :source => article, :author_id => person.id) | ||
167 | +# assert_equal 1, person.score_points.count | ||
168 | +# comment.destroy | ||
169 | +# assert_equal 2, person.score_points.count | ||
170 | +# assert_equal 0, person.points | ||
171 | +# end | ||
172 | +# | ||
173 | +# should 'add merit badge to author when create 5 new comments' do | ||
174 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'comment_author') | ||
175 | +# GamificationPlugin.gamification_set_rules(environment) | ||
176 | +# | ||
177 | +# 5.times { create(Comment, :source => article, :author_id => person.id) } | ||
178 | +# assert_equal 'comment_author', person.badges.first.name | ||
179 | +# end | ||
180 | +# | ||
181 | +# should 'add merit badge to source author when create 5 new comments' do | ||
182 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'comment_received') | ||
183 | +# GamificationPlugin.gamification_set_rules(environment) | ||
184 | +# | ||
185 | +# 5.times { create(Comment, :source => article, :author_id => person.id) } | ||
186 | +# assert_equal 'comment_received', author.badges.first.name | ||
187 | +# end | ||
188 | +# | ||
189 | +# should 'add badge to author when users like his comment' do | ||
190 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'positive_votes_received') | ||
191 | +# GamificationPlugin.gamification_set_rules(environment) | ||
192 | +# | ||
193 | +# comment = create(Comment, :source => article, :author_id => person.id) | ||
194 | +# 4.times { Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1) } | ||
195 | +# Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) | ||
196 | +# assert_equal [], person.badges | ||
197 | +# Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1) | ||
198 | +# assert_equal 'positive_votes_received', person.reload.badges.first.name | ||
199 | +# end | ||
200 | +# | ||
201 | +# should 'add badge to author when users dislike his comment' do | ||
202 | +# GamificationPlugin::Badge.create!(:owner => environment, :name => 'negative_votes_received') | ||
203 | +# GamificationPlugin.gamification_set_rules(environment) | ||
204 | +# | ||
205 | +# comment = create(Comment, :source => article, :author_id => person.id) | ||
206 | +# 4.times { Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) } | ||
207 | +# Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1) | ||
208 | +# assert_equal [], person.badges | ||
209 | +# Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) | ||
210 | +# assert_equal 'negative_votes_received', person.reload.badges.first.name | ||
211 | +# end | ||
212 | +# | ||
213 | +# should 'add merit points to comment owner when an user like his comment' do | ||
214 | +# comment = create(Comment, :source => article, :author_id => person.id) | ||
215 | +# | ||
216 | +# c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).where(profile_id: article.profile.id).first | ||
217 | +# assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do | ||
218 | +# Vote.create!(:voter => person, :voteable => comment, :vote => 1) | ||
219 | +# end | ||
220 | +# end | ||
221 | +# | ||
222 | +# should 'subtract merit points to comment owner when an user unlike his comment' do | ||
223 | +# comment = create(Comment, :source => article, :author_id => author.id) | ||
224 | +# Vote.create!(:voter => person, :voteable => comment, :vote => 1) | ||
225 | +# | ||
226 | +# assert_difference 'comment.author.points', -20 do | ||
227 | +# Vote.where(:voteable_id => comment.id).destroy_all | ||
228 | +# end | ||
229 | +# end | ||
230 | +# | ||
231 | +# should 'subtract merit points from comment owner when an user dislike his comment' do | ||
232 | +# comment = create(Comment, :source => article, :author_id => person.id) | ||
233 | +# | ||
234 | +# c = GamificationPlugin::PointsCategorization.for_type(:vote_voteable_author).where(profile_id: article.profile.id).first | ||
235 | +# assert_difference 'comment.author.points(:category => c.id.to_s)', -1*c.weight do | ||
236 | +# Vote.create!(:voter => person, :voteable => comment, :vote => -1) | ||
237 | +# end | ||
238 | +# end | ||
239 | +# | ||
240 | +# should 'add merit points from comment owner when an user remove a dislike in his comment' do | ||
241 | +# comment = create(Comment, :source => article, :author_id => author.id) | ||
242 | +# Vote.create!(:voter => person, :voteable => comment, :vote => -1) | ||
243 | +# | ||
244 | +# assert_difference 'comment.author.points', 20 do | ||
245 | +# Vote.where(:voteable_id => comment.id).destroy_all | ||
246 | +# end | ||
247 | +# end | ||
248 | +# | ||
249 | +# should 'add merit points to article author when create a new comment' do | ||
250 | +# assert_difference 'author.score_points.count' do | ||
251 | +# create(Comment, :source => article, :author_id => person.id) | ||
252 | +# end | ||
253 | +# end | ||
254 | +# | ||
255 | +# should 'add merit points to voter when he likes a comment' do | ||
256 | +# comment = create(Comment, :source => article, :author_id => person.id) | ||
257 | +# | ||
258 | +# c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).where(profile_id: community.id).first | ||
259 | +# assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do | ||
260 | +# Vote.create!(:voter => person, :voteable => comment, :vote => 1) | ||
261 | +# end | ||
262 | +# end | ||
263 | +# | ||
264 | +# should 'add merit points to voter when he dislikes a comment' do | ||
265 | +# comment = create(Comment, :source => article, :author_id => person.id) | ||
266 | +# | ||
267 | +# c = GamificationPlugin::PointsCategorization.for_type(:vote_voter).where(profile_id: community.id).first | ||
268 | +# assert_difference 'comment.author.points(:category => c.id.to_s)', c.weight do | ||
269 | +# Vote.create!(:voter => person, :voteable => comment, :vote => -1) | ||
270 | +# end | ||
271 | +# end | ||
272 | +# | ||
273 | +# should 'add merit points to source article when create a comment' do | ||
274 | +# c = GamificationPlugin::PointsCategorization.for_type(:comment_article).where(profile_id: community.id).first | ||
275 | +# assert_difference 'article.points(:category => c.id.to_s)', c.weight do | ||
276 | +# create(Comment, :source => article, :author_id => person.id) | ||
277 | +# end | ||
278 | +# end | ||
279 | +# | ||
280 | +# should 'add merit points to source community when create a comment' do | ||
281 | +# article = create(TextileArticle, :profile_id => community.id, :author_id => author.id) | ||
282 | +# | ||
283 | +# c = GamificationPlugin::PointsCategorization.for_type(:comment_community).where(profile_id: community.id).first | ||
284 | +# assert_difference 'community.points(:category => c.id.to_s)', c.weight do | ||
285 | +# create(Comment, :source => article, :author_id => person.id) | ||
286 | +# end | ||
287 | +# end | ||
288 | +# | ||
289 | + | ||
144 | end | 290 | end |
test/unit/person_test.rb
@@ -4,8 +4,6 @@ class PersonTest < ActiveSupport::TestCase | @@ -4,8 +4,6 @@ class PersonTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | @environment = Environment.default | 6 | @environment = Environment.default |
7 | - create_merit_categorization | ||
8 | - GamificationPlugin.gamification_set_rules(@environment) | ||
9 | @person = create_user('testuser').person | 7 | @person = create_user('testuser').person |
10 | end | 8 | end |
11 | attr_accessor :environment, :person | 9 | attr_accessor :environment, :person |
@@ -29,6 +27,7 @@ class PersonTest < ActiveSupport::TestCase | @@ -29,6 +27,7 @@ class PersonTest < ActiveSupport::TestCase | ||
29 | end | 27 | end |
30 | 28 | ||
31 | should 'add points when add someone as a friendly' do | 29 | should 'add points when add someone as a friendly' do |
30 | + create_point_rule_definition('friends') | ||
32 | other_person = create_user("testuserfriend").person | 31 | other_person = create_user("testuserfriend").person |
33 | person.add_friend(other_person) | 32 | person.add_friend(other_person) |
34 | c = GamificationPlugin::PointsCategorization.for_type(:friends).first | 33 | c = GamificationPlugin::PointsCategorization.for_type(:friends).first |
test/unit/point_rules_test.rb
@@ -4,16 +4,15 @@ class PointRulesTest < ActiveSupport::TestCase | @@ -4,16 +4,15 @@ class PointRulesTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | @environment = Environment.default | 6 | @environment = Environment.default |
7 | - create_merit_categorization | ||
8 | @point_rules = Merit::PointRules.new(@environment) | 7 | @point_rules = Merit::PointRules.new(@environment) |
9 | end | 8 | end |
10 | 9 | ||
11 | attr_accessor :environment, :point_rules | 10 | attr_accessor :environment, :point_rules |
12 | 11 | ||
13 | - #should 'not define rules when environment is nil' do | ||
14 | - #point_rules = Merit::PointRules.new | ||
15 | - #assert point_rules.defined_rules.blank? | ||
16 | - #end | 12 | + should 'not define rules when environment is nil' do |
13 | + point_rules = Merit::PointRules.new | ||
14 | + assert point_rules.defined_rules.blank? | ||
15 | + end | ||
17 | 16 | ||
18 | should 'define rules when environment is present' do | 17 | should 'define rules when environment is present' do |
19 | assert point_rules.defined_rules.present? | 18 | assert point_rules.defined_rules.present? |
test/unit/profile_test.rb
@@ -45,7 +45,8 @@ class ProfileTest < ActiveSupport::TestCase | @@ -45,7 +45,8 @@ class ProfileTest < ActiveSupport::TestCase | ||
45 | end | 45 | end |
46 | 46 | ||
47 | should 'update profile level when the score changes' do | 47 | should 'update profile level when the score changes' do |
48 | - community = create_merit_categorization | 48 | + create_point_rule_definition('article_author') |
49 | + community = fast_create(Community) | ||
49 | GamificationPlugin.gamification_set_rules(environment) | 50 | GamificationPlugin.gamification_set_rules(environment) |
50 | 51 | ||
51 | person = create_user('testuser').person | 52 | person = create_user('testuser').person |