message_train 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +20 -0
  3. data/.ruby-gemset +1 -1
  4. data/.scss-lint.yml +7 -0
  5. data/.simplecov +1 -1
  6. data/.travis.yml +1 -1
  7. data/Gemfile +6 -2
  8. data/LICENSE.txt +2 -2
  9. data/README.rdoc +5 -5
  10. data/Rakefile +22 -21
  11. data/VERSION +1 -1
  12. data/app/assets/javascripts/message_train.js +1 -1
  13. data/app/assets/stylesheets/message_train.scss +29 -19
  14. data/app/controllers/concerns/message_train_support.rb +41 -37
  15. data/app/controllers/message_train/application_controller.rb +1 -0
  16. data/app/controllers/message_train/boxes_controller.rb +5 -4
  17. data/app/controllers/message_train/conversations_controller.rb +8 -7
  18. data/app/controllers/message_train/messages_controller.rb +25 -22
  19. data/app/controllers/message_train/participants_controller.rb +27 -23
  20. data/app/controllers/message_train/unsubscribes_controller.rb +37 -23
  21. data/app/helpers/message_train/application_helper.rb +6 -8
  22. data/app/helpers/message_train/attachments_helper.rb +12 -4
  23. data/app/helpers/message_train/boxes_helper.rb +38 -11
  24. data/app/helpers/message_train/collectives_helper.rb +38 -12
  25. data/app/helpers/message_train/conversations_helper.rb +43 -35
  26. data/app/helpers/message_train/messages_helper.rb +32 -25
  27. data/app/mailers/message_train/application_mailer.rb +7 -4
  28. data/app/mailers/message_train/previews/receipt_mailer_preview.rb +2 -3
  29. data/app/mailers/message_train/receipt_mailer.rb +14 -4
  30. data/app/models/message_train/attachment.rb +41 -25
  31. data/app/models/message_train/box.rb +159 -122
  32. data/app/models/message_train/conversation.rb +84 -41
  33. data/app/models/message_train/ignore.rb +8 -2
  34. data/app/models/message_train/message.rb +72 -42
  35. data/app/models/message_train/receipt.rb +30 -17
  36. data/app/models/message_train/unsubscribe.rb +1 -0
  37. data/app/views/application/404.html.haml +1 -1
  38. data/app/views/layouts/mailer.html.haml +2 -2
  39. data/app/views/layouts/mailer.text.haml +1 -1
  40. data/app/views/message_train/application/_attachment_fields.html.haml +1 -1
  41. data/app/views/message_train/application/_widget.html.haml +1 -1
  42. data/app/views/message_train/application/results.json.jbuilder +1 -1
  43. data/app/views/message_train/boxes/_dropdown_list.html.haml +1 -1
  44. data/app/views/message_train/boxes/_list_item.html.haml +1 -1
  45. data/app/views/message_train/boxes/show.html.haml +1 -1
  46. data/app/views/message_train/collectives/_dropdown_list.html.haml +1 -1
  47. data/app/views/message_train/collectives/_list_item.html.haml +1 -1
  48. data/app/views/message_train/conversations/_deleted_toggle.html.haml +1 -1
  49. data/app/views/message_train/conversations/_ignored_toggle.html.haml +2 -2
  50. data/app/views/message_train/conversations/_read_toggle.html.haml +1 -1
  51. data/app/views/message_train/conversations/_toggle.html.haml +1 -1
  52. data/app/views/message_train/conversations/_trashed_toggle.html.haml +1 -1
  53. data/app/views/message_train/conversations/show.html.haml +2 -2
  54. data/app/views/message_train/conversations/show.json.jbuilder +5 -1
  55. data/app/views/message_train/messages/_form.html.haml +1 -1
  56. data/app/views/message_train/messages/_message.html.haml +6 -6
  57. data/app/views/message_train/messages/_toggle.html.haml +1 -1
  58. data/app/views/message_train/messages/show.json.jbuilder +5 -1
  59. data/app/views/message_train/participants/_participant.json.jbuilder +1 -1
  60. data/app/views/message_train/participants/index.json.jbuilder +1 -1
  61. data/app/views/message_train/participants/show.json.jbuilder +1 -1
  62. data/app/views/message_train/receipt_mailer/notification_email.html.haml +1 -1
  63. data/app/views/message_train/receipt_mailer/notification_email.text.haml +1 -1
  64. data/app/views/message_train/unsubscribes/index.html.haml +1 -1
  65. data/config/environment.rb +1 -1
  66. data/config/initializers/date_time.rb +2 -2
  67. data/config/locales/en.yml +1 -1
  68. data/config/routes.rb +37 -15
  69. data/lib/generators/message_train/install/install_generator.rb +26 -11
  70. data/lib/generators/message_train/install/templates/initializer.rb +0 -2
  71. data/lib/generators/message_train/utils.rb +11 -4
  72. data/lib/message_train/configuration.rb +4 -5
  73. data/lib/message_train/engine.rb +1 -7
  74. data/lib/message_train/localization.rb +14 -18
  75. data/lib/message_train/mixin.rb +211 -150
  76. data/lib/message_train/version.rb +1 -0
  77. data/lib/message_train.rb +7 -6
  78. data/message_train.gemspec +24 -11
  79. data/spec/controllers/message_train/boxes_controller_spec.rb +63 -15
  80. data/spec/controllers/message_train/concerns_spec.rb +17 -13
  81. data/spec/controllers/message_train/conversations_controller_spec.rb +44 -12
  82. data/spec/controllers/message_train/messages_controller_spec.rb +87 -40
  83. data/spec/controllers/message_train/participants_controller_spec.rb +10 -4
  84. data/spec/controllers/message_train/unsubscribes_controller_spec.rb +43 -13
  85. data/spec/dummy/Rakefile +2 -1
  86. data/spec/dummy/app/assets/stylesheets/application.css.scss +7 -23
  87. data/spec/dummy/app/controllers/application_controller.rb +7 -7
  88. data/spec/dummy/app/models/group.rb +1 -1
  89. data/spec/dummy/app/models/role.rb +11 -7
  90. data/spec/dummy/app/models/user.rb +6 -5
  91. data/spec/dummy/app/views/layouts/_top_navigation.html.haml +1 -1
  92. data/spec/dummy/app/views/layouts/application.html.haml +1 -1
  93. data/spec/dummy/app/views/pages/index.html.haml +1 -1
  94. data/spec/dummy/config/application.rb +23 -17
  95. data/spec/dummy/config/environments/development.rb +5 -4
  96. data/spec/dummy/config/environments/production.rb +10 -6
  97. data/spec/dummy/config/environments/test.rb +4 -3
  98. data/spec/dummy/config/initializers/assets.rb +2 -1
  99. data/spec/dummy/config/initializers/backtrace_silencers.rb +4 -2
  100. data/spec/dummy/config/initializers/bootstrap_leather.rb +1 -1
  101. data/spec/dummy/config/initializers/devise.rb +63 -44
  102. data/spec/dummy/config/initializers/high_voltage.rb +1 -1
  103. data/spec/dummy/config/initializers/message_train.rb +5 -2
  104. data/spec/dummy/config/initializers/mime_types.rb +1 -1
  105. data/spec/dummy/config/initializers/paperclip.rb +5 -2
  106. data/spec/dummy/config/initializers/rolify.rb +3 -2
  107. data/spec/dummy/config/initializers/wrap_parameters.rb +2 -1
  108. data/spec/dummy/config/routes.rb +1 -3
  109. data/spec/dummy/config/settings.yml +1 -1
  110. data/spec/dummy/db/schema.rb +98 -98
  111. data/spec/dummy/db/seeds/conversations.seeds.rb +160 -160
  112. data/spec/dummy/db/seeds/development/conversations.seeds.rb +6 -2
  113. data/spec/dummy/db/seeds/groups.seeds.rb +11 -12
  114. data/spec/dummy/db/seeds/test/attachments.seeds.rb +13 -3
  115. data/spec/dummy/db/seeds/test/conversations.seeds.rb +6 -2
  116. data/spec/dummy/db/seeds/unsubscribes.seeds.rb +1 -1
  117. data/spec/dummy/db/seeds/users.seeds.rb +47 -42
  118. data/spec/dummy/db/test.sqlite3 +0 -0
  119. data/spec/factories/attachment.rb +6 -2
  120. data/spec/factories/group.rb +1 -4
  121. data/spec/factories/message.rb +29 -23
  122. data/spec/factories/user.rb +6 -4
  123. data/spec/features/boxes_spec.rb +76 -24
  124. data/spec/features/conversations_spec.rb +19 -7
  125. data/spec/features/messages_spec.rb +24 -5
  126. data/spec/features/unsubscribes_spec.rb +36 -9
  127. data/spec/helpers/message_train/application_helper_spec.rb +1 -1
  128. data/spec/helpers/message_train/attachment_helper_spec.rb +27 -12
  129. data/spec/helpers/message_train/boxes_helper_spec.rb +1 -1
  130. data/spec/helpers/message_train/collectives_helper_spec.rb +25 -9
  131. data/spec/helpers/message_train/conversations_helper_spec.rb +239 -120
  132. data/spec/helpers/message_train/messages_helper_spec.rb +137 -81
  133. data/spec/message_train_spec.rb +3 -2
  134. data/spec/models/group_spec.rb +12 -9
  135. data/spec/models/message_train/attachment_spec.rb +33 -30
  136. data/spec/models/message_train/box_spec.rb +243 -60
  137. data/spec/models/message_train/conversation_spec.rb +16 -12
  138. data/spec/models/message_train/ignore_spec.rb +3 -1
  139. data/spec/models/message_train/message_spec.rb +22 -7
  140. data/spec/models/message_train/receipt_spec.rb +14 -4
  141. data/spec/models/role_spec.rb +10 -6
  142. data/spec/models/user_spec.rb +74 -22
  143. data/spec/rails_helper.rb +9 -4
  144. data/spec/spec_helper.rb +6 -54
  145. data/spec/support/controller_behaviors.rb +8 -5
  146. data/spec/support/controller_macros.rb +2 -2
  147. data/spec/support/factory_girl.rb +1 -1
  148. data/spec/support/feature_behaviors.rb +42 -13
  149. data/spec/support/loaded_site/attachments.rb +8 -0
  150. data/spec/support/loaded_site/conversations.rb +73 -0
  151. data/spec/support/{groups.rb → loaded_site/groups.rb} +1 -1
  152. data/spec/support/{loaded_site.rb → loaded_site/loaded_site.rb} +1 -1
  153. data/spec/support/{messages.rb → loaded_site/messages.rb} +13 -5
  154. data/spec/support/{roles.rb → loaded_site/roles.rb} +1 -1
  155. data/spec/support/{users.rb → loaded_site/users.rb} +1 -1
  156. data/spec/support/shared_connection.rb +8 -6
  157. data/spec/support/utilities.rb +10 -10
  158. metadata +67 -10
  159. data/spec/dummy/config/unused/temporary_i18n_debugging.rb +0 -12
  160. data/spec/support/attachments.rb +0 -4
  161. data/spec/support/conversations.rb +0 -23
@@ -9,11 +9,18 @@ module MessageTrain
9
9
  let(:user_all_box) { first_user.box(:all) }
10
10
  let(:user_drafts_box) { first_user.box(:drafts) }
11
11
  let(:user_ignored_box) { first_user.box(:ignored) }
12
- let(:owned_group_box) { first_user.collective_boxes[:groups].find{ |x| x.parent.slug == 'first-group' } }
13
- let(:membered_group_box) { first_user.collective_boxes[:groups].find{ |x| x.parent.slug == 'membered-group' } }
12
+ let(:owned_group_box) do
13
+ first_user.collective_boxes[:groups].find do |x|
14
+ x.parent.slug == 'first-group'
15
+ end
16
+ end
17
+ let(:membered_group_box) do
18
+ first_user.collective_boxes[:groups].find do |x|
19
+ x.parent.slug == 'membered-group'
20
+ end
21
+ end
14
22
 
15
23
  describe 'Scopes and Methods' do
16
-
17
24
  describe '#unread_count' do
18
25
  subject { user_in_box.unread_count }
19
26
  it { should be >= 2 }
@@ -85,7 +92,11 @@ module MessageTrain
85
92
  describe '#new_message' do
86
93
  context 'when conversation is set' do
87
94
  let(:expected_recipients) { { 'users' => 'second-user' } }
88
- subject { user_in_box.new_message(message_train_conversation_id: unread_conversation.id) }
95
+ subject do
96
+ user_in_box.new_message(
97
+ message_train_conversation_id: unread_conversation.id
98
+ )
99
+ end
89
100
  it { should be_a_new MessageTrain::Message }
90
101
  its(:subject) { should eq 'Re: Unread Conversation' }
91
102
  its(:recipients_to_save) { should eq expected_recipients }
@@ -100,28 +111,56 @@ module MessageTrain
100
111
 
101
112
  describe '#send_message' do
102
113
  describe 'to a singular recipient' do
103
- let(:message) { {recipients_to_save: {'users' => 'second-user'}, subject: 'Message to send', body: '...'} }
114
+ let(:message) do
115
+ {
116
+ recipients_to_save: { 'users' => 'second-user' },
117
+ subject: 'Message to send',
118
+ body: '...'
119
+ }
120
+ end
104
121
  subject { user_in_box.send_message(message) }
105
122
  it { should be_a MessageTrain::Message }
106
123
  end
107
124
  describe 'to a collective recipient' do
108
125
  describe 'when recipient does not accept from sender' do
109
126
  context 'message status' do
110
- let(:message) { {recipients_to_save: {'groups' => 'membered-group'}, subject: 'Message to send', body: '...'} }
127
+ let(:message) do
128
+ {
129
+ recipients_to_save: { 'groups' => 'membered-group' },
130
+ subject: 'Message to send',
131
+ body: '...'
132
+ }
133
+ end
111
134
  subject { membered_group_box.send_message(message) }
112
135
  it { should be false }
113
136
  end
114
137
  context 'box status' do
115
- let(:message) { {recipients_to_save: {'groups' => 'membered-group'}, subject: 'Message to send', body: '...'} }
138
+ let(:message) do
139
+ {
140
+ recipients_to_save: { 'groups' => 'membered-group' },
141
+ subject: 'Message to send',
142
+ body: '...'
143
+ }
144
+ end
116
145
  before do
117
146
  membered_group_box.send_message(message)
118
147
  end
119
- subject { membered_group_box.errors.all.find { |x| x[:css_id] == 'message_train_message' } }
148
+ subject do
149
+ membered_group_box.errors.all.find do |x|
150
+ x[:css_id] == 'message_train_message'
151
+ end
152
+ end
120
153
  its([:message]) { should eq 'Invalid sender for Group 2' }
121
154
  end
122
155
  end
123
156
  describe 'when recipient accepts from sender' do
124
- let(:message) { {recipients_to_save: {'groups' => 'first-group'}, subject: 'Message to send', body: '...'} }
157
+ let(:message) do
158
+ {
159
+ recipients_to_save: { 'groups' => 'first-group' },
160
+ subject: 'Message to send',
161
+ body: '...'
162
+ }
163
+ end
125
164
  subject { owned_group_box.send_message(message) }
126
165
  it { should be_a MessageTrain::Message }
127
166
  end
@@ -130,30 +169,75 @@ module MessageTrain
130
169
 
131
170
  describe '#update_message' do
132
171
  describe 'to a singular recipient' do
133
- let(:message) { {recipients_to_save: {'users' => 'second-user'}, subject: 'Message to send', body: '...', draft: false } }
172
+ let(:message) do
173
+ {
174
+ recipients_to_save: { 'users' => 'second-user' },
175
+ subject: 'Message to send',
176
+ body: '...',
177
+ draft: false
178
+ }
179
+ end
134
180
  subject { user_in_box.update_message(draft_message, message) }
135
181
  it { should be_a MessageTrain::Message }
136
182
  end
137
183
  describe 'to a collective recipient' do
138
184
  describe 'when recipient does not accept from sender' do
139
185
  context 'message status' do
140
- let(:message) { {recipients_to_save: {'groups' => 'membered-group'}, subject: 'Message to send', body: '...', draft: false } }
141
- subject { membered_group_box.update_message(owned_group_draft.messages.first, message) }
186
+ let(:message) do
187
+ {
188
+ recipients_to_save: { 'groups' => 'membered-group' },
189
+ subject: 'Message to send',
190
+ body: '...',
191
+ draft: false
192
+ }
193
+ end
194
+ subject do
195
+ membered_group_box.update_message(
196
+ owned_group_draft.messages.first,
197
+ message
198
+ )
199
+ end
142
200
  it { should be false }
143
201
  end
144
202
  context 'box status' do
145
- let(:message) { {recipients_to_save: {'groups' => 'membered-group'}, subject: 'Message to send', body: '...', draft: false } }
203
+ let(:message) do
204
+ {
205
+ recipients_to_save: { 'groups' => 'membered-group' },
206
+ subject: 'Message to send', body: '...', draft: false
207
+ }
208
+ end
146
209
  let(:owned_group_draft_id) { owned_group_draft.messages.first.id }
147
210
  before do
148
- membered_group_box.update_message(owned_group_draft.messages.first, message)
211
+ membered_group_box.update_message(
212
+ owned_group_draft.messages.first,
213
+ message
214
+ )
215
+ end
216
+ subject do
217
+ membered_group_box.errors.all.find do |x|
218
+ x[:css_id] == "message_train_message_#{owned_group_draft_id}"
219
+ end
220
+ end
221
+ its([:message]) do
222
+ should eq "Access to Message #{owned_group_draft_id} denied"
149
223
  end
150
- subject { membered_group_box.errors.all.find { |x| x[:css_id] == "message_train_message_#{owned_group_draft_id}" } }
151
- its([:message]) { should eq "Access to Message #{owned_group_draft_id} denied" }
152
224
  end
153
225
  end
154
226
  describe 'when recipient accepts from sender' do
155
- let(:message) { {recipients_to_save: {'groups' => 'first-group'}, subject: 'Message to send', body: '...', draft: false } }
156
- subject { owned_group_box.update_message(owned_group_draft.messages.first, message) }
227
+ let(:message) do
228
+ {
229
+ recipients_to_save: { 'groups' => 'first-group' },
230
+ subject: 'Message to send',
231
+ body: '...',
232
+ draft: false
233
+ }
234
+ end
235
+ subject do
236
+ owned_group_box.update_message(
237
+ owned_group_draft.messages.first,
238
+ message
239
+ )
240
+ end
157
241
  it { should be_a MessageTrain::Message }
158
242
  end
159
243
  end
@@ -162,7 +246,12 @@ module MessageTrain
162
246
  describe '#ignore' do
163
247
  context 'when not present' do
164
248
  it 'raises an ActiveRecord::RecordNotFound error' do
165
- expect {last_user.box.ignore(99999999)}.to raise_error(ActiveRecord::RecordNotFound, /Couldn't find MessageTrain::Conversation with 'id'=99999999/)
249
+ expect do
250
+ last_user.box.ignore(99_999_999)
251
+ end.to raise_error(
252
+ ActiveRecord::RecordNotFound,
253
+ /Couldn't find MessageTrain::Conversation with 'id'=99999999/
254
+ )
166
255
  end
167
256
  end
168
257
  context 'when bad type' do
@@ -170,27 +259,33 @@ module MessageTrain
170
259
  last_user.box.ignore(first_user)
171
260
  end
172
261
  subject { last_user.box.errors.all.first[:message] }
173
- it { should match /Cannot ignore User/ }
262
+ it { should match(/Cannot ignore User/) }
174
263
  end
175
264
  context 'when not authorized' do
176
265
  before do
177
266
  last_user.box.ignore(read_conversation)
178
267
  end
179
268
  subject { last_user.box.errors.all.first[:message] }
180
- it { should match /Access to Conversation ([0-9]+) denied/ }
269
+ it { should match(/Access to Conversation ([0-9]+) denied/) }
181
270
  end
182
271
  context 'when authorized' do
183
272
  before do
184
273
  user_in_box.ignore(read_conversation)
185
274
  end
186
- subject { read_conversation.is_ignored?(first_user) }
187
- it { should be true}
275
+ subject { read_conversation.participant_ignored?(first_user) }
276
+ it { should be true }
188
277
  end
189
278
  end
279
+
190
280
  describe '#unignore' do
191
281
  context 'when not present' do
192
282
  it 'raises an ActiveRecord::RecordNotFound error' do
193
- expect {last_user.box.unignore(99999999)}.to raise_error(ActiveRecord::RecordNotFound, /Couldn't find MessageTrain::Conversation with 'id'=99999999/)
283
+ expect do
284
+ last_user.box.unignore(99_999_999)
285
+ end.to raise_error(
286
+ ActiveRecord::RecordNotFound,
287
+ /Couldn't find MessageTrain::Conversation with 'id'=99999999/
288
+ )
194
289
  end
195
290
  end
196
291
  context 'when bad type' do
@@ -198,23 +293,24 @@ module MessageTrain
198
293
  last_user.box.unignore(first_user)
199
294
  end
200
295
  subject { last_user.box.errors.all.first[:message] }
201
- it { should match /Cannot unignore User/ }
296
+ it { should match(/Cannot unignore User/) }
202
297
  end
203
298
  context 'when not authorized' do
204
299
  before do
205
300
  last_user.box.unignore(read_conversation)
206
301
  end
207
302
  subject { last_user.box.errors.all.first[:message] }
208
- it { should match /Access to Conversation ([0-9]+) denied/ }
303
+ it { should match(/Access to Conversation ([0-9]+) denied/) }
209
304
  end
210
305
  context 'when authorized' do
211
306
  before do
212
307
  user_in_box.unignore(ignored_conversation)
213
308
  end
214
- subject { ignored_conversation.is_ignored?(first_user) }
309
+ subject { ignored_conversation.participant_ignored?(first_user) }
215
310
  it { should be false }
216
311
  end
217
312
  end
313
+
218
314
  describe '#title' do
219
315
  context 'with division set to :in' do
220
316
  subject { user_in_box.title }
@@ -245,7 +341,14 @@ module MessageTrain
245
341
  describe '#mark' do
246
342
  context 'when not present' do
247
343
  it 'raises an ActiveRecord::RecordNotFound error' do
248
- expect {last_user.box.mark('read', conversations: ['99999999'])}.to raise_error(ActiveRecord::RecordNotFound, /Couldn't find MessageTrain::Conversation/)
344
+ expect do
345
+ last_user.box.mark('read', conversations: ['99999999'])
346
+ end.to(
347
+ raise_error(
348
+ ActiveRecord::RecordNotFound,
349
+ /Couldn't find MessageTrain::Conversation/
350
+ )
351
+ )
249
352
  end
250
353
  end
251
354
  context 'when bad type' do
@@ -253,7 +356,7 @@ module MessageTrain
253
356
  last_user.box.mark('read', users: [first_user.id.to_s])
254
357
  end
255
358
  subject { last_user.box.errors.all.first[:message] }
256
- it { should match /Cannot mark users/ }
359
+ it { should match(/Cannot mark users/) }
257
360
  end
258
361
  context 'when bad object' do
259
362
  describe 'given singular box' do
@@ -261,15 +364,25 @@ module MessageTrain
261
364
  last_user.box.mark('read', conversations: Time.now)
262
365
  end
263
366
  subject { last_user.box.errors.all.first[:message] }
264
- it { should match /Cannot mark with Time/ }
367
+ it { should match(/Cannot mark with Time/) }
265
368
  end
266
369
  describe 'given collective box' do
267
- # This test is mostly here to test the error handling for collective boxes, not so much the mark method
370
+ # This test is mostly here to test the error handling for collective
371
+ # boxes, not so much the mark method
268
372
  before do
269
- first_group.box(:in, first_user).mark('read', conversations: Time.now)
373
+ first_group.box(:in, first_user)
374
+ .mark('read', conversations: Time.now)
270
375
  end
271
376
  subject { first_group.box(:in, first_user).errors.all }
272
- it { should eq [{ css_id: "box", path: "/collectives/groups:first-group/box/in", message: "Cannot mark with Time"}] }
377
+ it do
378
+ should eq [
379
+ {
380
+ css_id: 'box',
381
+ path: '/collectives/groups:first-group/box/in',
382
+ message: 'Cannot mark with Time'
383
+ }
384
+ ]
385
+ end
273
386
  end
274
387
  end
275
388
  context 'when not authorized' do
@@ -277,11 +390,14 @@ module MessageTrain
277
390
  last_user.box.mark('unread', conversations: read_conversation)
278
391
  end
279
392
  subject { last_user.box.errors.all.first[:message] }
280
- it { should match /Access to Conversation ([0-9]+) denied/ }
393
+ it { should match(/Access to Conversation ([0-9]+) denied/) }
281
394
  end
282
395
  context 'when authorized' do
283
396
  before do
284
- user_in_box.mark('unread', conversations: [read_conversation.id.to_s])
397
+ user_in_box.mark(
398
+ 'unread',
399
+ conversations: [read_conversation.id.to_s]
400
+ )
285
401
  end
286
402
  subject { read_conversation.includes_read_for?(first_user) }
287
403
  it { should be false }
@@ -290,7 +406,12 @@ module MessageTrain
290
406
 
291
407
  describe '#message' do
292
408
  describe 'when there are errors' do
293
- let(:message) { {recipients_to_save: {'users' => 'second-user'}, subject: ''} }
409
+ let(:message) do
410
+ {
411
+ recipients_to_save: { 'users' => 'second-user' },
412
+ subject: ''
413
+ }
414
+ end
294
415
  before do
295
416
  first_user.box.send_message(message)
296
417
  end
@@ -298,22 +419,33 @@ module MessageTrain
298
419
  it { should eq "Subject can't be blank" }
299
420
  end
300
421
  describe 'when there are results' do
301
- let(:message) { {recipients_to_save: {'users' => 'second-user'}, subject: 'Valid'} }
422
+ let(:message) do
423
+ {
424
+ recipients_to_save: { 'users' => 'second-user' },
425
+ subject: 'Valid'
426
+ }
427
+ end
302
428
  before do
303
429
  first_user.box.send_message(message)
304
430
  end
305
431
  subject { first_user.box.message }
306
- it { should eq "Message sent." }
432
+ it { should eq 'Message sent.' }
307
433
  end
308
434
  describe 'when there is nothing to do' do
309
435
  subject { first_user.box.message }
310
- it { should eq 'Nothing to do'}
436
+ it { should eq 'Nothing to do' }
311
437
  end
312
438
  end
313
439
 
314
440
  describe '#send_message' do
315
441
  context 'when message is valid' do
316
- let(:valid_attributes) { { recipients_to_save: {'users' => 'second-user, third-user'}, subject: 'Test Message', body: 'This is the content.' } }
442
+ let(:valid_attributes) do
443
+ {
444
+ recipients_to_save: { 'users' => 'second-user, third-user' },
445
+ subject: 'Test Message',
446
+ body: 'This is the content.'
447
+ }
448
+ end
317
449
  subject { user_in_box.send_message(valid_attributes) }
318
450
  it { should be_a MessageTrain::Message }
319
451
  its(:new_record?) { should be false }
@@ -323,10 +455,18 @@ module MessageTrain
323
455
  its(:draft) { should be false }
324
456
  end
325
457
  context 'when message is invalid' do
326
- let(:invalid_attributes) { { recipients_to_save: {'users' => 'second-user, third-user'}, subject: nil, body: 'This is the content.' } }
458
+ let(:invalid_attributes) do
459
+ {
460
+ recipients_to_save: { 'users' => 'second-user, third-user' },
461
+ subject: nil,
462
+ body: 'This is the content.'
463
+ }
464
+ end
327
465
  subject { user_in_box.send_message(invalid_attributes) }
328
466
  it { should be_a_new MessageTrain::Message }
329
- its('errors.full_messages.to_sentence') { should eq "Subject can't be blank" }
467
+ its('errors.full_messages.to_sentence') do
468
+ should eq "Subject can't be blank"
469
+ end
330
470
  its(:recipients) { should be_empty }
331
471
  end
332
472
  end
@@ -334,13 +474,17 @@ module MessageTrain
334
474
  describe '#update_message' do
335
475
  describe 'when message is valid' do
336
476
  context 'and still a draft' do
337
- let(:valid_attributes) { {
338
- recipients_to_save: {'users' => 'second-user, third-user'},
477
+ let(:valid_attributes) do
478
+ {
479
+ recipients_to_save: { 'users' => 'second-user, third-user' },
339
480
  subject: 'Test Message',
340
481
  body: 'This is the content.',
341
482
  draft: true
342
- } }
343
- subject { user_in_box.update_message(draft_message, valid_attributes) }
483
+ }
484
+ end
485
+ subject do
486
+ user_in_box.update_message(draft_message, valid_attributes)
487
+ end
344
488
  it { should be_a MessageTrain::Message }
345
489
  its('errors.full_messages.to_sentence') { should eq '' }
346
490
  its(:recipients) { should be_empty }
@@ -348,13 +492,17 @@ module MessageTrain
348
492
  its(:draft) { should be true }
349
493
  end
350
494
  context 'and no longer a draft' do
351
- let(:valid_attributes) { {
352
- recipients_to_save: {'users' => 'second-user, third-user'},
495
+ let(:valid_attributes) do
496
+ {
497
+ recipients_to_save: { 'users' => 'second-user, third-user' },
353
498
  subject: 'Test Message',
354
499
  body: 'This is the content.',
355
500
  draft: false
356
- } }
357
- subject { user_in_box.update_message(draft_message, valid_attributes) }
501
+ }
502
+ end
503
+ subject do
504
+ user_in_box.update_message(draft_message, valid_attributes)
505
+ end
358
506
  it { should be_a MessageTrain::Message }
359
507
  its('errors.full_messages.to_sentence') { should eq '' }
360
508
  its(:recipients) { should include second_user }
@@ -364,15 +512,21 @@ module MessageTrain
364
512
  end
365
513
  end
366
514
  context 'when message is invalid' do
367
- let(:invalid_attributes) { {
368
- recipients_to_save: {'users' => 'second-user, third-user'},
515
+ let(:invalid_attributes) do
516
+ {
517
+ recipients_to_save: { 'users' => 'second-user, third-user' },
369
518
  subject: '',
370
519
  body: 'This is the content.',
371
520
  draft: false
372
- } }
373
- subject { user_in_box.update_message(draft_message, invalid_attributes) }
521
+ }
522
+ end
523
+ subject do
524
+ user_in_box.update_message(draft_message, invalid_attributes)
525
+ end
374
526
  it { should be_a MessageTrain::Message }
375
- its('errors.full_messages.to_sentence') { should eq "Subject can't be blank" }
527
+ its('errors.full_messages.to_sentence') do
528
+ should eq "Subject can't be blank"
529
+ end
376
530
  its(:recipients) { should be_empty }
377
531
  end
378
532
  end
@@ -384,7 +538,15 @@ module MessageTrain
384
538
  first_user.box.authorize(second_user)
385
539
  end
386
540
  subject { first_user.box.errors.all }
387
- it { should eq [{ css_id: 'user', path: nil, message: 'Cannot authorize User'}] }
541
+ it do
542
+ should eq(
543
+ [
544
+ css_id: 'user',
545
+ path: nil,
546
+ message: 'Cannot authorize User'
547
+ ]
548
+ )
549
+ end
388
550
  end
389
551
  describe 'when conversation' do
390
552
  describe 'is authorized' do
@@ -411,20 +573,41 @@ module MessageTrain
411
573
  # This is really here to test the error handling for this case.
412
574
  describe 'when message' do
413
575
  describe 'is authorized' do
414
- subject { first_group.box(:in, first_user).authorize(group_message) }
576
+ subject do
577
+ first_group.box(:in, first_user).authorize(group_message)
578
+ end
415
579
  it { should be true }
416
580
  end
417
581
  describe 'is not authorized' do
418
582
  describe 'result' do
419
- subject { membered_group.box(:in, third_user).authorize(membered_group_message) }
583
+ subject do
584
+ membered_group.box(:in, third_user).authorize(
585
+ membered_group_message
586
+ )
587
+ end
420
588
  it { should be false }
421
589
  end
422
590
  describe 'box status' do
423
591
  before do
424
- membered_group.box(:in, third_user).authorize(membered_group_message)
592
+ membered_group.box(:in, third_user).authorize(
593
+ membered_group_message
594
+ )
425
595
  end
426
596
  subject { membered_group.box(:in, third_user).errors.all }
427
- it { should eq [{ css_id: "message_train_message_#{membered_group_message.id}", path: "/collectives/groups:membered-group/box/in/messages/#{membered_group_message.id}", message: "Access to Message #{membered_group_message.id} denied"}] }
597
+ it do
598
+ should(
599
+ eq [
600
+ {
601
+ css_id: 'message_train_message_'\
602
+ "#{membered_group_message.id}",
603
+ path: '/collectives/groups:membered-group/box/in/'\
604
+ "messages/#{membered_group_message.id}",
605
+ message: 'Access to Message '\
606
+ "#{membered_group_message.id} denied"
607
+ }
608
+ ]
609
+ )
610
+ end
428
611
  end
429
612
  end
430
613
  end
@@ -12,16 +12,15 @@ module MessageTrain
12
12
  end
13
13
 
14
14
  describe 'Scopes and Methods' do
15
-
16
15
  describe '.ignored' do
17
16
  let(:results) { MessageTrain::Conversation.ignored(first_user) }
18
- subject { results.first.is_ignored?(first_user) }
17
+ subject { results.first.participant_ignored?(first_user) }
19
18
  it { should be true }
20
19
  end
21
20
 
22
21
  describe '.unignored' do
23
22
  let(:results) { MessageTrain::Conversation.unignored(first_user) }
24
- subject { results.first.is_ignored?(first_user) }
23
+ subject { results.first.participant_ignored?(first_user) }
25
24
  it { should be false }
26
25
  end
27
26
 
@@ -41,7 +40,9 @@ module MessageTrain
41
40
  end
42
41
 
43
42
  describe '.with_messages_through' do
44
- subject { MessageTrain::Conversation.with_messages_through(first_group) }
43
+ subject do
44
+ MessageTrain::Conversation.with_messages_through(first_group)
45
+ end
45
46
  it { should include group_conversation }
46
47
  end
47
48
 
@@ -52,16 +53,16 @@ module MessageTrain
52
53
  it { should_not include third_user }
53
54
  end
54
55
 
55
- describe '#set_ignored and #is_ignored?' do
56
- subject { ignored_conversation.is_ignored?(first_user) }
56
+ describe '#participant_ignore and #participant_ignored?' do
57
+ subject { ignored_conversation.participant_ignored?(first_user) }
57
58
  it { should be true }
58
59
  end
59
60
 
60
- describe '#set_unignored' do
61
+ describe '#participant_unignore' do
61
62
  before do
62
- ignored_conversation.set_unignored(first_user)
63
+ ignored_conversation.participant_unignore(first_user)
63
64
  end
64
- subject { ignored_conversation.is_ignored?(first_user) }
65
+ subject { ignored_conversation.participant_ignored?(first_user) }
65
66
  it { should be false }
66
67
  end
67
68
 
@@ -142,13 +143,17 @@ module MessageTrain
142
143
  end
143
144
  describe '.find_by_subject' do
144
145
  # Testing super on method_missing
145
- subject { MessageTrain::Conversation.find_by_subject('Unread Conversation') }
146
+ subject do
147
+ MessageTrain::Conversation.find_by_subject('Unread Conversation')
148
+ end
146
149
  it { should be_a(MessageTrain::Conversation) }
147
150
  end
148
151
  describe '#missing_method' do
149
152
  # Testing super on method_missing
150
153
  it 'raises a NoMethodError' do
151
- expect {unread_conversation.missing_method}.to raise_error(NoMethodError)
154
+ expect { unread_conversation.missing_method }.to(
155
+ raise_error(NoMethodError)
156
+ )
152
157
  end
153
158
  end
154
159
  describe '.with_ready_by' do
@@ -170,7 +175,6 @@ module MessageTrain
170
175
  it { should_not include unread_conversation }
171
176
  end
172
177
  end
173
-
174
178
  end
175
179
  end
176
180
  end
@@ -11,7 +11,9 @@ module MessageTrain
11
11
  describe 'Scopes and Methods' do
12
12
  include_context 'loaded site'
13
13
  describe '.find_all_by_participant' do
14
- subject { ignored_conversation.ignores.find_all_by_participant(first_user) }
14
+ subject do
15
+ ignored_conversation.ignores.find_all_by_participant(first_user)
16
+ end
15
17
  its(:first) { should be_a MessageTrain::Ignore }
16
18
  end
17
19
  describe '.conversations' do