discussion_test.rb
5.72 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
130
131
132
133
134
135
136
137
138
139
require_relative '../test_helper'
class DiscussionTest < ActiveSupport::TestCase
def setup
@profile = fast_create(Community)
@discussion = ProposalsDiscussionPlugin::Discussion.new(:name => 'test', :profile => @profile)
end
attr_reader :profile, :discussion
should 'return list of topics' do
discussion.save!
topic1 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic2 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
assert_equivalent [topic1, topic2], discussion.topics
end
should 'return list of random topics returning one topic per category' do
discussion.save!
c1 = create(Category, :name => "Category 1", :environment_id => profile.environment.id)
c2 = create(Category, :name => "Category 2", :environment_id => profile.environment.id)
discussion.categories << c1
discussion.categories << c2
topic1 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic1.add_category c1
topic2 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic2.add_category c1
topic3 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic3.add_category c2
topic4 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic4.add_category c2
random_topics = discussion.random_topics_one_by_category
random_topics_categories = random_topics.map {|t| t.categories.map{|c|c.name}}.flatten
assert_equal ["Category 1", "Category 2"],random_topics_categories
end
should 'include only topics with discussion categories in random topics' do
discussion.save!
c1 = create(Category, :name => "Category 1", :environment_id => profile.environment.id)
c2 = create(Category, :name => "Category 2", :environment_id => profile.environment.id)
discussion.categories << c1
topic1 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic1.add_category c1
topic2 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic2.add_category c1
topic3 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id, :published => false)
topic3.add_category c2
random_topics = discussion.random_topics_one_by_category
random_topics_categories = random_topics.map {|t| t.categories.map{|c|c.name}}.flatten
assert_equal ["Category 1"],random_topics_categories
end
should 'return list of random topics returning 2 topics when having 2 categories' do
discussion.save!
c1 = create(Category, :name => "Category 1", :environment_id => profile.environment.id)
c2 = create(Category, :name => "Category 2", :environment_id => profile.environment.id)
discussion.categories << c1
discussion.categories << c2
topic1 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic1.add_category c1
topic2 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic2.add_category c1
topic3 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic3.add_category c2
topic4 = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
topic4.add_category c2
random_topics = discussion.random_topics_one_by_category
assert_equal 2,random_topics.count
end
should 'return list of proposals' do
discussion.save!
topic = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :parent_id => topic.id)
proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :parent_id => topic.id)
assert_equivalent [proposal1, proposal2], discussion.topics_proposals
end
should 'return max score' do
person = fast_create(Person)
discussion = ProposalsDiscussionPlugin::Discussion.create!(:profile => person, :name => 'discussion', :allow_topics => false)
proposal1 = ProposalsDiscussionPlugin::Proposal.create!(:parent => discussion, :profile => profile, :name => "proposal1", :abstract => 'abstract')
proposal2 = ProposalsDiscussionPlugin::Proposal.create!(:parent => discussion, :profile => profile, :name => "proposal2", :abstract => 'abstract')
10.times { Comment.create!(:source => proposal1, :body => "comment", :author => person) }
5.times { Comment.create!(:source => proposal2, :body => "comment", :author => person) }
assert_equal 10, discussion.max_score
end
should 'allow new proposals if discussion phase is proposals' do
discussion.phase = :proposals
assert discussion.allow_new_proposals?
end
should 'not allow new proposals if discussion phase is vote' do
discussion.phase = :vote
assert !discussion.allow_new_proposals?
end
should 'not allow new proposals if discussion phase is finish' do
discussion.phase = :finish
assert !discussion.allow_new_proposals?
end
should 'not allow proposal creation by normal users if discussion is moderated' do
discussion.moderate_proposals = true
person = fast_create(Person)
proposal = ProposalsDiscussionPlugin::Proposal.create!(:parent => discussion, :profile => profile, :name => "proposal1", :abstract => 'abstract')
assert !discussion.allow_create?(person)
end
should 'allow proposal creation by admin users even when discussion is moderated' do
discussion.moderate_proposals = true
person = fast_create(Person)
give_permission(person, 'post_content', profile)
proposal = ProposalsDiscussionPlugin::Proposal.create!(:parent => discussion, :profile => profile, :name => "proposal1", :abstract => 'abstract')
assert discussion.allow_create?(person)
end
end