pluginaweek-has_messages 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +59 -0
- data/LICENSE +20 -0
- data/README.rdoc +101 -0
- data/Rakefile +97 -0
- data/app/models/message.rb +145 -0
- data/app/models/message_recipient.rb +120 -0
- data/db/migrate/001_create_messages.rb +16 -0
- data/db/migrate/002_create_message_recipients.rb +17 -0
- data/init.rb +1 -0
- data/lib/has_messages.rb +72 -0
- data/test/app_root/app/models/user.rb +3 -0
- data/test/app_root/config/environment.rb +9 -0
- data/test/app_root/db/migrate/001_create_users.rb +11 -0
- data/test/app_root/db/migrate/002_migrate_has_messages_to_version_2.rb +13 -0
- data/test/factory.rb +57 -0
- data/test/functional/has_messages_test.rb +139 -0
- data/test/test_helper.rb +13 -0
- data/test/unit/message_recipient_test.rb +449 -0
- data/test/unit/message_test.rb +465 -0
- metadata +92 -0
@@ -0,0 +1,465 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
class MessageByDefaultTest < ActiveSupport::TestCase
|
4
|
+
def setup
|
5
|
+
@message = Message.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_not_have_a_sender
|
9
|
+
assert_nil @message.sender
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_not_have_a_subject
|
13
|
+
assert @message.subject.blank?
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_not_have_a_body
|
17
|
+
assert @message.body.blank?
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_be_in_the_unsent_state
|
21
|
+
assert_equal 'unsent', @message.state
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_not_be_hidden
|
25
|
+
assert_nil @message.hidden_at
|
26
|
+
assert !@message.hidden?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class MessageTest < ActiveSupport::TestCase
|
31
|
+
def test_should_be_valid_with_a_set_of_valid_attributes
|
32
|
+
message = new_message
|
33
|
+
assert message.valid?
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_should_require_a_sender_id
|
37
|
+
message = new_message(:sender => nil)
|
38
|
+
assert !message.valid?
|
39
|
+
assert message.errors.invalid?(:sender_id)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_require_a_sender_type
|
43
|
+
message = new_message(:sender => nil)
|
44
|
+
assert !message.valid?
|
45
|
+
assert message.errors.invalid?(:sender_type)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_should_require_a_state
|
49
|
+
message = new_message(:state => nil)
|
50
|
+
assert !message.valid?
|
51
|
+
assert message.errors.invalid?(:state)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_should_not_require_a_subject
|
55
|
+
message = new_message(:subject => nil)
|
56
|
+
assert message.valid?
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_should_not_require_a_body
|
60
|
+
message = new_message(:body => nil)
|
61
|
+
assert message.valid?
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_should_protect_attributes_from_mass_assignment
|
65
|
+
message = Message.new(
|
66
|
+
:id => 1,
|
67
|
+
:sender_id => 1,
|
68
|
+
:sender_type => 'User',
|
69
|
+
:subject => 'New features',
|
70
|
+
:body => 'Find out more!',
|
71
|
+
:to => [1, 2],
|
72
|
+
:cc => [3, 4],
|
73
|
+
:bcc => [5, 6],
|
74
|
+
:state => 'sent',
|
75
|
+
:hidden_at => Time.now
|
76
|
+
)
|
77
|
+
|
78
|
+
assert_nil message.id
|
79
|
+
assert_nil message.sender_id
|
80
|
+
assert message.sender_type.blank?
|
81
|
+
assert_equal 'New features', message.subject
|
82
|
+
assert_equal 'Find out more!', message.body
|
83
|
+
assert_equal [1, 2], message.to
|
84
|
+
assert_equal [3, 4], message.cc
|
85
|
+
assert_equal [5, 6], message.bcc
|
86
|
+
assert_equal 'unsent', message.state
|
87
|
+
assert_nil message.hidden_at
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class MessageBeforeBeingCreatedTest < ActiveSupport::TestCase
|
92
|
+
def setup
|
93
|
+
@message = new_message
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_should_not_have_any_recipients
|
97
|
+
assert @message.recipients.empty?
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_should_not_have_any_to_receivers
|
101
|
+
assert @message.to.empty?
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_should_allow_to_receivers_to_be_built
|
105
|
+
user = create_user(:login => 'coward')
|
106
|
+
@message.to(user)
|
107
|
+
assert_equal [user], @message.to
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_should_not_have_any_cc_receivers
|
111
|
+
assert @message.cc.empty?
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_should_allow_cc_receivers_to_be_built
|
115
|
+
user = create_user(:login => 'coward')
|
116
|
+
@message.cc(user)
|
117
|
+
assert_equal [user], @message.cc
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_should_not_have_any_bcc_receivers
|
121
|
+
assert @message.bcc.empty?
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_should_allow_bcc_receivers_to_be_built
|
125
|
+
user = create_user(:login => 'coward')
|
126
|
+
@message.bcc(user)
|
127
|
+
assert_equal [user], @message.bcc
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
class MesageAfterBeingCreatedTest < ActiveSupport::TestCase
|
132
|
+
def setup
|
133
|
+
@message = create_message
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_should_record_when_it_was_created
|
137
|
+
assert_not_nil @message.created_at
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_should_record_when_it_was_updated
|
141
|
+
assert_not_nil @message.updated_at
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_should_not_have_any_recipients
|
145
|
+
assert @message.recipients.empty?
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_should_not_have_any_to_receivers
|
149
|
+
assert @message.to.empty?
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_should_allow_to_receivers_to_be_built
|
153
|
+
user = create_user(:login => 'coward')
|
154
|
+
@message.to(user)
|
155
|
+
assert_equal [user], @message.to
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_should_not_have_any_cc_receivers
|
159
|
+
assert @message.cc.empty?
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_should_allow_cc_receivers_to_be_built
|
163
|
+
user = create_user(:login => 'coward')
|
164
|
+
@message.cc(user)
|
165
|
+
assert_equal [user], @message.cc
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_should_not_have_any_bcc_receivers
|
169
|
+
assert @message.bcc.empty?
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_should_allow_bcc_receivers_to_be_built
|
173
|
+
user = create_user(:login => 'coward')
|
174
|
+
@message.bcc(user)
|
175
|
+
assert_equal [user], @message.bcc
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
class MessageWithoutRecipientsTest < ActiveSupport::TestCase
|
180
|
+
def setup
|
181
|
+
@message = create_message
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_should_not_be_able_to_queue
|
185
|
+
assert !@message.queue
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_should_not_be_able_to_deliver
|
189
|
+
assert !@message.deliver
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
class MessageWithRecipientsTest < ActiveSupport::TestCase
|
194
|
+
def setup
|
195
|
+
@erich = create_user(:login => 'Erich')
|
196
|
+
@richard = create_user(:login => 'Richard')
|
197
|
+
@ralph = create_user(:login => 'Ralph')
|
198
|
+
@message = create_message(
|
199
|
+
:to => @erich,
|
200
|
+
:cc => @richard,
|
201
|
+
:bcc => @ralph
|
202
|
+
)
|
203
|
+
end
|
204
|
+
|
205
|
+
def test_should_have_recipients
|
206
|
+
assert_equal 3, @message.recipients.count
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_should_have_to_receivers
|
210
|
+
assert_equal [@erich], @message.to
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_should_have_cc_receivers
|
214
|
+
assert_equal [@richard], @message.cc
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_should_have_bcc_receivers
|
218
|
+
assert_equal [@ralph], @message.bcc
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_should_be_able_to_queue
|
222
|
+
assert @message.queue
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_should_be_able_to_deliver
|
226
|
+
assert @message.deliver
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
class MessageQueuedTest < ActiveSupport::TestCase
|
231
|
+
def setup
|
232
|
+
@message = create_message(:to => create_user(:login => 'coward'))
|
233
|
+
@message.queue
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_should_be_in_the_queued_state
|
237
|
+
assert_equal 'queued', @message.state
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_should_not_be_able_to_queue
|
241
|
+
assert !@message.queue
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_should_be_able_to_deliver
|
245
|
+
assert @message.deliver
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
class MessageDeliveredTest < ActiveSupport::TestCase
|
250
|
+
def setup
|
251
|
+
@message = create_message(:to => create_user(:login => 'coward'))
|
252
|
+
@message.deliver
|
253
|
+
end
|
254
|
+
|
255
|
+
def test_should_be_in_the_sent_state
|
256
|
+
assert_equal 'sent', @message.state
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_should_not_be_able_to_queue
|
260
|
+
assert !@message.queue
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_should_not_be_able_to_deliver
|
264
|
+
assert !@message.deliver
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
class MessageHiddenTest < ActiveSupport::TestCase
|
269
|
+
def setup
|
270
|
+
@message = create_message
|
271
|
+
@message.hide
|
272
|
+
end
|
273
|
+
|
274
|
+
def test_should_record_when_it_was_hidden
|
275
|
+
assert_not_nil @message.hidden_at
|
276
|
+
end
|
277
|
+
|
278
|
+
def test_should_be_hidden
|
279
|
+
assert @message.hidden?
|
280
|
+
end
|
281
|
+
|
282
|
+
def test_should_not_be_visible
|
283
|
+
assert !@message.visible?
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
class MessageUnhiddenTest < ActiveSupport::TestCase
|
288
|
+
def setup
|
289
|
+
@message = create_message
|
290
|
+
@message.hide
|
291
|
+
@message.unhide
|
292
|
+
end
|
293
|
+
|
294
|
+
def test_should_not_have_the_recorded_value_when_it_was_hidden
|
295
|
+
assert_nil @message.hidden_at
|
296
|
+
end
|
297
|
+
|
298
|
+
def test_should_not_be_hidden
|
299
|
+
assert !@message.hidden?
|
300
|
+
end
|
301
|
+
|
302
|
+
def test_should_be_visible
|
303
|
+
assert @message.visible?
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
class MessageForwardedTest < ActiveSupport::TestCase
|
308
|
+
def setup
|
309
|
+
@admin = create_user(:login => 'admin')
|
310
|
+
original_message = create_message(
|
311
|
+
:subject => 'Hello',
|
312
|
+
:body => 'How are you?',
|
313
|
+
:sender => @admin,
|
314
|
+
:to => create_user(:login => 'Erich'),
|
315
|
+
:cc => create_user(:login => 'Richard'),
|
316
|
+
:bcc => create_user(:login => 'Ralph')
|
317
|
+
)
|
318
|
+
@message = original_message.forward
|
319
|
+
end
|
320
|
+
|
321
|
+
def test_should_be_in_unsent_state
|
322
|
+
assert_equal 'unsent', @message.state
|
323
|
+
end
|
324
|
+
|
325
|
+
def test_should_not_be_hidden
|
326
|
+
assert !@message.hidden?
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_should_have_original_subject
|
330
|
+
assert_equal 'Hello', @message.subject
|
331
|
+
end
|
332
|
+
|
333
|
+
def test_should_have_original_body
|
334
|
+
assert_equal 'How are you?', @message.body
|
335
|
+
end
|
336
|
+
|
337
|
+
def test_should_use_same_sender
|
338
|
+
assert_equal @admin, @message.sender
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_should_not_include_to_recipients
|
342
|
+
assert @message.to.empty?
|
343
|
+
end
|
344
|
+
|
345
|
+
def test_should_not_include_cc_recipients
|
346
|
+
assert @message.cc.empty?
|
347
|
+
end
|
348
|
+
|
349
|
+
def test_should_not_include_bcc_recipients
|
350
|
+
assert @message.bcc.empty?
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
class MessageRepliedTest < ActiveSupport::TestCase
|
355
|
+
def setup
|
356
|
+
@admin = create_user(:login => 'admin')
|
357
|
+
@erich = create_user(:login => 'Erich')
|
358
|
+
@richard = create_user(:login => 'Richard')
|
359
|
+
@ralph = create_user(:login => 'Ralph')
|
360
|
+
|
361
|
+
original_message = create_message(
|
362
|
+
:subject => 'Hello',
|
363
|
+
:body => 'How are you?',
|
364
|
+
:sender => @admin,
|
365
|
+
:to => @erich,
|
366
|
+
:cc => @richard,
|
367
|
+
:bcc => @ralph
|
368
|
+
)
|
369
|
+
@message = original_message.reply
|
370
|
+
end
|
371
|
+
|
372
|
+
def test_should_be_in_unsent_state
|
373
|
+
assert_equal 'unsent', @message.state
|
374
|
+
end
|
375
|
+
|
376
|
+
def test_should_not_be_hidden
|
377
|
+
assert !@message.hidden?
|
378
|
+
end
|
379
|
+
|
380
|
+
def test_should_have_original_subject
|
381
|
+
assert_equal 'Hello', @message.subject
|
382
|
+
end
|
383
|
+
|
384
|
+
def test_should_have_original_body
|
385
|
+
assert_equal 'How are you?', @message.body
|
386
|
+
end
|
387
|
+
|
388
|
+
def test_should_use_same_sender
|
389
|
+
assert_equal @admin, @message.sender
|
390
|
+
end
|
391
|
+
|
392
|
+
def test_should_use_same_to_recipients
|
393
|
+
assert_equal [@erich], @message.to
|
394
|
+
end
|
395
|
+
|
396
|
+
def test_should_not_include_cc_recipients
|
397
|
+
assert @message.cc.empty?
|
398
|
+
end
|
399
|
+
|
400
|
+
def test_should_not_include_bcc_recipients
|
401
|
+
assert @message.bcc.empty?
|
402
|
+
end
|
403
|
+
end
|
404
|
+
|
405
|
+
class MessageRepliedToAllTest < ActiveSupport::TestCase
|
406
|
+
def setup
|
407
|
+
@admin = create_user(:login => 'admin')
|
408
|
+
@erich = create_user(:login => 'Erich')
|
409
|
+
@richard = create_user(:login => 'Richard')
|
410
|
+
@ralph = create_user(:login => 'Ralph')
|
411
|
+
|
412
|
+
original_message = create_message(
|
413
|
+
:subject => 'Hello',
|
414
|
+
:body => 'How are you?',
|
415
|
+
:sender => @admin,
|
416
|
+
:to => @erich,
|
417
|
+
:cc => @richard,
|
418
|
+
:bcc => @ralph
|
419
|
+
)
|
420
|
+
@message = original_message.reply_to_all
|
421
|
+
end
|
422
|
+
|
423
|
+
def test_should_be_in_unsent_state
|
424
|
+
assert_equal 'unsent', @message.state
|
425
|
+
end
|
426
|
+
|
427
|
+
def test_should_not_be_hidden
|
428
|
+
assert !@message.hidden?
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_should_have_original_subject
|
432
|
+
assert_equal 'Hello', @message.subject
|
433
|
+
end
|
434
|
+
|
435
|
+
def test_should_have_original_body
|
436
|
+
assert_equal 'How are you?', @message.body
|
437
|
+
end
|
438
|
+
|
439
|
+
def test_should_use_same_sender
|
440
|
+
assert_equal @admin, @message.sender
|
441
|
+
end
|
442
|
+
|
443
|
+
def test_should_use_same_to_recipients
|
444
|
+
assert_equal [@erich], @message.to
|
445
|
+
end
|
446
|
+
|
447
|
+
def test_should_use_same_cc_recipients
|
448
|
+
assert_equal [@richard], @message.cc
|
449
|
+
end
|
450
|
+
|
451
|
+
def test_should_use_same_bcc_recipients
|
452
|
+
assert_equal [@ralph], @message.bcc
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
class MessageAsAClassTest < ActiveSupport::TestCase
|
457
|
+
def setup
|
458
|
+
@hidden_message = create_message(:hidden_at => Time.now)
|
459
|
+
@visible_message = create_message
|
460
|
+
end
|
461
|
+
|
462
|
+
def test_should_include_only_visible_messages_in_visible_scope
|
463
|
+
assert_equal [@visible_message], Message.visible
|
464
|
+
end
|
465
|
+
end
|