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,11 +21,29 @@ module Merit | ||
21 | :to => :author, | 21 | :to => :author, |
22 | :value => lambda { |article| article.author.present? ? article.author.articles.count : 0 } | 22 | :value => lambda { |article| article.author.present? ? article.author.articles.count : 0 } |
23 | }, | 23 | }, |
24 | - :relevant_commenter => { | 24 | + :positive_votes_received => { |
25 | :action => 'vote#create', | 25 | :action => 'vote#create', |
26 | :default_threshold => 5, | 26 | :default_threshold => 5, |
27 | :to => lambda {|vote| vote.voteable.author}, | 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,4 +82,28 @@ class ArticleTest < ActiveSupport::TestCase | ||
82 | end | 82 | end |
83 | end | 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 | end | 109 | end |
test/unit/comment_test.rb
@@ -32,8 +32,8 @@ class CommentTest < ActiveSupport::TestCase | @@ -32,8 +32,8 @@ class CommentTest < ActiveSupport::TestCase | ||
32 | assert_equal 'comment_author', person.badges.first.name | 32 | assert_equal 'comment_author', person.badges.first.name |
33 | end | 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 | GamificationPlugin.gamification_set_rules(environment) | 37 | GamificationPlugin.gamification_set_rules(environment) |
38 | 38 | ||
39 | comment = create(Comment, :source => article, :author_id => person.id) | 39 | comment = create(Comment, :source => article, :author_id => person.id) |
@@ -41,7 +41,19 @@ class CommentTest < ActiveSupport::TestCase | @@ -41,7 +41,19 @@ class CommentTest < ActiveSupport::TestCase | ||
41 | Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) | 41 | Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) |
42 | assert_equal [], person.badges | 42 | assert_equal [], person.badges |
43 | Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1) | 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 | end | 57 | end |
46 | 58 | ||
47 | should 'add merit points to comment owner when an user like his comment' do | 59 | should 'add merit points to comment owner when an user like his comment' do |
@@ -0,0 +1,30 @@ | @@ -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 |