environment_mailing_test.rb
5.16 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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
require_relative "../test_helper"
class EnvironmentMailingTest < ActiveSupport::TestCase
def setup
ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.deliveries = []
@environment = fast_create(Environment, :name => 'Network')
@person_1 = create_user('user_one', :environment_id => @environment.id).person
@person_2 = create_user('user_two', :environment_id => @environment.id).person
end
attr_reader :environment, :person_1, :person_2
should 'require source_id' do
mailing = EnvironmentMailing.new
mailing.valid?
assert mailing.errors[:source_id].any?
mailing.source_id = environment.id
mailing.valid?
refute mailing.errors[:source_id].any?
end
should 'return environment name' do
mailing = new_mailing(environment)
assert_equal environment.name, mailing.source.name
end
should 'return environment with source_id' do
mailing = new_mailing(environment)
assert_equal environment, mailing.source
end
should 'return signature message' do
mailing = new_mailing(environment)
assert_equal 'Sent by Network.', mailing.signature_message
end
should 'return url for environment on url' do
mailing = new_mailing(environment)
domain = Domain.new(:name => 'noosfero.net')
domain.is_default = true
environment.domains << domain
assert_equal 'http://noosfero.net', mailing.url
end
should 'display name and email on generate_from' do
mailing = new_mailing(environment).tap do |m|
m.person = person_1
end
assert_equal "#{environment.name} <#{environment.noreply_email}>", mailing.generate_from
end
should 'deliver mailing to each recipient after create' do
mailing = create_mailing(environment, :person => person_1)
process_delayed_job_queue
assert_equal 2, ActionMailer::Base.deliveries.count
end
should 'create mailing sent to each recipient after delivering mailing' do
mailing = create_mailing(environment, :person => person_1)
assert_difference 'MailingSent.count', 2 do
process_delayed_job_queue
end
end
should 'change locale according to the mailing locale' do
mailing = create_mailing(environment, :locale => 'pt', :person => person_1)
Noosfero.expects(:with_locale).with('pt')
process_delayed_job_queue
end
should 'return recipients' do
mailing = create_mailing(environment, :locale => 'pt', :person => person_1)
assert_equal [person_1, person_2], mailing.recipients
end
should 'return recipients according to limit' do
mailing = create_mailing(environment, :locale => 'pt', :person => person_1)
assert_equal [person_1], mailing.recipients(0, 1)
end
should 'return all environment admins when recipients_roles is set to environment_administrator' do
environment.add_admin person_1
mailing = create_mailing(environment, :locale => 'pt', :person => person_1)
mailing.recipients_roles = ["environment_administrator"]
mailing.save
assert_equivalent(environment.admins, mailing.recipients)
end
should 'return all people with role profile_admin when recipients_roles is set to profile_admin' do
environment.add_admin person_1
mailing = create_mailing(environment, :locale => 'pt', :person => person_1)
mailing.recipients_roles = ["profile_admin"]
mailing.save
role = Role.find_by(key: 'profile_admin', environment_id: environment)
profile_admins = Person.by_role(role).where(environment_id: environment)
assert_equivalent(profile_admins, mailing.recipients)
end
should 'return all people when recipients_roles is not set' do
environment.add_admin person_1
mailing = create_mailing(environment, :locale => 'pt', :person => person_1)
mailing.save
assert_equivalent(environment.people, mailing.recipients)
end
should 'return profile_admins and environment admins when both roles are set as recipients' do
environment.add_admin person_1
mailing = create_mailing(environment, :locale => 'pt', :person => person_1)
mailing.recipients_roles = ["profile_admin", "environment_administrator"]
mailing.save
role = Role.find_by(key: 'profile_admin', environment_id: environment)
profile_admins = Person.by_role(role).where(environment_id: environment)
assert_equivalent(profile_admins+environment.admins, mailing.recipients)
end
should 'return true if already sent mailing to a recipient' do
mailing = create_mailing(environment, :person => person_1)
process_delayed_job_queue
assert mailing.mailing_sents.find_by(person_id: person_1.id)
end
should 'return false if did not sent mailing to a recipient' do
recipient = fast_create(Person)
person = Person['user_one']
mailing = create_mailing(environment, :person => person_1)
process_delayed_job_queue
refute mailing.mailing_sents.find_by(person_id: recipient.id)
end
def new_mailing(environment)
m = EnvironmentMailing.new(:subject => 'Hello', :body => 'We have some news')
m.source = environment
m
end
def create_mailing(environment, options)
new_mailing(environment).tap do |m|
m.locale = options[:locale]
m.person = options[:person]
m.save!
end
end
end