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 |