Commit 3bdd2f0b2d7f6d3fec6491c47b601b82861056e3
Exists in
master
and in
25 other branches
Merge remote-tracking branch 'origin/master'
Showing
12 changed files
with
194 additions
and
238 deletions
Show diff stats
app/models/article.rb
@@ -96,6 +96,8 @@ class Article < ActiveRecord::Base | @@ -96,6 +96,8 @@ class Article < ActiveRecord::Base | ||
96 | belongs_to :translation_of, :class_name => 'Article', :foreign_key => :translation_of_id | 96 | belongs_to :translation_of, :class_name => 'Article', :foreign_key => :translation_of_id |
97 | before_destroy :rotate_translations | 97 | before_destroy :rotate_translations |
98 | 98 | ||
99 | + acts_as_voteable | ||
100 | + | ||
99 | before_create do |article| | 101 | before_create do |article| |
100 | article.published_at ||= Time.now | 102 | article.published_at ||= Time.now |
101 | if article.reference_article && !article.parent | 103 | if article.reference_article && !article.parent |
app/models/comment.rb
@@ -37,6 +37,8 @@ class Comment < ActiveRecord::Base | @@ -37,6 +37,8 @@ class Comment < ActiveRecord::Base | ||
37 | 37 | ||
38 | xss_terminate :only => [ :body, :title, :name ], :on => 'validation' | 38 | xss_terminate :only => [ :body, :title, :name ], :on => 'validation' |
39 | 39 | ||
40 | + acts_as_voteable | ||
41 | + | ||
40 | def comment_root | 42 | def comment_root |
41 | (reply_of && reply_of.comment_root) || self | 43 | (reply_of && reply_of.comment_root) || self |
42 | end | 44 | end |
app/models/person.rb
@@ -103,6 +103,8 @@ roles] } | @@ -103,6 +103,8 @@ roles] } | ||
103 | 103 | ||
104 | belongs_to :user, :dependent => :delete | 104 | belongs_to :user, :dependent => :delete |
105 | 105 | ||
106 | + acts_as_voter | ||
107 | + | ||
106 | def can_change_homepage? | 108 | def can_change_homepage? |
107 | !environment.enabled?('cant_change_homepage') || is_admin? | 109 | !environment.enabled?('cant_change_homepage') || is_admin? |
108 | end | 110 | end |
plugins/vote/lib/ext/article.rb
plugins/vote/lib/ext/comment.rb
plugins/vote/lib/ext/person.rb
plugins/vote/test/unit/article_test.rb
@@ -1,24 +0,0 @@ | @@ -1,24 +0,0 @@ | ||
1 | -require 'test_helper' | ||
2 | - | ||
3 | -class ArticleTest < ActiveSupport::TestCase | ||
4 | - | ||
5 | - def setup | ||
6 | - @profile = create_user('testing').person | ||
7 | - end | ||
8 | - | ||
9 | - attr_reader :profile | ||
10 | - | ||
11 | - should 'vote in a article' do | ||
12 | - article = create(Article, :name => 'Test', :profile => profile, :last_changed_by => nil) | ||
13 | - profile.vote(article, 5) | ||
14 | - assert_equal 1, article.voters_who_voted.length | ||
15 | - assert_equal 5, article.votes_total | ||
16 | - end | ||
17 | - | ||
18 | - should 'be able to remove a voted article' do | ||
19 | - article = create(Article, :name => 'Test', :profile => profile, :last_changed_by => nil) | ||
20 | - profile.vote(article, 5) | ||
21 | - article.destroy | ||
22 | - end | ||
23 | - | ||
24 | -end |
plugins/vote/test/unit/comment_test.rb
@@ -1,59 +0,0 @@ | @@ -1,59 +0,0 @@ | ||
1 | -require 'test_helper' | ||
2 | - | ||
3 | -class CommentTest < ActiveSupport::TestCase | ||
4 | - | ||
5 | - should 'vote in a comment' do | ||
6 | - comment = create_comment | ||
7 | - person = create_user('voter').person | ||
8 | - person.vote(comment, 5) | ||
9 | - assert_equal 1, comment.voters_who_voted.length | ||
10 | - assert_equal 5, comment.votes_total | ||
11 | - end | ||
12 | - | ||
13 | - should 'like a comment' do | ||
14 | - comment = create_comment | ||
15 | - person = create_user('voter').person | ||
16 | - assert !comment.voted_by?(person, true) | ||
17 | - person.vote_for(comment) | ||
18 | - assert comment.voted_by?(person, true) | ||
19 | - assert !comment.voted_by?(person, false) | ||
20 | - end | ||
21 | - | ||
22 | - should 'count voters for' do | ||
23 | - comment = create_comment | ||
24 | - person = create_user('voter').person | ||
25 | - person2 = create_user('voter2').person | ||
26 | - person3 = create_user('voter3').person | ||
27 | - person.vote_for(comment) | ||
28 | - person2.vote_for(comment) | ||
29 | - person3.vote_against(comment) | ||
30 | - assert_equal 2, comment.votes_for | ||
31 | - end | ||
32 | - | ||
33 | - should 'count votes againts' do | ||
34 | - comment = create_comment | ||
35 | - person = create_user('voter').person | ||
36 | - person2 = create_user('voter2').person | ||
37 | - person3 = create_user('voter3').person | ||
38 | - person.vote_against(comment) | ||
39 | - person2.vote_against(comment) | ||
40 | - person3.vote_for(comment) | ||
41 | - assert_equal 2, comment.votes_against | ||
42 | - end | ||
43 | - | ||
44 | - should 'be able to remove a voted comment' do | ||
45 | - comment = create_comment | ||
46 | - person = create_user('voter').person | ||
47 | - person.vote(comment, 5) | ||
48 | - comment.destroy | ||
49 | - end | ||
50 | - | ||
51 | - private | ||
52 | - | ||
53 | - def create_comment(args = {}) | ||
54 | - owner = create_user('testuser').person | ||
55 | - article = create(TextileArticle, :profile_id => owner.id) | ||
56 | - create(Comment, { :name => 'foo', :email => 'foo@example.com', :source => article }.merge(args)) | ||
57 | - end | ||
58 | - | ||
59 | -end |
plugins/vote/test/unit/person_test.rb
@@ -1,134 +0,0 @@ | @@ -1,134 +0,0 @@ | ||
1 | -require 'test_helper' | ||
2 | - | ||
3 | -class PersonTest < ActiveSupport::TestCase | ||
4 | - | ||
5 | - should 'vote in a comment with value greater than 1' do | ||
6 | - comment = fast_create(Comment) | ||
7 | - person = fast_create(Person) | ||
8 | - | ||
9 | - person.vote(comment, 5) | ||
10 | - assert_equal 1, person.vote_count | ||
11 | - assert_equal 5, person.votes.first.vote | ||
12 | - assert person.voted_on?(comment) | ||
13 | - end | ||
14 | - | ||
15 | - should 'vote in a comment with value lesser than -1' do | ||
16 | - comment = fast_create(Comment) | ||
17 | - person = fast_create(Person) | ||
18 | - | ||
19 | - person.vote(comment, -5) | ||
20 | - assert_equal 1, person.vote_count | ||
21 | - assert_equal -5, person.votes.first.vote | ||
22 | - end | ||
23 | - | ||
24 | - should 'vote for a comment' do | ||
25 | - comment = fast_create(Comment) | ||
26 | - person = fast_create(Person) | ||
27 | - | ||
28 | - assert !person.voted_for?(comment) | ||
29 | - person.vote_for(comment) | ||
30 | - assert person.voted_for?(comment) | ||
31 | - assert !person.voted_against?(comment) | ||
32 | - end | ||
33 | - | ||
34 | - should 'vote against a comment' do | ||
35 | - comment = fast_create(Comment) | ||
36 | - person = fast_create(Person) | ||
37 | - | ||
38 | - assert !person.voted_against?(comment) | ||
39 | - person.vote_against(comment) | ||
40 | - assert !person.voted_for?(comment) | ||
41 | - assert person.voted_against?(comment) | ||
42 | - end | ||
43 | - | ||
44 | - should 'do not vote against a comment twice' do | ||
45 | - comment = fast_create(Comment) | ||
46 | - person = fast_create(Person) | ||
47 | - | ||
48 | - assert person.vote_against(comment) | ||
49 | - assert !person.vote_against(comment) | ||
50 | - end | ||
51 | - | ||
52 | - should 'do not vote for a comment twice' do | ||
53 | - comment = fast_create(Comment) | ||
54 | - person = fast_create(Person) | ||
55 | - | ||
56 | - assert person.vote_for(comment) | ||
57 | - assert !person.vote_for(comment) | ||
58 | - end | ||
59 | - | ||
60 | - should 'not vote against a voted for comment' do | ||
61 | - comment = fast_create(Comment) | ||
62 | - person = fast_create(Person) | ||
63 | - | ||
64 | - person.vote_for(comment) | ||
65 | - person.vote_against(comment) | ||
66 | - assert person.voted_for?(comment) | ||
67 | - assert !person.voted_against?(comment) | ||
68 | - end | ||
69 | - | ||
70 | - should 'not vote for a voted against comment' do | ||
71 | - comment = fast_create(Comment) | ||
72 | - person = fast_create(Person) | ||
73 | - | ||
74 | - person.vote_against(comment) | ||
75 | - person.vote_for(comment) | ||
76 | - assert !person.voted_for?(comment) | ||
77 | - assert person.voted_against?(comment) | ||
78 | - end | ||
79 | - | ||
80 | - should 'undo a vote for a comment' do | ||
81 | - comment = fast_create(Comment) | ||
82 | - person = fast_create(Person) | ||
83 | - | ||
84 | - person.vote_for(comment) | ||
85 | - assert person.voted_for?(comment) | ||
86 | - person.votes.for_voteable(comment).destroy_all | ||
87 | - assert !person.voted_for?(comment) | ||
88 | - end | ||
89 | - | ||
90 | - should 'count comments voted' do | ||
91 | - comment = fast_create(Comment) | ||
92 | - person = fast_create(Person) | ||
93 | - | ||
94 | - comment2 = fast_create(Comment) | ||
95 | - comment3 = fast_create(Comment) | ||
96 | - person.vote_for(comment) | ||
97 | - person.vote_for(comment2) | ||
98 | - person.vote_against(comment3) | ||
99 | - assert_equal 3, person.vote_count | ||
100 | - assert_equal 2, person.vote_count(true) | ||
101 | - assert_equal 1, person.vote_count(false) | ||
102 | - end | ||
103 | - | ||
104 | - should 'vote in a article with value greater than 1' do | ||
105 | - article = fast_create(Article) | ||
106 | - person = fast_create(Person) | ||
107 | - | ||
108 | - person.vote(article, 5) | ||
109 | - assert_equal 1, person.vote_count | ||
110 | - assert_equal 5, person.votes.first.vote | ||
111 | - assert person.voted_on?(article) | ||
112 | - end | ||
113 | - | ||
114 | - should 'vote for a article' do | ||
115 | - article = fast_create(Article) | ||
116 | - person = fast_create(Person) | ||
117 | - | ||
118 | - assert !person.voted_for?(article) | ||
119 | - person.vote_for(article) | ||
120 | - assert person.voted_for?(article) | ||
121 | - assert !person.voted_against?(article) | ||
122 | - end | ||
123 | - | ||
124 | - should 'vote against a article' do | ||
125 | - article = fast_create(Article) | ||
126 | - person = fast_create(Person) | ||
127 | - | ||
128 | - assert !person.voted_against?(article) | ||
129 | - person.vote_against(article) | ||
130 | - assert !person.voted_for?(article) | ||
131 | - assert person.voted_against?(article) | ||
132 | - end | ||
133 | - | ||
134 | -end |
test/unit/article_test.rb
@@ -2154,4 +2154,17 @@ class ArticleTest < ActiveSupport::TestCase | @@ -2154,4 +2154,17 @@ class ArticleTest < ActiveSupport::TestCase | ||
2154 | assert_equivalent [a1,a2], Article.display_filter(nil, user) | 2154 | assert_equivalent [a1,a2], Article.display_filter(nil, user) |
2155 | end | 2155 | end |
2156 | 2156 | ||
2157 | + should 'vote in a article' do | ||
2158 | + article = create(Article, :name => 'Test', :profile => profile, :last_changed_by => nil) | ||
2159 | + profile.vote(article, 5) | ||
2160 | + assert_equal 1, article.voters_who_voted.length | ||
2161 | + assert_equal 5, article.votes_total | ||
2162 | + end | ||
2163 | + | ||
2164 | + should 'be able to remove a voted article' do | ||
2165 | + article = create(Article, :name => 'Test', :profile => profile, :last_changed_by => nil) | ||
2166 | + profile.vote(article, 5) | ||
2167 | + article.destroy | ||
2168 | + end | ||
2169 | + | ||
2157 | end | 2170 | end |
test/unit/comment_test.rb
@@ -703,6 +703,52 @@ class CommentTest < ActiveSupport::TestCase | @@ -703,6 +703,52 @@ class CommentTest < ActiveSupport::TestCase | ||
703 | assert_equivalent [c1,c4], Comment.without_reply | 703 | assert_equivalent [c1,c4], Comment.without_reply |
704 | end | 704 | end |
705 | 705 | ||
706 | + should 'vote in a comment' do | ||
707 | + comment = create_comment | ||
708 | + person = create_user('voter').person | ||
709 | + person.vote(comment, 5) | ||
710 | + assert_equal 1, comment.voters_who_voted.length | ||
711 | + assert_equal 5, comment.votes_total | ||
712 | + end | ||
713 | + | ||
714 | + should 'like a comment' do | ||
715 | + comment = create_comment | ||
716 | + person = create_user('voter').person | ||
717 | + assert !comment.voted_by?(person, true) | ||
718 | + person.vote_for(comment) | ||
719 | + assert comment.voted_by?(person, true) | ||
720 | + assert !comment.voted_by?(person, false) | ||
721 | + end | ||
722 | + | ||
723 | + should 'count voters for' do | ||
724 | + comment = create_comment | ||
725 | + person = create_user('voter').person | ||
726 | + person2 = create_user('voter2').person | ||
727 | + person3 = create_user('voter3').person | ||
728 | + person.vote_for(comment) | ||
729 | + person2.vote_for(comment) | ||
730 | + person3.vote_against(comment) | ||
731 | + assert_equal 2, comment.votes_for | ||
732 | + end | ||
733 | + | ||
734 | + should 'count votes againts' do | ||
735 | + comment = create_comment | ||
736 | + person = create_user('voter').person | ||
737 | + person2 = create_user('voter2').person | ||
738 | + person3 = create_user('voter3').person | ||
739 | + person.vote_against(comment) | ||
740 | + person2.vote_against(comment) | ||
741 | + person3.vote_for(comment) | ||
742 | + assert_equal 2, comment.votes_against | ||
743 | + end | ||
744 | + | ||
745 | + should 'be able to remove a voted comment' do | ||
746 | + comment = create_comment | ||
747 | + person = create_user('voter').person | ||
748 | + person.vote(comment, 5) | ||
749 | + comment.destroy | ||
750 | + end | ||
751 | + | ||
706 | private | 752 | private |
707 | 753 | ||
708 | def create_comment(args = {}) | 754 | def create_comment(args = {}) |
test/unit/person_test.rb
@@ -1638,4 +1638,133 @@ class PersonTest < ActiveSupport::TestCase | @@ -1638,4 +1638,133 @@ class PersonTest < ActiveSupport::TestCase | ||
1638 | assert_equal false, person.follows?(nil) | 1638 | assert_equal false, person.follows?(nil) |
1639 | end | 1639 | end |
1640 | 1640 | ||
1641 | + should 'vote in a comment with value greater than 1' do | ||
1642 | + comment = fast_create(Comment) | ||
1643 | + person = fast_create(Person) | ||
1644 | + | ||
1645 | + person.vote(comment, 5) | ||
1646 | + assert_equal 1, person.vote_count | ||
1647 | + assert_equal 5, person.votes.first.vote | ||
1648 | + assert person.voted_on?(comment) | ||
1649 | + end | ||
1650 | + | ||
1651 | + should 'vote in a comment with value lesser than -1' do | ||
1652 | + comment = fast_create(Comment) | ||
1653 | + person = fast_create(Person) | ||
1654 | + | ||
1655 | + person.vote(comment, -5) | ||
1656 | + assert_equal 1, person.vote_count | ||
1657 | + assert_equal -5, person.votes.first.vote | ||
1658 | + end | ||
1659 | + | ||
1660 | + should 'vote for a comment' do | ||
1661 | + comment = fast_create(Comment) | ||
1662 | + person = fast_create(Person) | ||
1663 | + | ||
1664 | + assert !person.voted_for?(comment) | ||
1665 | + person.vote_for(comment) | ||
1666 | + assert person.voted_for?(comment) | ||
1667 | + assert !person.voted_against?(comment) | ||
1668 | + end | ||
1669 | + | ||
1670 | + should 'vote against a comment' do | ||
1671 | + comment = fast_create(Comment) | ||
1672 | + person = fast_create(Person) | ||
1673 | + | ||
1674 | + assert !person.voted_against?(comment) | ||
1675 | + person.vote_against(comment) | ||
1676 | + assert !person.voted_for?(comment) | ||
1677 | + assert person.voted_against?(comment) | ||
1678 | + end | ||
1679 | + | ||
1680 | + should 'do not vote against a comment twice' do | ||
1681 | + comment = fast_create(Comment) | ||
1682 | + person = fast_create(Person) | ||
1683 | + | ||
1684 | + assert person.vote_against(comment) | ||
1685 | + assert !person.vote_against(comment) | ||
1686 | + end | ||
1687 | + | ||
1688 | + should 'do not vote for a comment twice' do | ||
1689 | + comment = fast_create(Comment) | ||
1690 | + person = fast_create(Person) | ||
1691 | + | ||
1692 | + assert person.vote_for(comment) | ||
1693 | + assert !person.vote_for(comment) | ||
1694 | + end | ||
1695 | + | ||
1696 | + should 'not vote against a voted for comment' do | ||
1697 | + comment = fast_create(Comment) | ||
1698 | + person = fast_create(Person) | ||
1699 | + | ||
1700 | + person.vote_for(comment) | ||
1701 | + person.vote_against(comment) | ||
1702 | + assert person.voted_for?(comment) | ||
1703 | + assert !person.voted_against?(comment) | ||
1704 | + end | ||
1705 | + | ||
1706 | + should 'not vote for a voted against comment' do | ||
1707 | + comment = fast_create(Comment) | ||
1708 | + person = fast_create(Person) | ||
1709 | + | ||
1710 | + person.vote_against(comment) | ||
1711 | + person.vote_for(comment) | ||
1712 | + assert !person.voted_for?(comment) | ||
1713 | + assert person.voted_against?(comment) | ||
1714 | + end | ||
1715 | + | ||
1716 | + should 'undo a vote for a comment' do | ||
1717 | + comment = fast_create(Comment) | ||
1718 | + person = fast_create(Person) | ||
1719 | + | ||
1720 | + person.vote_for(comment) | ||
1721 | + assert person.voted_for?(comment) | ||
1722 | + person.votes.for_voteable(comment).destroy_all | ||
1723 | + assert !person.voted_for?(comment) | ||
1724 | + end | ||
1725 | + | ||
1726 | + should 'count comments voted' do | ||
1727 | + comment = fast_create(Comment) | ||
1728 | + person = fast_create(Person) | ||
1729 | + | ||
1730 | + comment2 = fast_create(Comment) | ||
1731 | + comment3 = fast_create(Comment) | ||
1732 | + person.vote_for(comment) | ||
1733 | + person.vote_for(comment2) | ||
1734 | + person.vote_against(comment3) | ||
1735 | + assert_equal 3, person.vote_count | ||
1736 | + assert_equal 2, person.vote_count(true) | ||
1737 | + assert_equal 1, person.vote_count(false) | ||
1738 | + end | ||
1739 | + | ||
1740 | + should 'vote in a article with value greater than 1' do | ||
1741 | + article = fast_create(Article) | ||
1742 | + person = fast_create(Person) | ||
1743 | + | ||
1744 | + person.vote(article, 5) | ||
1745 | + assert_equal 1, person.vote_count | ||
1746 | + assert_equal 5, person.votes.first.vote | ||
1747 | + assert person.voted_on?(article) | ||
1748 | + end | ||
1749 | + | ||
1750 | + should 'vote for a article' do | ||
1751 | + article = fast_create(Article) | ||
1752 | + person = fast_create(Person) | ||
1753 | + | ||
1754 | + assert !person.voted_for?(article) | ||
1755 | + person.vote_for(article) | ||
1756 | + assert person.voted_for?(article) | ||
1757 | + assert !person.voted_against?(article) | ||
1758 | + end | ||
1759 | + | ||
1760 | + should 'vote against a article' do | ||
1761 | + article = fast_create(Article) | ||
1762 | + person = fast_create(Person) | ||
1763 | + | ||
1764 | + assert !person.voted_against?(article) | ||
1765 | + person.vote_against(article) | ||
1766 | + assert !person.voted_for?(article) | ||
1767 | + assert person.voted_against?(article) | ||
1768 | + end | ||
1769 | + | ||
1641 | end | 1770 | end |