Commit f6c9fd610fdbc0a520f9b32932abda2f9bbf7cba
1 parent
f9f5164a
Exists in
staging
and in
42 other branches
Move vote infra from plugin to core
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 | 96 | belongs_to :translation_of, :class_name => 'Article', :foreign_key => :translation_of_id |
| 97 | 97 | before_destroy :rotate_translations |
| 98 | 98 | |
| 99 | + acts_as_voteable | |
| 100 | + | |
| 99 | 101 | before_create do |article| |
| 100 | 102 | article.published_at ||= Time.now |
| 101 | 103 | if article.reference_article && !article.parent | ... | ... |
app/models/comment.rb
app/models/person.rb
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 | -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 | -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 | -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 | 2154 | assert_equivalent [a1,a2], Article.display_filter(nil, user) |
| 2155 | 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 | 2170 | end | ... | ... |
test/unit/comment_test.rb
| ... | ... | @@ -703,6 +703,52 @@ class CommentTest < ActiveSupport::TestCase |
| 703 | 703 | assert_equivalent [c1,c4], Comment.without_reply |
| 704 | 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 | 752 | private |
| 707 | 753 | |
| 708 | 754 | def create_comment(args = {}) | ... | ... |
test/unit/person_test.rb
| ... | ... | @@ -1638,4 +1638,133 @@ class PersonTest < ActiveSupport::TestCase |
| 1638 | 1638 | assert_equal false, person.follows?(nil) |
| 1639 | 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 | 1770 | end | ... | ... |