Commit 132da353694c4e4a1b3be16be5014d1693c8a863
1 parent
233d63e9
Exists in
master
and in
1 other branch
Add new badge types
Showing
5 changed files
with
96 additions
and
5 deletions
Show diff stats
lib/merit/badge_rules.rb
| ... | ... | @@ -21,11 +21,29 @@ module Merit |
| 21 | 21 | :to => :author, |
| 22 | 22 | :value => lambda { |article| article.author.present? ? article.author.articles.count : 0 } |
| 23 | 23 | }, |
| 24 | - :relevant_commenter => { | |
| 24 | + :positive_votes_received => { | |
| 25 | 25 | :action => 'vote#create', |
| 26 | 26 | :default_threshold => 5, |
| 27 | 27 | :to => lambda {|vote| vote.voteable.author}, |
| 28 | - :value => lambda { |vote| vote.voteable.kind_of?(Comment) ? Vote.for_voteable(vote.voteable).where('vote > 0').count : 0 } | |
| 28 | + :value => lambda { |vote| Vote.for_voteable(vote.voteable).where('vote > 0').count } | |
| 29 | + }, | |
| 30 | + :negative_votes_received => { | |
| 31 | + :action => 'vote#create', | |
| 32 | + :default_threshold => 5, | |
| 33 | + :to => lambda {|vote| vote.voteable.author}, | |
| 34 | + :value => lambda { |vote| Vote.for_voteable(vote.voteable).where('vote < 0').count } | |
| 35 | + }, | |
| 36 | + :votes_performed => { | |
| 37 | + :action => 'vote#create', | |
| 38 | + :default_threshold => 5, | |
| 39 | + :to => lambda {|vote| vote.voter}, | |
| 40 | + :value => lambda { |vote| Vote.for_voter(vote.voter).count } | |
| 41 | + }, | |
| 42 | + :friendly => { | |
| 43 | + :action => 'friendship#create', | |
| 44 | + :default_threshold => 5, | |
| 45 | + :to => lambda {|friendship| friendship.person}, | |
| 46 | + :value => lambda { |friendship| friendship.person.friends.count } | |
| 29 | 47 | } |
| 30 | 48 | } |
| 31 | 49 | ... | ... |
test/unit/article_test.rb
| ... | ... | @@ -82,4 +82,28 @@ class ArticleTest < ActiveSupport::TestCase |
| 82 | 82 | end |
| 83 | 83 | end |
| 84 | 84 | |
| 85 | + should 'add badge to author when users like his article' do | |
| 86 | + GamificationPlugin::Badge.create!(:owner => environment, :name => 'positive_votes_received') | |
| 87 | + GamificationPlugin.gamification_set_rules(environment) | |
| 88 | + | |
| 89 | + article = create(Article, :name => 'Test', :profile => person, :author => person) | |
| 90 | + 4.times { Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1) } | |
| 91 | + Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1) | |
| 92 | + assert_equal [], person.badges | |
| 93 | + Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1) | |
| 94 | + assert_equal 'positive_votes_received', person.reload.badges.first.name | |
| 95 | + end | |
| 96 | + | |
| 97 | + should 'add badge to author when users dislike his article' do | |
| 98 | + GamificationPlugin::Badge.create!(:owner => environment, :name => 'negative_votes_received') | |
| 99 | + GamificationPlugin.gamification_set_rules(environment) | |
| 100 | + | |
| 101 | + article = create(Article, :name => 'Test', :profile => person, :author => person) | |
| 102 | + 4.times { Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1) } | |
| 103 | + Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => 1) | |
| 104 | + assert_equal [], person.badges | |
| 105 | + Vote.create!(:voter => fast_create(Person), :voteable => article, :vote => -1) | |
| 106 | + assert_equal 'negative_votes_received', person.reload.badges.first.name | |
| 107 | + end | |
| 108 | + | |
| 85 | 109 | end | ... | ... |
test/unit/comment_test.rb
| ... | ... | @@ -32,8 +32,8 @@ class CommentTest < ActiveSupport::TestCase |
| 32 | 32 | assert_equal 'comment_author', person.badges.first.name |
| 33 | 33 | end |
| 34 | 34 | |
| 35 | - should 'add badge to author when users vote in his comment' do | |
| 36 | - GamificationPlugin::Badge.create!(:owner => environment, :name => 'relevant_commenter') | |
| 35 | + should 'add badge to author when users like his comment' do | |
| 36 | + GamificationPlugin::Badge.create!(:owner => environment, :name => 'positive_votes_received') | |
| 37 | 37 | GamificationPlugin.gamification_set_rules(environment) |
| 38 | 38 | |
| 39 | 39 | comment = create(Comment, :source => article, :author_id => person.id) |
| ... | ... | @@ -41,7 +41,19 @@ class CommentTest < ActiveSupport::TestCase |
| 41 | 41 | Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) |
| 42 | 42 | assert_equal [], person.badges |
| 43 | 43 | Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1) |
| 44 | - assert_equal 'relevant_commenter', person.reload.badges.first.name | |
| 44 | + assert_equal 'positive_votes_received', person.reload.badges.first.name | |
| 45 | + end | |
| 46 | + | |
| 47 | + should 'add badge to author when users dislike his comment' do | |
| 48 | + GamificationPlugin::Badge.create!(:owner => environment, :name => 'negative_votes_received') | |
| 49 | + GamificationPlugin.gamification_set_rules(environment) | |
| 50 | + | |
| 51 | + comment = create(Comment, :source => article, :author_id => person.id) | |
| 52 | + 4.times { Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) } | |
| 53 | + Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1) | |
| 54 | + assert_equal [], person.badges | |
| 55 | + Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) | |
| 56 | + assert_equal 'negative_votes_received', person.reload.badges.first.name | |
| 45 | 57 | end |
| 46 | 58 | |
| 47 | 59 | should 'add merit points to comment owner when an user like his comment' do | ... | ... |
| ... | ... | @@ -0,0 +1,30 @@ |
| 1 | +require_relative "../test_helper" | |
| 2 | + | |
| 3 | +class PersonTest < ActiveSupport::TestCase | |
| 4 | + | |
| 5 | + def setup | |
| 6 | + @environment = Environment.default | |
| 7 | + GamificationPlugin.gamification_set_rules(@environment) | |
| 8 | + @person = create_user('testuser').person | |
| 9 | + end | |
| 10 | + attr_accessor :environment, :person | |
| 11 | + | |
| 12 | + should 'add badge to a voter' do | |
| 13 | + GamificationPlugin::Badge.create!(:owner => environment, :name => 'votes_performed') | |
| 14 | + GamificationPlugin.gamification_set_rules(environment) | |
| 15 | + | |
| 16 | + 4.times { Vote.create!(:voter => person, :voteable => fast_create(Comment), :vote => 1) } | |
| 17 | + assert_equal [], person.badges | |
| 18 | + Vote.create!(:voter => person, :voteable => fast_create(Comment), :vote => 1) | |
| 19 | + assert_equal 'votes_performed', person.reload.badges.first.name | |
| 20 | + end | |
| 21 | + | |
| 22 | + should 'add badge to a friendly person' do | |
| 23 | + GamificationPlugin::Badge.create!(:owner => environment, :name => 'friendly') | |
| 24 | + GamificationPlugin.gamification_set_rules(environment) | |
| 25 | + | |
| 26 | + 5.times { |i| person.add_friend(create_user("testuser#{i}").person) } | |
| 27 | + assert_equal 'friendly', person.reload.badges.first.name | |
| 28 | + end | |
| 29 | + | |
| 30 | +end | ... | ... |