rpush 2.3.1-java → 2.3.2-java

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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +36 -28
  4. data/lib/rpush/configuration.rb +1 -0
  5. data/lib/rpush/daemon/feeder.rb +16 -12
  6. data/lib/rpush/daemon/interruptible_sleep.rb +26 -5
  7. data/lib/rpush/daemon/store/active_record.rb +4 -0
  8. data/lib/rpush/daemon/store/interface.rb +1 -1
  9. data/lib/rpush/daemon/store/redis.rb +10 -0
  10. data/lib/rpush/embed.rb +1 -0
  11. data/lib/rpush/logger.rb +1 -0
  12. data/lib/rpush/push.rb +1 -2
  13. data/lib/rpush/version.rb +1 -1
  14. data/spec/functional/adm_spec.rb +6 -8
  15. data/spec/functional/apns_spec.rb +9 -9
  16. data/spec/functional/embed_spec.rb +3 -3
  17. data/spec/functional/gcm_spec.rb +6 -8
  18. data/spec/functional/new_app_spec.rb +5 -20
  19. data/spec/functional/retry_spec.rb +8 -12
  20. data/spec/functional/synchronization_spec.rb +1 -1
  21. data/spec/functional/wpns_spec.rb +7 -7
  22. data/spec/functional_spec_helper.rb +4 -5
  23. data/spec/spec_helper.rb +1 -1
  24. data/spec/unit/apns_feedback_spec.rb +4 -4
  25. data/spec/unit/client/active_record/adm/app_spec.rb +12 -12
  26. data/spec/unit/client/active_record/adm/notification_spec.rb +9 -9
  27. data/spec/unit/client/active_record/apns/app_spec.rb +4 -4
  28. data/spec/unit/client/active_record/apns/feedback_spec.rb +2 -2
  29. data/spec/unit/client/active_record/apns/notification_spec.rb +46 -46
  30. data/spec/unit/client/active_record/app_spec.rb +6 -6
  31. data/spec/unit/client/active_record/gcm/notification_spec.rb +7 -7
  32. data/spec/unit/client/active_record/notification_spec.rb +2 -2
  33. data/spec/unit/client/active_record/wpns/notification_spec.rb +2 -8
  34. data/spec/unit/configuration_spec.rb +5 -5
  35. data/spec/unit/daemon/adm/delivery_spec.rb +69 -69
  36. data/spec/unit/daemon/apns/delivery_spec.rb +13 -13
  37. data/spec/unit/daemon/apns/feedback_receiver_spec.rb +24 -26
  38. data/spec/unit/daemon/app_runner_spec.rb +29 -29
  39. data/spec/unit/daemon/batch_spec.rb +30 -30
  40. data/spec/unit/daemon/delivery_error_spec.rb +2 -2
  41. data/spec/unit/daemon/delivery_spec.rb +6 -6
  42. data/spec/unit/daemon/dispatcher/http_spec.rb +5 -5
  43. data/spec/unit/daemon/dispatcher/tcp_spec.rb +4 -4
  44. data/spec/unit/daemon/dispatcher_loop_spec.rb +9 -9
  45. data/spec/unit/daemon/feeder_spec.rb +22 -23
  46. data/spec/unit/daemon/gcm/delivery_spec.rb +56 -56
  47. data/spec/unit/daemon/retryable_error_spec.rb +2 -2
  48. data/spec/unit/daemon/service_config_methods_spec.rb +5 -5
  49. data/spec/unit/daemon/signal_handler_spec.rb +13 -13
  50. data/spec/unit/daemon/store/active_record/reconnectable_spec.rb +13 -13
  51. data/spec/unit/daemon/store/active_record_spec.rb +49 -49
  52. data/spec/unit/daemon/tcp_connection_spec.rb +50 -50
  53. data/spec/unit/daemon/wpns/delivery_spec.rb +36 -36
  54. data/spec/unit/daemon_spec.rb +33 -30
  55. data/spec/unit/deprecatable_spec.rb +3 -3
  56. data/spec/unit/deprecation_spec.rb +2 -2
  57. data/spec/unit/embed_spec.rb +7 -7
  58. data/spec/unit/logger_spec.rb +25 -25
  59. data/spec/unit/notification_shared.rb +7 -7
  60. data/spec/unit/plugin_spec.rb +1 -1
  61. data/spec/unit/push_spec.rb +8 -8
  62. data/spec/unit/reflectable_spec.rb +5 -5
  63. data/spec/unit/reflection_collection_spec.rb +2 -2
  64. data/spec/unit/rpush_spec.rb +1 -1
  65. data/spec/unit_spec_helper.rb +4 -5
  66. metadata +10 -4
@@ -30,30 +30,15 @@ describe 'New app loading' do
30
30
  end
31
31
 
32
32
  def stub_tcp_connection
33
- Rpush::Daemon::TcpConnection.any_instance.stub(connect_socket: [tcp_socket, ssl_socket])
34
- Rpush::Daemon::TcpConnection.any_instance.stub(setup_ssl_context: double.as_null_object)
33
+ allow_any_instance_of(Rpush::Daemon::TcpConnection).to receive_messages(connect_socket: [tcp_socket, ssl_socket])
34
+ allow_any_instance_of(Rpush::Daemon::TcpConnection).to receive_messages(setup_ssl_context: double.as_null_object)
35
35
  stub_const('Rpush::Daemon::TcpConnection::IO', io_double)
36
36
  end
37
37
 
38
- def wait_for_notification_to_deliver(notification)
39
- Timeout.timeout(timeout) do
40
- until notification.delivered
41
- sleep 0.1
42
- notification.reload
43
- end
44
- end
45
- end
46
-
47
- before do
48
- Rpush.config.push_poll = 0
49
- Rpush.embed
50
- end
51
-
52
38
  it 'delivers a notification successfully' do
53
- sleep 1 # TODO: Need a better way to detect when the Feeder is running.
54
39
  notification = create_notification
55
- wait_for_notification_to_deliver(notification)
40
+ Rpush.push
41
+ notification.reload
42
+ expect(notification.delivered).to eq(true)
56
43
  end
57
-
58
- after { Timeout.timeout(timeout) { Rpush.shutdown } }
59
44
  end
@@ -22,25 +22,21 @@ describe 'Retries' do
22
22
  redis.del(Rpush::Client::Redis::Notification.absolute_pending_namespace)
23
23
  end
24
24
 
25
- Net::HTTP::Persistent.stub(new: http)
26
- response.stub(body: JSON.dump(results: [{ message_id: notification.registration_ids.first.to_s }]))
25
+ allow(Net::HTTP::Persistent).to receive_messages(new: http)
26
+ allow(response).to receive_messages(body: JSON.dump(results: [{ message_id: notification.registration_ids.first.to_s }]))
27
27
  end
28
28
 
29
29
  it 'delivers a notification due to be retried' do
30
30
  Rpush::Daemon.store.mark_retryable(notification, Time.now - 1.minute)
31
-
32
- expect do
33
- Rpush.push
34
- notification.reload
35
- end.to change(notification, :delivered).to(true)
31
+ Rpush.push
32
+ notification.reload
33
+ expect(notification.delivered).to eq(true)
36
34
  end
37
35
 
38
36
  it 'does not deliver a notification not due to be retried' do
39
37
  Rpush::Daemon.store.mark_retryable(notification, Time.now + 1.minute)
40
-
41
- expect do
42
- Rpush.push
43
- notification.reload
44
- end.to_not change(notification, :delivered).to(true)
38
+ Rpush.push
39
+ notification.reload
40
+ expect(notification.delivered).to eq(false)
45
41
  end
46
42
  end
@@ -44,7 +44,7 @@ describe 'Synchronization' do
44
44
  it 'stops a deleted app' do
45
45
  app.destroy
46
46
  Rpush.sync
47
- Rpush::Daemon::AppRunner.app_running?(app).should be_false
47
+ expect(Rpush::Daemon::AppRunner.app_running?(app)).to eq(false)
48
48
  end
49
49
 
50
50
  it 'restarts an app when the certificate is changed' do
@@ -21,11 +21,11 @@ describe 'WPNs' do
21
21
  notification_with_alert.alert = "Hello world!"
22
22
  notification_with_alert.save!
23
23
 
24
- Net::HTTP::Persistent.stub(new: http)
24
+ allow(Net::HTTP::Persistent).to receive_messages(new: http)
25
25
  end
26
26
 
27
27
  it 'delivers a notification with data successfully' do
28
- response.stub(to_hash: { 'x-notificationstatus' => ['Received'] })
28
+ allow(response).to receive_messages(to_hash: { 'x-notificationstatus' => ['Received'] })
29
29
 
30
30
  expect do
31
31
  Rpush.push
@@ -34,16 +34,16 @@ describe 'WPNs' do
34
34
  end
35
35
 
36
36
  it 'fails to deliver a notification with data successfully' do
37
- response.stub(code: 400)
37
+ allow(response).to receive_messages(code: 400)
38
38
 
39
39
  expect do
40
40
  Rpush.push
41
41
  notification_with_data.reload
42
- end.to_not change(notification_with_data, :delivered).to(true)
42
+ end.to change(notification_with_data, :failed_at)
43
43
  end
44
44
 
45
45
  it 'delivers a notification with an alert successfully' do
46
- response.stub(to_hash: { 'x-notificationstatus' => ['Received'] })
46
+ allow(response).to receive_messages(to_hash: { 'x-notificationstatus' => ['Received'] })
47
47
 
48
48
  expect do
49
49
  Rpush.push
@@ -52,12 +52,12 @@ describe 'WPNs' do
52
52
  end
53
53
 
54
54
  it 'fails to deliver a notification with an alert successfully' do
55
- response.stub(code: 400)
55
+ allow(response).to receive_messages(code: 400)
56
56
 
57
57
  expect do
58
58
  Rpush.push
59
59
  notification_with_alert.reload
60
- end.to_not change(notification_with_alert, :delivered).to(true)
60
+ end.to change(notification_with_alert, :failed_at)
61
61
  end
62
62
 
63
63
  it 'retries notification that fail due to a SocketError' do
@@ -3,9 +3,8 @@ require 'spec_helper'
3
3
  require 'database_cleaner'
4
4
  DatabaseCleaner.strategy = :truncation
5
5
 
6
- def functional_example?(example)
7
- path = example.metadata[:example_group][:file_path]
8
- path =~ /spec\/functional/
6
+ def functional_example?(metadata)
7
+ metadata[:file_path] =~ /spec\/functional/
9
8
  end
10
9
 
11
10
  RSpec.configure do |config|
@@ -14,10 +13,10 @@ RSpec.configure do |config|
14
13
  redis.keys('rpush:*').each { |key| redis.del(key) }
15
14
  end
16
15
 
17
- Rpush.config.logger = ::Logger.new(STDOUT) if functional_example?(example)
16
+ Rpush.config.logger = ::Logger.new(STDOUT) if functional_example?(self.class.metadata)
18
17
  end
19
18
 
20
19
  config.after(:each) do
21
- DatabaseCleaner.clean if functional_example?(example)
20
+ DatabaseCleaner.clean if functional_example?(self.class.metadata)
22
21
  end
23
22
  end
@@ -53,7 +53,7 @@ end
53
53
  RSpec.configure do |config|
54
54
  config.before(:each) do
55
55
  Rpush.config.log_file = File.join(RPUSH_ROOT, 'rpush.log')
56
- Rpush.stub(root: RPUSH_ROOT)
56
+ allow(Rpush).to receive(:root) { RPUSH_ROOT }
57
57
  end
58
58
 
59
59
  config.after(:each) do
@@ -5,17 +5,17 @@ describe Rpush, 'apns_feedback' do
5
5
  let(:receiver) { double(check_for_feedback: nil) }
6
6
 
7
7
  before do
8
- Rpush::Daemon::Apns::FeedbackReceiver.stub(new: receiver)
8
+ allow(Rpush::Daemon::Apns::FeedbackReceiver).to receive(:new) { receiver }
9
9
  end
10
10
 
11
11
  it 'initializes the daemon' do
12
- Rpush::Daemon.should_receive(:common_init)
12
+ expect(Rpush::Daemon).to receive(:common_init)
13
13
  Rpush.apns_feedback
14
14
  end
15
15
 
16
16
  it 'checks feedback for each app' do
17
- Rpush::Daemon::Apns::FeedbackReceiver.should_receive(:new).with(app).and_return(receiver)
18
- receiver.should_receive(:check_for_feedback)
17
+ expect(Rpush::Daemon::Apns::FeedbackReceiver).to receive(:new).with(app).and_return(receiver)
18
+ expect(receiver).to receive(:check_for_feedback)
19
19
  Rpush.apns_feedback
20
20
  end
21
21
  end
@@ -5,31 +5,31 @@ describe Rpush::Client::ActiveRecord::Adm::App do
5
5
  let(:existing_app) { Rpush::Client::ActiveRecord::Adm::App.create!(name: 'existing', environment: 'development', client_id: 'CLIENT_ID', client_secret: 'CLIENT_SECRET') }
6
6
 
7
7
  it 'should be valid if properly instantiated' do
8
- subject.should be_valid
8
+ expect(subject).to be_valid
9
9
  end
10
10
 
11
11
  it 'should be invalid if name' do
12
12
  subject.name = nil
13
- subject.should_not be_valid
14
- subject.errors[:name].should eq ["can't be blank"]
13
+ expect(subject).not_to be_valid
14
+ expect(subject.errors[:name]).to eq ["can't be blank"]
15
15
  end
16
16
 
17
17
  it 'should be invalid if name is not unique within scope' do
18
18
  subject.name = existing_app.name
19
- subject.should_not be_valid
20
- subject.errors[:name].should eq ["has already been taken"]
19
+ expect(subject).not_to be_valid
20
+ expect(subject.errors[:name]).to eq ["has already been taken"]
21
21
  end
22
22
 
23
23
  it 'should be invalid if missing client_id' do
24
24
  subject.client_id = nil
25
- subject.should_not be_valid
26
- subject.errors[:client_id].should eq ["can't be blank"]
25
+ expect(subject).not_to be_valid
26
+ expect(subject.errors[:client_id]).to eq ["can't be blank"]
27
27
  end
28
28
 
29
29
  it 'should be invalid if missing client_secret' do
30
30
  subject.client_secret = nil
31
- subject.should_not be_valid
32
- subject.errors[:client_secret].should eq ["can't be blank"]
31
+ expect(subject).not_to be_valid
32
+ expect(subject.errors[:client_secret]).to eq ["can't be blank"]
33
33
  end
34
34
 
35
35
  describe '#access_token_expired?' do
@@ -42,17 +42,17 @@ describe Rpush::Client::ActiveRecord::Adm::App do
42
42
  end
43
43
 
44
44
  it 'should return true if access_token_expiration is nil' do
45
- subject.access_token_expired?.should be_true
45
+ expect(subject.access_token_expired?).to eq(true)
46
46
  end
47
47
 
48
48
  it 'should return true if expired' do
49
49
  subject.access_token_expiration = Time.now - 5.minutes
50
- subject.access_token_expired?.should be_true
50
+ expect(subject.access_token_expired?).to eq(true)
51
51
  end
52
52
 
53
53
  it 'should return false if not expired' do
54
54
  subject.access_token_expiration = Time.now + 5.minutes
55
- subject.access_token_expired?.should be_false
55
+ expect(subject.access_token_expired?).to eq(false)
56
56
  end
57
57
  end
58
58
  end
@@ -10,14 +10,14 @@ describe Rpush::Client::ActiveRecord::Adm::Notification do
10
10
 
11
11
  it "has a 'data' payload limit of 6144 bytes" do
12
12
  notification.data = { key: "a" * 6144 }
13
- notification.valid?.should be_false
14
- notification.errors[:base].should eq ["Notification payload data cannot be larger than 6144 bytes."]
13
+ expect(notification.valid?).to eq(false)
14
+ expect(notification.errors[:base]).to eq ["Notification payload data cannot be larger than 6144 bytes."]
15
15
  end
16
16
 
17
17
  it 'limits the number of registration ids to 100' do
18
18
  notification.registration_ids = ['a'] * (100 + 1)
19
- notification.valid?.should be_false
20
- notification.errors[:base].should eq ["Number of registration_ids cannot be larger than 100."]
19
+ expect(notification.valid?).to eq(false)
20
+ expect(notification.errors[:base]).to eq ["Number of registration_ids cannot be larger than 100."]
21
21
  end
22
22
 
23
23
  it 'validates data can be blank if collapse_key is set' do
@@ -25,19 +25,19 @@ describe Rpush::Client::ActiveRecord::Adm::Notification do
25
25
  notification.registration_ids = 'a'
26
26
  notification.collapse_key = 'test'
27
27
  notification.data = nil
28
- notification.valid?.should be_true
29
- notification.errors[:data].should be_empty
28
+ expect(notification.valid?).to eq(true)
29
+ expect(notification.errors[:data]).to be_empty
30
30
  end
31
31
 
32
32
  it 'validates data is present if collapse_key is not set' do
33
33
  notification.collapse_key = nil
34
34
  notification.data = nil
35
- notification.valid?.should be_false
36
- notification.errors[:data].should eq ['must be set unless collapse_key is specified']
35
+ expect(notification.valid?).to eq(false)
36
+ expect(notification.errors[:data]).to eq ['must be set unless collapse_key is specified']
37
37
  end
38
38
 
39
39
  it 'includes expiresAfter in the payload' do
40
40
  notification.expiry = 100
41
- notification.as_json['expiresAfter'].should eq 100
41
+ expect(notification.as_json['expiresAfter']).to eq 100
42
42
  end
43
43
  end
@@ -4,26 +4,26 @@ describe Rpush::Client::ActiveRecord::App do
4
4
  it 'does not validate an app with an invalid certificate' do
5
5
  app = Rpush::Client::ActiveRecord::Apns::App.new(name: 'test', environment: 'development', certificate: 'foo')
6
6
  app.valid?
7
- app.errors[:certificate].should eq ['value must contain a certificate and a private key.']
7
+ expect(app.errors[:certificate]).to eq ['value must contain a certificate and a private key.']
8
8
  end
9
9
 
10
10
  it 'validates a certificate without a password' do
11
11
  app = Rpush::Client::ActiveRecord::Apns::App.new name: 'test', environment: 'development', certificate: TEST_CERT
12
12
  app.valid?
13
- app.errors[:certificate].should eq []
13
+ expect(app.errors[:certificate]).to eq []
14
14
  end
15
15
 
16
16
  it 'validates a certificate with a password' do
17
17
  app = Rpush::Client::ActiveRecord::Apns::App.new name: 'test', environment: 'development',
18
18
  certificate: TEST_CERT_WITH_PASSWORD, password: 'fubar'
19
19
  app.valid?
20
- app.errors[:certificate].should eq []
20
+ expect(app.errors[:certificate]).to eq []
21
21
  end
22
22
 
23
23
  it 'validates a certificate with an incorrect password' do
24
24
  app = Rpush::Client::ActiveRecord::Apns::App.new name: 'test', environment: 'development',
25
25
  certificate: TEST_CERT_WITH_PASSWORD, password: 'incorrect'
26
26
  app.valid?
27
- app.errors[:certificate].should eq ['value must contain a certificate and a private key.']
27
+ expect(app.errors[:certificate]).to eq ['value must contain a certificate and a private key.']
28
28
  end
29
29
  end
@@ -3,7 +3,7 @@ require 'unit_spec_helper'
3
3
  describe Rpush::Client::ActiveRecord::Apns::Feedback do
4
4
  it 'validates the format of the device_token' do
5
5
  notification = Rpush::Client::ActiveRecord::Apns::Feedback.new(device_token: "{$%^&*()}")
6
- notification.valid?.should be_false
7
- notification.errors[:device_token].include?("is invalid").should be_true
6
+ expect(notification.valid?).to be_falsey
7
+ expect(notification.errors[:device_token]).to include('is invalid')
8
8
  end
9
9
  end
@@ -12,85 +12,85 @@ describe Rpush::Client::ActiveRecord::Apns::Notification do
12
12
 
13
13
  it "should validate the format of the device_token" do
14
14
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(device_token: "{$%^&*()}")
15
- notification.valid?.should be_false
16
- notification.errors[:device_token].include?("is invalid").should be_true
15
+ expect(notification.valid?).to be_falsey
16
+ expect(notification.errors[:device_token].include?("is invalid")).to be_truthy
17
17
  end
18
18
 
19
19
  it "should validate the length of the binary conversion of the notification" do
20
20
  notification.device_token = "a" * 64
21
21
  notification.alert = "way too long!" * 200
22
- notification.valid?.should be_false
23
- notification.errors[:base].include?("APN notification cannot be larger than 2048 bytes. Try condensing your alert and device attributes.").should be_true
22
+ expect(notification.valid?).to be_falsey
23
+ expect(notification.errors[:base].include?("APN notification cannot be larger than 2048 bytes. Try condensing your alert and device attributes.")).to be_truthy
24
24
  end
25
25
 
26
26
  it "should default the sound to 'default'" do
27
- notification.sound.should eq('default')
27
+ expect(notification.sound).to eq('default')
28
28
  end
29
29
 
30
30
  it "should default the expiry to 1 day" do
31
- notification.expiry.should eq 1.day.to_i
31
+ expect(notification.expiry).to eq 1.day.to_i
32
32
  end
33
33
  end
34
34
 
35
35
  describe Rpush::Client::ActiveRecord::Apns::Notification, "when assigning the device token" do
36
36
  it "should strip spaces from the given string" do
37
37
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(device_token: "o m g")
38
- notification.device_token.should eq "omg"
38
+ expect(notification.device_token).to eq "omg"
39
39
  end
40
40
 
41
41
  it "should strip chevrons from the given string" do
42
42
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(device_token: "<omg>")
43
- notification.device_token.should eq "omg"
43
+ expect(notification.device_token).to eq "omg"
44
44
  end
45
45
  end
46
46
 
47
47
  describe Rpush::Client::ActiveRecord::Apns::Notification, "as_json" do
48
48
  it "should include the alert if present" do
49
49
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(alert: "hi mom")
50
- notification.as_json["aps"]["alert"].should eq "hi mom"
50
+ expect(notification.as_json["aps"]["alert"]).to eq "hi mom"
51
51
  end
52
52
 
53
53
  it "should not include the alert key if the alert is not present" do
54
54
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(alert: nil)
55
- notification.as_json["aps"].key?("alert").should be_false
55
+ expect(notification.as_json["aps"].key?("alert")).to be_falsey
56
56
  end
57
57
 
58
58
  it "should encode the alert as JSON if it is a Hash" do
59
59
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(alert: { 'body' => "hi mom", 'alert-loc-key' => "View" })
60
- notification.as_json["aps"]["alert"].should eq('body' => "hi mom", 'alert-loc-key' => "View")
60
+ expect(notification.as_json["aps"]["alert"]).to eq('body' => "hi mom", 'alert-loc-key' => "View")
61
61
  end
62
62
 
63
63
  it "should include the badge if present" do
64
64
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(badge: 6)
65
- notification.as_json["aps"]["badge"].should eq 6
65
+ expect(notification.as_json["aps"]["badge"]).to eq 6
66
66
  end
67
67
 
68
68
  it "should not include the badge key if the badge is not present" do
69
69
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(badge: nil)
70
- notification.as_json["aps"].key?("badge").should be_false
70
+ expect(notification.as_json["aps"].key?("badge")).to be_falsey
71
71
  end
72
72
 
73
73
  it "should include the sound if present" do
74
74
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(alert: "my_sound.aiff")
75
- notification.as_json["aps"]["alert"].should eq "my_sound.aiff"
75
+ expect(notification.as_json["aps"]["alert"]).to eq "my_sound.aiff"
76
76
  end
77
77
 
78
78
  it "should not include the sound key if the sound is not present" do
79
79
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(sound: nil)
80
- notification.as_json["aps"].key?("sound").should be_false
80
+ expect(notification.as_json["aps"].key?("sound")).to be_falsey
81
81
  end
82
82
 
83
83
  it "should include attributes for the device" do
84
84
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new
85
85
  notification.data = { omg: :lol, wtf: :dunno }
86
- notification.as_json["omg"].should eq "lol"
87
- notification.as_json["wtf"].should eq "dunno"
86
+ expect(notification.as_json["omg"]).to eq "lol"
87
+ expect(notification.as_json["wtf"]).to eq "dunno"
88
88
  end
89
89
 
90
90
  it "should allow attributes to include a hash" do
91
91
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new
92
92
  notification.data = { omg: { ilike: :hashes } }
93
- notification.as_json["omg"]["ilike"].should eq "hashes"
93
+ expect(notification.as_json["omg"]["ilike"]).to eq "hashes"
94
94
  end
95
95
  end
96
96
 
@@ -100,13 +100,13 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'MDM' do
100
100
 
101
101
  it 'includes the mdm magic in the payload' do
102
102
  notification.mdm = magic
103
- notification.as_json.should eq('mdm' => magic)
103
+ expect(notification.as_json).to eq('mdm' => magic)
104
104
  end
105
105
 
106
106
  it 'does not include aps attribute' do
107
107
  notification.alert = "i'm doomed"
108
108
  notification.mdm = magic
109
- notification.as_json.key?('aps').should be_false
109
+ expect(notification.as_json.key?('aps')).to be_falsey
110
110
  end
111
111
  end
112
112
 
@@ -115,30 +115,30 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'content-available' do
115
115
 
116
116
  it 'includes content-available in the payload' do
117
117
  notification.content_available = true
118
- notification.as_json['aps']['content-available'].should eq 1
118
+ expect(notification.as_json['aps']['content-available']).to eq 1
119
119
  end
120
120
 
121
121
  it 'does not include content-available in the payload if not set' do
122
- notification.as_json['aps'].key?('content-available').should be_false
122
+ expect(notification.as_json['aps'].key?('content-available')).to be_falsey
123
123
  end
124
124
 
125
125
  it 'does not include content-available as a non-aps attribute' do
126
126
  notification.content_available = true
127
- notification.as_json.key?('content-available').should be_false
127
+ expect(notification.as_json.key?('content-available')).to be_falsey
128
128
  end
129
129
 
130
130
  it 'does not overwrite existing attributes for the device' do
131
131
  notification.data = { hi: :mom }
132
132
  notification.content_available = true
133
- notification.as_json['aps']['content-available'].should eq 1
134
- notification.as_json['hi'].should eq 'mom'
133
+ expect(notification.as_json['aps']['content-available']).to eq 1
134
+ expect(notification.as_json['hi']).to eq 'mom'
135
135
  end
136
136
 
137
137
  it 'does not overwrite the content-available flag when setting attributes for the device' do
138
138
  notification.content_available = true
139
139
  notification.data = { hi: :mom }
140
- notification.as_json['aps']['content-available'].should eq 1
141
- notification.as_json['hi'].should eq 'mom'
140
+ expect(notification.as_json['aps']['content-available']).to eq 1
141
+ expect(notification.as_json['hi']).to eq 'mom'
142
142
  end
143
143
  end
144
144
 
@@ -147,11 +147,11 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'url-args' do
147
147
 
148
148
  it 'includes url-args in the payload' do
149
149
  notification.url_args = ['url-arg-1']
150
- notification.as_json['aps']['url-args'].should eq ['url-arg-1']
150
+ expect(notification.as_json['aps']['url-args']).to eq ['url-arg-1']
151
151
  end
152
152
 
153
153
  it 'does not include url-args in the payload if not set' do
154
- notification.as_json['aps'].key?('url-args').should be_false
154
+ expect(notification.as_json['aps'].key?('url-args')).to be_falsey
155
155
  end
156
156
  end
157
157
 
@@ -160,11 +160,11 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'category' do
160
160
 
161
161
  it 'includes category in the payload' do
162
162
  notification.category = 'INVITE_CATEGORY'
163
- notification.as_json['aps']['category'].should eq 'INVITE_CATEGORY'
163
+ expect(notification.as_json['aps']['category']).to eq 'INVITE_CATEGORY'
164
164
  end
165
165
 
166
166
  it 'does not include category in the payload if not set' do
167
- notification.as_json['aps'].key?('category').should be_false
167
+ expect(notification.as_json['aps'].key?('category')).to be_falsey
168
168
  end
169
169
  end
170
170
 
@@ -182,8 +182,8 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'to_binary' do
182
182
  notification.sound = nil
183
183
  notification.content_available = true
184
184
  bytes = notification.to_binary.bytes.to_a[-4..-1]
185
- bytes.first.should eq 5 # priority item ID
186
- bytes.last.should eq Rpush::Client::ActiveRecord::Apns::Notification::APNS_PRIORITY_CONSERVE_POWER
185
+ expect(bytes.first).to eq 5 # priority item ID
186
+ expect(bytes.last).to eq Rpush::Client::ActiveRecord::Apns::Notification::APNS_PRIORITY_CONSERVE_POWER
187
187
  end
188
188
 
189
189
  it 'uses APNS_PRIORITY_IMMEDIATE if content-available is not the only key' do
@@ -192,8 +192,8 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'to_binary' do
192
192
  notification.sound = nil
193
193
  notification.content_available = true
194
194
  bytes = notification.to_binary.bytes.to_a[-4..-1]
195
- bytes.first.should eq 5 # priority item ID
196
- bytes.last.should eq Rpush::Client::ActiveRecord::Apns::Notification::APNS_PRIORITY_IMMEDIATE
195
+ expect(bytes.first).to eq 5 # priority item ID
196
+ expect(bytes.last).to eq Rpush::Client::ActiveRecord::Apns::Notification::APNS_PRIORITY_IMMEDIATE
197
197
  end
198
198
 
199
199
  it "should correctly convert the notification to binary" do
@@ -204,7 +204,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'to_binary' do
204
204
  notification.expiry = 86_400 # 1 day, \x00\x01Q\x80
205
205
  notification.priority = Rpush::Client::ActiveRecord::Apns::Notification::APNS_PRIORITY_IMMEDIATE
206
206
  notification.app = Rpush::Client::ActiveRecord::Apns::App.new(name: 'my_app', environment: 'development', certificate: TEST_CERT)
207
- notification.to_binary.should eq "\x02\x00\x00\x00\x99\x01\x00 \xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\x02\x00a{\"aps\":{\"alert\":\"Don't panic Mr Mainwaring, don't panic!\",\"badge\":3,\"sound\":\"1.aiff\"},\"hi\":\"mom\"}\x03\x00\x04\x00\x00\x04\xD2\x04\x00\x04\x00\x01Q\x80\x05\x00\x01\n"
207
+ expect(notification.to_binary).to eq "\x02\x00\x00\x00\x99\x01\x00 \xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\x02\x00a{\"aps\":{\"alert\":\"Don't panic Mr Mainwaring, don't panic!\",\"badge\":3,\"sound\":\"1.aiff\"},\"hi\":\"mom\"}\x03\x00\x04\x00\x00\x04\xD2\x04\x00\x04\x00\x01Q\x80\x05\x00\x01\n"
208
208
  end
209
209
  end
210
210
 
@@ -212,14 +212,14 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "bug #31" do
212
212
  it 'does not confuse a JSON looking string as JSON' do
213
213
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new
214
214
  notification.alert = "{\"one\":2}"
215
- notification.alert.should eq "{\"one\":2}"
215
+ expect(notification.alert).to eq "{\"one\":2}"
216
216
  end
217
217
 
218
218
  it 'does confuse a JSON looking string as JSON if the alert_is_json attribute is not present' do
219
219
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new
220
- notification.stub(:has_attribute? => false)
220
+ allow(notification).to receive_messages(:has_attribute? => false)
221
221
  notification.alert = "{\"one\":2}"
222
- notification.alert.should eq('one' => 2)
222
+ expect(notification.alert).to eq('one' => 2)
223
223
  end
224
224
  end
225
225
 
@@ -231,9 +231,9 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "bug #35" do
231
231
  n.app = Rpush::Client::ActiveRecord::Apns::App.create!(name: 'my_app', environment: 'development', certificate: TEST_CERT)
232
232
  end
233
233
 
234
- notification.to_binary(for_validation: true).bytesize.should be > 256
235
- notification.payload.bytesize.should be < 256
236
- notification.should be_valid
234
+ expect(notification.to_binary(for_validation: true).bytesize).to be > 256
235
+ expect(notification.payload.bytesize).to be < 256
236
+ expect(notification).to be_valid
237
237
  end
238
238
  end
239
239
 
@@ -241,15 +241,15 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "multi_json usage" do
241
241
  describe Rpush::Client::ActiveRecord::Apns::Notification, "alert" do
242
242
  it "should call MultiJson.load when multi_json version is 1.3.0" do
243
243
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(alert: { a: 1 }, alert_is_json: true)
244
- Gem.stub(:loaded_specs).and_return('multi_json' => Gem::Specification.new('multi_json', '1.3.0'))
245
- MultiJson.should_receive(:load).with(any_args)
244
+ allow(Gem).to receive(:loaded_specs).and_return('multi_json' => Gem::Specification.new('multi_json', '1.3.0'))
245
+ expect(MultiJson).to receive(:load).with(any_args)
246
246
  notification.alert
247
247
  end
248
248
 
249
249
  it "should call MultiJson.decode when multi_json version is 1.2.9" do
250
250
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(alert: { a: 1 }, alert_is_json: true)
251
- Gem.stub(:loaded_specs).and_return('multi_json' => Gem::Specification.new('multi_json', '1.2.9'))
252
- MultiJson.should_receive(:decode).with(any_args)
251
+ allow(Gem).to receive(:loaded_specs).and_return('multi_json' => Gem::Specification.new('multi_json', '1.2.9'))
252
+ expect(MultiJson).to receive(:decode).with(any_args)
253
253
  notification.alert
254
254
  end
255
255
  end