proposal_test.rb
4.43 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
require File.dirname(__FILE__) + '/../test_helper'
class ProposalTest < ActiveSupport::TestCase
def setup
@profile = fast_create(Community)
@person = fast_create(Person)
@discussion = ProposalsDiscussionPlugin::Discussion.create!(:name => 'discussion', :profile => person, :allow_topics => false)
@proposal = ProposalsDiscussionPlugin::Proposal.new(:name => 'test', :abstract => 'abstract', :profile => @profile, :parent => @discussion)
@proposal.created_by = @person
end
attr_reader :profile, :proposal, :person, :discussion
should 'save a proposal' do
proposal.abstract = 'abstract'
assert proposal.save
end
should 'do not save a proposal without abstract' do
proposal.abstract = nil
proposal.save
assert proposal.errors['abstract'].present?
end
should 'allow edition if user is the author' do
assert proposal.allow_edit?(person)
end
should 'do not allow edition if user is not the author' do
assert !proposal.allow_edit?(fast_create(Person))
end
should 'return body when to_html was called with feed=true' do
assert_equal proposal.body, proposal.to_html(:feed => true)
end
should 'return a proc when to_html was called with feed=false' do
assert proposal.to_html(:feed => false).kind_of?(Proc)
end
should 'return a proc when to_html was called with no feed parameter' do
assert proposal.to_html.kind_of?(Proc)
end
should 'return proposals by discussion' do
topic = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :parent_id => topic.id)
proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal)
proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :parent_id => topic.id)
assert_equivalent [proposal1, proposal3], ProposalsDiscussionPlugin::Proposal.from_discussion(discussion)
end
should 'return discussion associated with a proposal' do
assert_equal discussion, proposal.discussion
end
should 'return discussion associated with a proposal topic' do
topic = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
proposal = fast_create(ProposalsDiscussionPlugin::Proposal, :parent_id => topic.id)
assert_equal discussion, proposal.discussion
end
should 'return normalized score' do
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 1, proposal1.reload.normalized_score
assert_equal 0.5, proposal2.reload.normalized_score
end
should 'create a new proposal if the current phase is proposals' do
discussion.update_attribute(:phase, :proposals)
assert proposal.save
end
should 'do not create a new proposal if the current phase is vote' do
discussion.update_attribute(:phase, :vote)
assert !proposal.save
end
should 'do not create a new proposal if the current phase is finish' do
discussion.update_attribute(:phase, :finish)
assert !proposal.save
end
should 'do not create a new proposal if the current phase is invalid' do
discussion.update_attribute(:phase, '')
assert !proposal.save
end
should 'do not update a proposal if a discussion is not in proposals phase' do
discussion.update_attribute(:phase, :vote)
proposal.body = "changed"
assert !proposal.save
end
should 'allow update of proposals if a discussion is in proposals phase' do
proposal.body = "changed"
assert proposal.save
end
should 'allow vote if discussion phase is vote' do
discussion.update_attribute(:phase, :vote)
assert proposal.allow_vote?
end
should 'allow vote if discussion phase is proposals' do
discussion.update_attribute(:phase, :proposals)
assert proposal.allow_vote?
end
should 'not allow vote if discussion phase is finish' do
discussion.update_attribute(:phase, :finish)
assert !proposal.allow_vote?
end
should 'set a proposal location' do
location = fast_create(Region)
proposal.save!
proposal.add_category(location)
assert_equal [location], proposal.locations
end
end