create_community_test.rb
3.28 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
require_relative "../test_helper"
class CreateCommunityTest < ActiveSupport::TestCase
def setup
@person = create_user('testing').person
end
attr_reader :person
should 'provide needed data' do
task = CreateCommunity.new
Community.fields + %w[ name closed tag_list ].each do |field|
assert task.respond_to?(field)
assert task.respond_to?("#{field}=")
end
end
should 'require a requestor' do
task = CreateCommunity.new(:name => 'community test', :target => Environment.default)
task.valid?
assert task.errors[:requestor_id.to_s].present?
task.requestor = person
task.valid?
assert !task.errors[:requestor_id.to_s].present?
end
should 'actually create a community when finishing the task and associate the task requestor as its admin' do
task = CreateCommunity.create!({
:name => 'My new community',
:requestor => person,
:target => Environment.default,
})
assert_difference 'Community.count' do
task.finish
end
assert_equal person, Community['my-new-community'].admins.first
end
should 'override message methods from Task' do
specific = CreateCommunity.new
%w[ task_created_message task_finished_message task_cancelled_message ].each do |method|
assert_nothing_raised NotImplementedError do
specific.send(method)
end
end
end
should 'provide a message to be sent to the target' do
assert_not_nil CreateCommunity.new(:name => 'test comm', :requestor => person).target_notification_message
end
should 'report as approved when approved' do
request = CreateCommunity.new
request.stubs(:status).returns(Task::Status::FINISHED)
assert request.approved?
end
should 'report as rejected when rejected' do
request = CreateCommunity.new
request.stubs(:status).returns(Task::Status::CANCELLED)
assert request.rejected?
end
should 'create a community with image when finishing the task' do
task = CreateCommunity.create!({
:name => 'My new community',
:requestor => person,
:target => Environment.default,
:image_builder => {:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')}
})
assert_equal 'rails.png', task.image.filename
assert_difference 'Community.count' do
task.finish
end
assert_equal 'rails.png', Community['my-new-community'].image.filename
end
should 'have target notification message' do
task = CreateCommunity.new(:name => 'community test', :target => Environment.default, :requestor => person)
assert_match(/requested to create community.*to approve or reject/, task.target_notification_message)
end
should 'have target notification description' do
task = CreateCommunity.new(:name => 'community test', :target => Environment.default, :requestor => person)
assert_match(/#{task.requestor.name} wants to create community #{task.subject}/, task.target_notification_description)
end
should 'deliver target notification message' do
task = CreateCommunity.new(:name => 'community test', :target => Environment.default, :requestor => person)
email = TaskMailer.target_notification(task, task.target_notification_message).deliver
assert_match(/#{task.requestor.name} wants to create community #{task.subject}/, email.subject)
end
end