comment_test.rb
5.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
require_relative "../test_helper"
class CommentTest < ActiveSupport::TestCase
def setup
@person = create_user('testuser').person
@author = create_user('testauthoruser').person
@article = create(TextileArticle, :profile_id => person.id, :author_id => @author.id)
@environment = Environment.default
GamificationPlugin.gamification_set_rules(@environment)
end
attr_accessor :person, :article, :environment, :author
should 'add merit points to author when create a new comment' do
create(Comment, :source => article, :author_id => person.id)
assert_equal 1, person.score_points.count
end
should 'subtract merit points from author when destroy a comment' do
comment = create(Comment, :source => article, :author_id => person.id)
assert_equal 1, person.score_points.count
comment.destroy
assert_equal 2, person.score_points.count
assert_equal 0, person.points
end
should 'add merit badge to author when create 5 new comments' do
GamificationPlugin::Badge.create!(:owner => environment, :name => 'comment_author')
GamificationPlugin.gamification_set_rules(environment)
5.times { create(Comment, :source => article, :author_id => person.id) }
assert_equal 'comment_author', person.badges.first.name
end
should 'add badge to author when users like his comment' do
GamificationPlugin::Badge.create!(:owner => environment, :name => 'positive_votes_received')
GamificationPlugin.gamification_set_rules(environment)
comment = create(Comment, :source => article, :author_id => person.id)
4.times { Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1) }
Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1)
assert_equal [], person.badges
Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1)
assert_equal 'positive_votes_received', person.reload.badges.first.name
end
should 'add badge to author when users dislike his comment' do
GamificationPlugin::Badge.create!(:owner => environment, :name => 'negative_votes_received')
GamificationPlugin.gamification_set_rules(environment)
comment = create(Comment, :source => article, :author_id => person.id)
4.times { Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1) }
Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => 1)
assert_equal [], person.badges
Vote.create!(:voter => fast_create(Person), :voteable => comment, :vote => -1)
assert_equal 'negative_votes_received', person.reload.badges.first.name
end
should 'add merit points to comment owner when an user like his comment' do
comment = create(Comment, :source => article, :author_id => person.id)
assert_difference 'comment.author.points(:category => :vote_voteable_author)', 50 do
Vote.create!(:voter => person, :voteable => comment, :vote => 1)
end
end
should 'subtract merit points to comment owner when an user unlike his comment' do
comment = create(Comment, :source => article, :author_id => author.id)
Vote.create!(:voter => person, :voteable => comment, :vote => 1)
assert_difference 'comment.author.points', -50 do
Vote.where(:voteable_id => comment.id).destroy_all
end
end
should 'subtract merit points from comment owner when an user dislike his comment' do
comment = create(Comment, :source => article, :author_id => person.id)
assert_difference 'comment.author.points(:category => :vote_voteable_author)', -50 do
Vote.create!(:voter => person, :voteable => comment, :vote => -1)
end
end
should 'add merit points from comment owner when an user remove a dislike in his comment' do
comment = create(Comment, :source => article, :author_id => author.id)
Vote.create!(:voter => person, :voteable => comment, :vote => -1)
assert_difference 'comment.author.points', 50 do
Vote.where(:voteable_id => comment.id).destroy_all
end
end
should 'add merit points to article author when create a new comment' do
assert_difference 'author.score_points.count' do
create(Comment, :source => article, :author_id => person.id)
end
end
should 'add merit points to voter when he likes a comment' do
comment = create(Comment, :source => article, :author_id => person.id)
assert_difference 'comment.author.points(:category => :vote_voter)', 10 do
Vote.create!(:voter => person, :voteable => comment, :vote => 1)
end
end
should 'add merit points to voter when he dislikes a comment' do
comment = create(Comment, :source => article, :author_id => person.id)
assert_difference 'comment.author.points(:category => :vote_voter)', 10 do
Vote.create!(:voter => person, :voteable => comment, :vote => -1)
end
end
should 'add merit points to source article when create a comment' do
assert_difference 'article.points(:category => :comment_article)', 50 do
create(Comment, :source => article, :author_id => person.id)
end
end
should 'add merit points to source community when create a comment' do
community = fast_create(Community)
article = create(TextileArticle, :profile_id => community.id, :author_id => @author.id)
assert_difference 'community.points(:category => :comment_community)', 50 do
create(Comment, :source => article, :author_id => person.id)
end
end
end