Commit 75804df3ea577fa505756460399247ba98998449
1 parent
46d91e43
Exists in
master
and in
1 other branch
Improve test coverage
Showing
5 changed files
with
116 additions
and
11 deletions
Show diff stats
lib/gamification_plugin/api.rb
@@ -57,7 +57,7 @@ class GamificationPlugin::API < Grape::API | @@ -57,7 +57,7 @@ class GamificationPlugin::API < Grape::API | ||
57 | get ':id/points_by_profile' do | 57 | get ':id/points_by_profile' do |
58 | person = environment.people.visible_for_person(current_person).find_by_id(params[:id]) | 58 | person = environment.people.visible_for_person(current_person).find_by_id(params[:id]) |
59 | return not_found! if person.blank? | 59 | return not_found! if person.blank? |
60 | - {points: person.points_by_type(params[:profile]) } | 60 | + {points: person.points_by_profile(params[:profile]) } |
61 | end | 61 | end |
62 | 62 | ||
63 | get ':id/points_out_of_profiles' do | 63 | get ':id/points_out_of_profiles' do |
test/test_helper.rb
@@ -15,6 +15,10 @@ def create_all_point_rules | @@ -15,6 +15,10 @@ def create_all_point_rules | ||
15 | end | 15 | end |
16 | end | 16 | end |
17 | 17 | ||
18 | +def default_point_weight(rule_name) | ||
19 | + Merit::PointRules::AVAILABLE_RULES[rule_name][:default_weight] | ||
20 | +end | ||
21 | + | ||
18 | def load_point_rule(rule_name, config) | 22 | def load_point_rule(rule_name, config) |
19 | rule_config = Merit::PointRules::AVAILABLE_RULES[rule_name.to_sym] | 23 | rule_config = Merit::PointRules::AVAILABLE_RULES[rule_name.to_sym] |
20 | raise "Point rule '#{rule_name}' is not available" if rule_config.nil? | 24 | raise "Point rule '#{rule_name}' is not available" if rule_config.nil? |
@@ -22,7 +26,7 @@ def load_point_rule(rule_name, config) | @@ -22,7 +26,7 @@ def load_point_rule(rule_name, config) | ||
22 | rule_config | 26 | rule_config |
23 | end | 27 | end |
24 | 28 | ||
25 | -#person_points_debug(person) | 29 | +#person_points_debug(person) |
26 | def person_points_debug(person) | 30 | def person_points_debug(person) |
27 | person.score_points.map do |sp| | 31 | person.score_points.map do |sp| |
28 | puts 'Ponto:' | 32 | puts 'Ponto:' |
test/unit/api_test.rb
@@ -8,6 +8,7 @@ class APITest < ActiveSupport::TestCase | @@ -8,6 +8,7 @@ class APITest < ActiveSupport::TestCase | ||
8 | environment = Environment.default | 8 | environment = Environment.default |
9 | environment.enable_plugin(GamificationPlugin) | 9 | environment.enable_plugin(GamificationPlugin) |
10 | GamificationPlugin.gamification_set_rules(@environment) | 10 | GamificationPlugin.gamification_set_rules(@environment) |
11 | + create_all_point_rules | ||
11 | end | 12 | end |
12 | 13 | ||
13 | should 'get my own badges' do | 14 | should 'get my own badges' do |
@@ -27,14 +28,6 @@ class APITest < ActiveSupport::TestCase | @@ -27,14 +28,6 @@ class APITest < ActiveSupport::TestCase | ||
27 | assert_not_nil json['percent'] | 28 | assert_not_nil json['percent'] |
28 | end | 29 | end |
29 | 30 | ||
30 | - should 'get my total pontuation' do | ||
31 | - badge = GamificationPlugin::Badge.create!(:owner => environment, :name => 'test_badge') | ||
32 | - person.add_badge(badge.id) | ||
33 | - get "/api/v1/gamification_plugin/my/points?#{params.to_query}" | ||
34 | - json = JSON.parse(last_response.body) | ||
35 | - assert_not_nil json['points'] | ||
36 | - end | ||
37 | - | ||
38 | should 'get badges of the public person' do | 31 | should 'get badges of the public person' do |
39 | badge = GamificationPlugin::Badge.create!(:owner => environment, :name => 'test_badge') | 32 | badge = GamificationPlugin::Badge.create!(:owner => environment, :name => 'test_badge') |
40 | another_person = create(User, :environment => environment).person | 33 | another_person = create(User, :environment => environment).person |
@@ -76,4 +69,95 @@ class APITest < ActiveSupport::TestCase | @@ -76,4 +69,95 @@ class APITest < ActiveSupport::TestCase | ||
76 | assert_equal 404, last_response.status | 69 | assert_equal 404, last_response.status |
77 | end | 70 | end |
78 | 71 | ||
72 | + should 'get amount of environment badges grouped by name' do | ||
73 | + 3.times { GamificationPlugin::Badge.create!(:owner => environment, :name => 'test_badge') } | ||
74 | + get "/api/v1/gamification_plugin/badges" | ||
75 | + json = JSON.parse(last_response.body) | ||
76 | + assert_equal 3, json['test_badge'] | ||
77 | + end | ||
78 | + | ||
79 | + should 'get my points' do | ||
80 | + article = create(TextArticle, :profile_id => @person.id, :author => @person) | ||
81 | + create(Comment, :source_id => article.id, :author => fast_create(Person)) | ||
82 | + | ||
83 | + get "/api/v1/gamification_plugin/my/points?#{params.to_query}" | ||
84 | + json = JSON.parse(last_response.body) | ||
85 | + assert_equal default_point_weight(:article_author) + default_point_weight(:comment_article_author), json['points'] | ||
86 | + end | ||
87 | + | ||
88 | + should 'get my points filtered by type' do | ||
89 | + article = create(TextArticle, :profile_id => @person.id, :author => @person) | ||
90 | + create(Comment, :source_id => article.id, :author => fast_create(Person)) | ||
91 | + params[:type] = 'article_author' | ||
92 | + | ||
93 | + get "/api/v1/gamification_plugin/my/points_by_type?#{params.to_query}" | ||
94 | + json = JSON.parse(last_response.body) | ||
95 | + assert_equal default_point_weight(:article_author), json['points'] | ||
96 | + end | ||
97 | + | ||
98 | + should 'get my points filtered by profile' do | ||
99 | + community = fast_create(Community) | ||
100 | + create_point_rule_definition('article_author', community) | ||
101 | + create(TextArticle, :profile_id => @person.id, :author => @person) | ||
102 | + create(TextArticle, :profile_id => community.id, :author => @person) | ||
103 | + params[:profile] = community.identifier | ||
104 | + | ||
105 | + get "/api/v1/gamification_plugin/my/points_by_profile?#{params.to_query}" | ||
106 | + json = JSON.parse(last_response.body) | ||
107 | + assert_equal default_point_weight(:article_author), json['points'] | ||
108 | + end | ||
109 | + | ||
110 | + should 'get my points excluding points earned in profiles' do | ||
111 | + community = fast_create(Community) | ||
112 | + create_point_rule_definition('article_author', community) | ||
113 | + create(TextArticle, :profile_id => @person.id, :author => @person) | ||
114 | + create(TextArticle, :profile_id => community.id, :author => @person) | ||
115 | + | ||
116 | + get "/api/v1/gamification_plugin/my/points_out_of_profiles?#{params.to_query}" | ||
117 | + json = JSON.parse(last_response.body) | ||
118 | + assert_equal 2*default_point_weight(:article_author), json['points'] | ||
119 | + end | ||
120 | + | ||
121 | + should 'get points of a person' do | ||
122 | + article = create(TextArticle, :profile_id => @person.id, :author => @person) | ||
123 | + create(Comment, :source_id => article.id, :author => fast_create(Person)) | ||
124 | + | ||
125 | + get "/api/v1/gamification_plugin/people/#{person.id}/points?#{params.to_query}" | ||
126 | + json = JSON.parse(last_response.body) | ||
127 | + assert_equal default_point_weight(:article_author) + default_point_weight(:comment_article_author), json['points'] | ||
128 | + end | ||
129 | + | ||
130 | + should 'get points of a person filtered by type' do | ||
131 | + article = create(TextArticle, :profile_id => @person.id, :author => @person) | ||
132 | + create(Comment, :source_id => article.id, :author => fast_create(Person)) | ||
133 | + params[:type] = 'article_author' | ||
134 | + | ||
135 | + get "/api/v1/gamification_plugin/people/#{@person.id}/points_by_type?#{params.to_query}" | ||
136 | + json = JSON.parse(last_response.body) | ||
137 | + assert_equal default_point_weight(:article_author), json['points'] | ||
138 | + end | ||
139 | + | ||
140 | + should 'get points of a person filtered by profile' do | ||
141 | + community = fast_create(Community) | ||
142 | + create_point_rule_definition('article_author', community) | ||
143 | + create(TextArticle, :profile_id => @person.id, :author => @person) | ||
144 | + create(TextArticle, :profile_id => community.id, :author => @person) | ||
145 | + params[:profile] = community.identifier | ||
146 | + | ||
147 | + get "/api/v1/gamification_plugin/people/#{@person.id}/points_by_profile?#{params.to_query}" | ||
148 | + json = JSON.parse(last_response.body) | ||
149 | + assert_equal default_point_weight(:article_author), json['points'] | ||
150 | + end | ||
151 | + | ||
152 | + should 'get points of a person excluding points earned in profiles' do | ||
153 | + community = fast_create(Community) | ||
154 | + create_point_rule_definition('article_author', community) | ||
155 | + create(TextArticle, :profile_id => @person.id, :author => @person) | ||
156 | + create(TextArticle, :profile_id => community.id, :author => @person) | ||
157 | + | ||
158 | + get "/api/v1/gamification_plugin/people/#{@person.id}/points_out_of_profiles?#{params.to_query}" | ||
159 | + json = JSON.parse(last_response.body) | ||
160 | + assert_equal 2*default_point_weight(:article_author), json['points'] | ||
161 | + end | ||
162 | + | ||
79 | end | 163 | end |
test/unit/gamification_plugin_test.rb
test/unit/point_rules_test.rb
@@ -19,4 +19,21 @@ class PointRulesTest < ActiveSupport::TestCase | @@ -19,4 +19,21 @@ class PointRulesTest < ActiveSupport::TestCase | ||
19 | assert point_rules.defined_rules.present? | 19 | assert point_rules.defined_rules.present? |
20 | end | 20 | end |
21 | 21 | ||
22 | + should 'return target url for a point related to article creation' do | ||
23 | + person = create_user('testuser').person | ||
24 | + create_point_rule_definition('article_author') | ||
25 | + article = create(TextArticle, :profile_id => person.id, :author => person) | ||
26 | + url = Merit::PointRules.target_url(person.score_points.last) | ||
27 | + assert_equal article.url, url | ||
28 | + end | ||
29 | + | ||
30 | + should 'return target url for a point related to comment creation' do | ||
31 | + person = create_user('testuser').person | ||
32 | + create_point_rule_definition('comment_author') | ||
33 | + article = create(Article, :profile_id => person.id, :author => person) | ||
34 | + comment = create(Comment, :source_id => article.id, :author => person) | ||
35 | + url = Merit::PointRules.target_url(person.score_points.last) | ||
36 | + assert_equal comment.url, url | ||
37 | + end | ||
38 | + | ||
22 | end | 39 | end |