rpush 2.7.0 → 3.0.0.rc1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +41 -0
- data/README.md +36 -15
- data/lib/generators/rpush_migration_generator.rb +1 -0
- data/lib/generators/templates/add_adm.rb +1 -1
- data/lib/generators/templates/add_alert_is_json_to_rapns_notifications.rb +1 -1
- data/lib/generators/templates/add_app_to_rapns.rb +1 -1
- data/lib/generators/templates/add_fail_after_to_rpush_notifications.rb +1 -1
- data/lib/generators/templates/add_gcm.rb +1 -1
- data/lib/generators/templates/add_rpush.rb +11 -11
- data/lib/generators/templates/add_wpns.rb +1 -1
- data/lib/generators/templates/create_rapns_apps.rb +1 -1
- data/lib/generators/templates/create_rapns_feedback.rb +1 -1
- data/lib/generators/templates/create_rapns_notifications.rb +1 -1
- data/lib/generators/templates/rename_rapns_to_rpush.rb +1 -1
- data/lib/generators/templates/rpush.rb +1 -1
- data/lib/generators/templates/rpush_2_0_0_updates.rb +1 -1
- data/lib/generators/templates/rpush_2_1_0_updates.rb +1 -1
- data/lib/generators/templates/rpush_2_6_0_updates.rb +1 -1
- data/lib/generators/templates/rpush_2_7_0_updates.rb +1 -1
- data/lib/generators/templates/rpush_3_0_0_updates.rb +11 -0
- data/lib/rpush.rb +2 -9
- data/lib/rpush/apns_feedback.rb +4 -0
- data/lib/rpush/cli.rb +2 -2
- data/lib/rpush/client/active_model.rb +3 -0
- data/lib/rpush/client/active_model/apns/notification.rb +11 -1
- data/lib/rpush/client/active_model/apns2/app.rb +15 -0
- data/lib/rpush/client/active_model/apns2/notification.rb +9 -0
- data/lib/rpush/client/active_record.rb +3 -0
- data/lib/rpush/client/active_record/apns/feedback.rb +0 -4
- data/lib/rpush/client/active_record/apns2/app.rb +11 -0
- data/lib/rpush/client/active_record/apns2/notification.rb +10 -0
- data/lib/rpush/client/active_record/app.rb +0 -4
- data/lib/rpush/client/active_record/notification.rb +0 -7
- data/lib/rpush/client/redis.rb +3 -0
- data/lib/rpush/client/redis/apns2/app.rb +11 -0
- data/lib/rpush/client/redis/apns2/notification.rb +11 -0
- data/lib/rpush/client/redis/notification.rb +1 -0
- data/lib/rpush/daemon.rb +5 -3
- data/lib/rpush/daemon/apns2.rb +10 -0
- data/lib/rpush/daemon/apns2/delivery.rb +127 -0
- data/lib/rpush/daemon/dispatcher/apns_http2.rb +50 -0
- data/lib/rpush/daemon/dispatcher/apns_tcp.rb +1 -1
- data/lib/rpush/daemon/dispatcher/http.rb +1 -1
- data/lib/rpush/daemon/gcm/delivery.rb +5 -5
- data/lib/rpush/daemon/service_config_methods.rb +4 -3
- data/lib/rpush/daemon/store/active_record/reconnectable.rb +11 -3
- data/lib/rpush/daemon/synchronizer.rb +14 -12
- data/lib/rpush/version.rb +12 -1
- data/spec/functional/apns2_spec.rb +232 -0
- data/spec/functional/apns_spec.rb +1 -2
- data/spec/functional/synchronization_spec.rb +29 -0
- data/spec/spec_helper.rb +0 -5
- data/spec/support/active_record_setup.rb +2 -1
- data/spec/unit/apns_feedback_spec.rb +9 -2
- data/spec/unit/client/active_record/apns/notification_spec.rb +34 -2
- data/spec/unit/daemon/store/active_record/reconnectable_spec.rb +30 -0
- data/spec/unit_spec_helper.rb +2 -21
- metadata +256 -29
- data/lib/rpush/client/mongoid.rb +0 -36
- data/lib/rpush/client/mongoid/adm/app.rb +0 -14
- data/lib/rpush/client/mongoid/adm/notification.rb +0 -11
- data/lib/rpush/client/mongoid/apns/app.rb +0 -11
- data/lib/rpush/client/mongoid/apns/feedback.rb +0 -24
- data/lib/rpush/client/mongoid/apns/notification.rb +0 -15
- data/lib/rpush/client/mongoid/app.rb +0 -23
- data/lib/rpush/client/mongoid/gcm/app.rb +0 -11
- data/lib/rpush/client/mongoid/gcm/notification.rb +0 -11
- data/lib/rpush/client/mongoid/notification.rb +0 -51
- data/lib/rpush/client/mongoid/wns/app.rb +0 -14
- data/lib/rpush/client/mongoid/wns/badge_notification.rb +0 -15
- data/lib/rpush/client/mongoid/wns/notification.rb +0 -11
- data/lib/rpush/client/mongoid/wns/raw_notification.rb +0 -11
- data/lib/rpush/client/mongoid/wpns/app.rb +0 -11
- data/lib/rpush/client/mongoid/wpns/notification.rb +0 -11
- data/lib/rpush/daemon/store/mongoid.rb +0 -157
- data/spec/support/config/mongoid.yml +0 -69
- data/spec/support/mongoid_setup.rb +0 -10
- data/spec/unit/daemon/store/mongoid_spec.rb +0 -339
@@ -1,69 +0,0 @@
|
|
1
|
-
development:
|
2
|
-
# Configure available database sessions. (required)
|
3
|
-
sessions:
|
4
|
-
# Defines the default session. (required)
|
5
|
-
default:
|
6
|
-
# Defines the name of the default database that Mongoid can connect to.
|
7
|
-
# (required).
|
8
|
-
database: rpush_development
|
9
|
-
# Provides the hosts the default session can connect to. Must be an array
|
10
|
-
# of host:port pairs. (required)
|
11
|
-
hosts:
|
12
|
-
- localhost:27017
|
13
|
-
options:
|
14
|
-
# Change the default write concern. (default = { w: 1 })
|
15
|
-
# write:
|
16
|
-
# w: 1
|
17
|
-
|
18
|
-
# Change the default consistency model to primary, secondary.
|
19
|
-
# 'secondary' will send reads to secondaries, 'primary' sends everything
|
20
|
-
# to master. (default: primary)
|
21
|
-
# read: secondary_preferred
|
22
|
-
|
23
|
-
# How many times Moped should attempt to retry an operation after
|
24
|
-
# failure. (default: The number of nodes in the cluster)
|
25
|
-
# max_retries: 20
|
26
|
-
|
27
|
-
# The time in seconds that Moped should wait before retrying an
|
28
|
-
# operation on failure. (default: 0.25)
|
29
|
-
# retry_interval: 0.25
|
30
|
-
# Configure Mongoid specific options. (optional)
|
31
|
-
options:
|
32
|
-
# Includes the root model name in json serialization. (default: false)
|
33
|
-
# include_root_in_json: false
|
34
|
-
|
35
|
-
# Include the _type field in serialization. (default: false)
|
36
|
-
# include_type_for_serialization: false
|
37
|
-
|
38
|
-
# Preload all models in development, needed when models use
|
39
|
-
# inheritance. (default: false)
|
40
|
-
# preload_models: false
|
41
|
-
|
42
|
-
# Protect id and type from mass assignment. (default: true)
|
43
|
-
# protect_sensitive_fields: true
|
44
|
-
|
45
|
-
# Raise an error when performing a #find and the document is not found.
|
46
|
-
# (default: true)
|
47
|
-
# raise_not_found_error: true
|
48
|
-
|
49
|
-
# Raise an error when defining a scope with the same name as an
|
50
|
-
# existing method. (default: false)
|
51
|
-
# scope_overwrite_exception: false
|
52
|
-
|
53
|
-
# Use Active Support's time zone in conversions. (default: true)
|
54
|
-
# use_activesupport_time_zone: true
|
55
|
-
|
56
|
-
# Ensure all times are UTC in the app side. (default: false)
|
57
|
-
# use_utc: false
|
58
|
-
test:
|
59
|
-
sessions:
|
60
|
-
default:
|
61
|
-
database: rpush_test
|
62
|
-
hosts:
|
63
|
-
- localhost:27017
|
64
|
-
options:
|
65
|
-
read: primary
|
66
|
-
# In the test environment we lower the retries and retry interval to
|
67
|
-
# low amounts for fast failures.
|
68
|
-
max_retries: 1
|
69
|
-
retry_interval: 0
|
@@ -1,339 +0,0 @@
|
|
1
|
-
require 'unit_spec_helper'
|
2
|
-
require 'rpush/daemon/store/mongoid'
|
3
|
-
|
4
|
-
describe Rpush::Daemon::Store::Mongoid do
|
5
|
-
let(:app) { Rpush::Client::Mongoid::Apns::App.create!(name: 'my_app', environment: 'development', certificate: TEST_CERT) }
|
6
|
-
let(:notification) { Rpush::Client::Mongoid::Apns::Notification.create!(device_token: "a" * 64, app: app) }
|
7
|
-
let(:store) { Rpush::Daemon::Store::Mongoid.new }
|
8
|
-
let(:time) { Time.now.utc }
|
9
|
-
let(:logger) { double(Rpush::Logger, error: nil, internal_logger: nil) }
|
10
|
-
|
11
|
-
before do
|
12
|
-
allow(Rpush).to receive_messages(logger: logger)
|
13
|
-
allow(Time).to receive_messages(now: time)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'updates an notification' do
|
17
|
-
expect(notification).to receive(:save!)
|
18
|
-
store.update_notification(notification)
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'updates an app' do
|
22
|
-
expect(app).to receive(:save!)
|
23
|
-
store.update_app(app)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'finds an app by ID' do
|
27
|
-
expect(store.app(app.id)).to eq(app)
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'finds all apps' do
|
31
|
-
expect(store.all_apps).to eq([app])
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'translates an Integer notification ID' do
|
35
|
-
expect(store.translate_integer_notification_id(notification.integer_id)).to eq(notification.id)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'returns the pending notification count' do
|
39
|
-
notification
|
40
|
-
expect(store.pending_delivery_count).to eq(1)
|
41
|
-
end
|
42
|
-
|
43
|
-
describe 'deliverable_notifications' do
|
44
|
-
it 'loads notifications in batches' do
|
45
|
-
Rpush.config.batch_size = 5000
|
46
|
-
relation = double.as_null_object
|
47
|
-
expect(relation).to receive(:limit).with(5000)
|
48
|
-
allow(relation).to receive_messages(to_a: [])
|
49
|
-
allow(store).to receive_messages(ready_for_delivery: relation)
|
50
|
-
store.deliverable_notifications(Rpush.config.batch_size)
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'loads an undelivered notification without deliver_after set' do
|
54
|
-
notification.update_attributes!(delivered: false, deliver_after: nil)
|
55
|
-
expect(store.deliverable_notifications(Rpush.config.batch_size)).to eq [notification]
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'loads an notification with a deliver_after time in the past' do
|
59
|
-
notification.update_attributes!(delivered: false, deliver_after: 1.hour.ago)
|
60
|
-
expect(store.deliverable_notifications(Rpush.config.batch_size)).to eq [notification]
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'does not load an notification with a deliver_after time in the future' do
|
64
|
-
notification.update_attributes!(delivered: false, deliver_after: 1.hour.from_now)
|
65
|
-
expect(store.deliverable_notifications(Rpush.config.batch_size)).to be_empty
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'does not load a previously delivered notification' do
|
69
|
-
notification.update_attributes!(delivered: true, delivered_at: time)
|
70
|
-
expect(store.deliverable_notifications(Rpush.config.batch_size)).to be_empty
|
71
|
-
end
|
72
|
-
|
73
|
-
it "does not enqueue a notification that has previously failed delivery" do
|
74
|
-
notification.update_attributes!(delivered: false, failed: true)
|
75
|
-
expect(store.deliverable_notifications(Rpush.config.batch_size)).to be_empty
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe 'mark_retryable' do
|
80
|
-
it 'increments the retry count' do
|
81
|
-
expect do
|
82
|
-
store.mark_retryable(notification, time)
|
83
|
-
end.to change(notification, :retries).by(1)
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'sets the deliver after timestamp' do
|
87
|
-
deliver_after = time + 10.seconds
|
88
|
-
expect do
|
89
|
-
store.mark_retryable(notification, deliver_after)
|
90
|
-
end.to change(notification, :deliver_after).to(deliver_after)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'saves the notification without validation' do
|
94
|
-
expect(notification).to receive(:save!).with(validate: false)
|
95
|
-
store.mark_retryable(notification, time)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'does not save the notification if persist: false' do
|
99
|
-
expect(notification).not_to receive(:save!)
|
100
|
-
store.mark_retryable(notification, time, persist: false)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
describe 'mark_batch_retryable' do
|
105
|
-
let(:deliver_after) { time + 10.seconds }
|
106
|
-
|
107
|
-
it 'sets the attributes on the object for use in reflections' do
|
108
|
-
store.mark_batch_retryable([notification], deliver_after)
|
109
|
-
expect(notification.deliver_after).to eq deliver_after
|
110
|
-
expect(notification.retries).to eq 1
|
111
|
-
end
|
112
|
-
|
113
|
-
it 'increments the retired count' do
|
114
|
-
expect do
|
115
|
-
store.mark_batch_retryable([notification], deliver_after)
|
116
|
-
notification.reload
|
117
|
-
end.to change(notification, :retries).by(1)
|
118
|
-
end
|
119
|
-
|
120
|
-
it 'sets the deliver after timestamp' do
|
121
|
-
expect do
|
122
|
-
store.mark_batch_retryable([notification], deliver_after)
|
123
|
-
notification.reload
|
124
|
-
end.to change { notification.deliver_after.try(:utc).to_s }.to(deliver_after.utc.to_s)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe 'mark_delivered' do
|
129
|
-
it 'marks the notification as delivered' do
|
130
|
-
expect do
|
131
|
-
store.mark_delivered(notification, time)
|
132
|
-
end.to change(notification, :delivered).to(true)
|
133
|
-
end
|
134
|
-
|
135
|
-
it 'sets the time the notification was delivered' do
|
136
|
-
expect do
|
137
|
-
store.mark_delivered(notification, time)
|
138
|
-
notification.reload
|
139
|
-
end.to change { notification.delivered_at.try(:utc).to_s }.to(time.to_s)
|
140
|
-
end
|
141
|
-
|
142
|
-
it 'saves the notification without validation' do
|
143
|
-
expect(notification).to receive(:save!).with(validate: false)
|
144
|
-
store.mark_delivered(notification, time)
|
145
|
-
end
|
146
|
-
|
147
|
-
it 'does not save the notification if persist: false' do
|
148
|
-
expect(notification).not_to receive(:save!)
|
149
|
-
store.mark_delivered(notification, time, persist: false)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
describe 'mark_batch_delivered' do
|
154
|
-
it 'sets the attributes on the object for use in reflections' do
|
155
|
-
store.mark_batch_delivered([notification])
|
156
|
-
expect(notification.delivered_at).to eq time
|
157
|
-
expect(notification.delivered).to be_truthy
|
158
|
-
end
|
159
|
-
|
160
|
-
it 'marks the notifications as delivered' do
|
161
|
-
expect do
|
162
|
-
store.mark_batch_delivered([notification])
|
163
|
-
notification.reload
|
164
|
-
end.to change(notification, :delivered).to(true)
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'sets the time the notifications were delivered' do
|
168
|
-
expect do
|
169
|
-
store.mark_batch_delivered([notification])
|
170
|
-
notification.reload
|
171
|
-
end.to change { notification.delivered_at.try(:utc).to_s }.to(time.to_s)
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
describe 'mark_failed' do
|
176
|
-
it 'marks the notification as not delivered' do
|
177
|
-
store.mark_failed(notification, nil, '', time)
|
178
|
-
expect(notification.delivered).to eq(false)
|
179
|
-
end
|
180
|
-
|
181
|
-
it 'marks the notification as failed' do
|
182
|
-
expect do
|
183
|
-
store.mark_failed(notification, nil, '', time)
|
184
|
-
notification.reload
|
185
|
-
end.to change(notification, :failed).to(true)
|
186
|
-
end
|
187
|
-
|
188
|
-
it 'sets the time the notification delivery failed' do
|
189
|
-
expect do
|
190
|
-
store.mark_failed(notification, nil, '', time)
|
191
|
-
notification.reload
|
192
|
-
end.to change { notification.failed_at.try(:utc).to_s }.to(time.to_s)
|
193
|
-
end
|
194
|
-
|
195
|
-
it 'sets the error code' do
|
196
|
-
expect do
|
197
|
-
store.mark_failed(notification, 42, '', time)
|
198
|
-
end.to change(notification, :error_code).to(42)
|
199
|
-
end
|
200
|
-
|
201
|
-
it 'sets the error description' do
|
202
|
-
expect do
|
203
|
-
store.mark_failed(notification, 42, 'Weeee', time)
|
204
|
-
end.to change(notification, :error_description).to('Weeee')
|
205
|
-
end
|
206
|
-
|
207
|
-
it 'saves the notification without validation' do
|
208
|
-
expect(notification).to receive(:save!).with(validate: false)
|
209
|
-
store.mark_failed(notification, nil, '', time)
|
210
|
-
end
|
211
|
-
|
212
|
-
it 'does not save the notification if persist: false' do
|
213
|
-
expect(notification).not_to receive(:save!)
|
214
|
-
store.mark_failed(notification, nil, '', time, persist: false)
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
describe 'mark_batch_failed' do
|
219
|
-
it 'sets the attributes on the object for use in reflections' do
|
220
|
-
store.mark_batch_failed([notification], 123, 'an error')
|
221
|
-
expect(notification.failed_at).to eq time
|
222
|
-
expect(notification.delivered_at).to be_nil
|
223
|
-
expect(notification.delivered).to eq(false)
|
224
|
-
expect(notification.failed).to be_truthy
|
225
|
-
expect(notification.error_code).to eq 123
|
226
|
-
expect(notification.error_description).to eq 'an error'
|
227
|
-
end
|
228
|
-
|
229
|
-
it 'marks the notification as not delivered' do
|
230
|
-
store.mark_batch_failed([notification], nil, '')
|
231
|
-
notification.reload
|
232
|
-
expect(notification.delivered).to be_falsey
|
233
|
-
end
|
234
|
-
|
235
|
-
it 'marks the notification as failed' do
|
236
|
-
expect do
|
237
|
-
store.mark_batch_failed([notification], nil, '')
|
238
|
-
notification.reload
|
239
|
-
end.to change(notification, :failed).to(true)
|
240
|
-
end
|
241
|
-
|
242
|
-
it 'sets the time the notification delivery failed' do
|
243
|
-
expect do
|
244
|
-
store.mark_batch_failed([notification], nil, '')
|
245
|
-
notification.reload
|
246
|
-
end.to change { notification.failed_at.try(:utc).to_s }.to(time.to_s)
|
247
|
-
end
|
248
|
-
|
249
|
-
it 'sets the error code' do
|
250
|
-
expect do
|
251
|
-
store.mark_batch_failed([notification], 42, '')
|
252
|
-
notification.reload
|
253
|
-
end.to change(notification, :error_code).to(42)
|
254
|
-
end
|
255
|
-
|
256
|
-
it 'sets the error description' do
|
257
|
-
expect do
|
258
|
-
store.mark_batch_failed([notification], 42, 'Weeee')
|
259
|
-
notification.reload
|
260
|
-
end.to change(notification, :error_description).to('Weeee')
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
|
-
describe 'create_apns_feedback' do
|
265
|
-
it 'creates the Feedback record' do
|
266
|
-
expect(Rpush::Client::Mongoid::Apns::Feedback).to receive(:create!).with(
|
267
|
-
failed_at: time, device_token: 'ab' * 32, app: app)
|
268
|
-
store.create_apns_feedback(time, 'ab' * 32, app)
|
269
|
-
end
|
270
|
-
end
|
271
|
-
|
272
|
-
describe 'create_gcm_notification' do
|
273
|
-
let(:data) { { data: true } }
|
274
|
-
let(:attributes) { { device_token: 'ab' * 32 } }
|
275
|
-
let(:registration_ids) { %w(123 456) }
|
276
|
-
let(:deliver_after) { time + 10.seconds }
|
277
|
-
let(:args) { [attributes, data, registration_ids, deliver_after, app] }
|
278
|
-
|
279
|
-
it 'sets the given attributes' do
|
280
|
-
new_notification = store.create_gcm_notification(*args)
|
281
|
-
expect(new_notification.device_token).to eq 'ab' * 32
|
282
|
-
end
|
283
|
-
|
284
|
-
it 'sets the given data' do
|
285
|
-
new_notification = store.create_gcm_notification(*args)
|
286
|
-
expect(new_notification.data).to eq(data: true)
|
287
|
-
end
|
288
|
-
|
289
|
-
it 'sets the given registration IDs' do
|
290
|
-
new_notification = store.create_gcm_notification(*args)
|
291
|
-
expect(new_notification.registration_ids).to eq registration_ids
|
292
|
-
end
|
293
|
-
|
294
|
-
it 'sets the deliver_after timestamp' do
|
295
|
-
new_notification = store.create_gcm_notification(*args)
|
296
|
-
expect(new_notification.deliver_after.utc.to_s).to eq deliver_after.to_s
|
297
|
-
end
|
298
|
-
|
299
|
-
it 'saves the new notification' do
|
300
|
-
new_notification = store.create_gcm_notification(*args)
|
301
|
-
expect(new_notification.new_record?).to be_falsey
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
describe 'create_adm_notification' do
|
306
|
-
let(:data) { { data: true } }
|
307
|
-
let(:attributes) { { app_id: app.id, collapse_key: 'ckey', delay_while_idle: true } }
|
308
|
-
let(:registration_ids) { %w(123 456) }
|
309
|
-
let(:deliver_after) { time + 10.seconds }
|
310
|
-
let(:args) { [attributes, data, registration_ids, deliver_after, app] }
|
311
|
-
|
312
|
-
it 'sets the given attributes' do
|
313
|
-
new_notification = store.create_adm_notification(*args)
|
314
|
-
expect(new_notification.app_id).to eq app.id
|
315
|
-
expect(new_notification.collapse_key).to eq 'ckey'
|
316
|
-
expect(new_notification.delay_while_idle).to be_truthy
|
317
|
-
end
|
318
|
-
|
319
|
-
it 'sets the given data' do
|
320
|
-
new_notification = store.create_adm_notification(*args)
|
321
|
-
expect(new_notification.data).to eq(data: true)
|
322
|
-
end
|
323
|
-
|
324
|
-
it 'sets the given registration IDs' do
|
325
|
-
new_notification = store.create_adm_notification(*args)
|
326
|
-
expect(new_notification.registration_ids).to eq registration_ids
|
327
|
-
end
|
328
|
-
|
329
|
-
it 'sets the deliver_after timestamp' do
|
330
|
-
new_notification = store.create_adm_notification(*args)
|
331
|
-
expect(new_notification.deliver_after.utc.to_s).to eq deliver_after.to_s
|
332
|
-
end
|
333
|
-
|
334
|
-
it 'saves the new notification' do
|
335
|
-
new_notification = store.create_adm_notification(*args)
|
336
|
-
expect(new_notification.new_record?).to be_falsey
|
337
|
-
end
|
338
|
-
end
|
339
|
-
end if mongoid?
|