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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +6 -0
 - data/README.md +36 -28
 - data/lib/rpush/configuration.rb +1 -0
 - data/lib/rpush/daemon/feeder.rb +16 -12
 - data/lib/rpush/daemon/interruptible_sleep.rb +26 -5
 - data/lib/rpush/daemon/store/active_record.rb +4 -0
 - data/lib/rpush/daemon/store/interface.rb +1 -1
 - data/lib/rpush/daemon/store/redis.rb +10 -0
 - data/lib/rpush/embed.rb +1 -0
 - data/lib/rpush/logger.rb +1 -0
 - data/lib/rpush/push.rb +1 -2
 - data/lib/rpush/version.rb +1 -1
 - data/spec/functional/adm_spec.rb +6 -8
 - data/spec/functional/apns_spec.rb +9 -9
 - data/spec/functional/embed_spec.rb +3 -3
 - data/spec/functional/gcm_spec.rb +6 -8
 - data/spec/functional/new_app_spec.rb +5 -20
 - data/spec/functional/retry_spec.rb +8 -12
 - data/spec/functional/synchronization_spec.rb +1 -1
 - data/spec/functional/wpns_spec.rb +7 -7
 - data/spec/functional_spec_helper.rb +4 -5
 - data/spec/spec_helper.rb +1 -1
 - data/spec/unit/apns_feedback_spec.rb +4 -4
 - data/spec/unit/client/active_record/adm/app_spec.rb +12 -12
 - data/spec/unit/client/active_record/adm/notification_spec.rb +9 -9
 - data/spec/unit/client/active_record/apns/app_spec.rb +4 -4
 - data/spec/unit/client/active_record/apns/feedback_spec.rb +2 -2
 - data/spec/unit/client/active_record/apns/notification_spec.rb +46 -46
 - data/spec/unit/client/active_record/app_spec.rb +6 -6
 - data/spec/unit/client/active_record/gcm/notification_spec.rb +7 -7
 - data/spec/unit/client/active_record/notification_spec.rb +2 -2
 - data/spec/unit/client/active_record/wpns/notification_spec.rb +2 -8
 - data/spec/unit/configuration_spec.rb +5 -5
 - data/spec/unit/daemon/adm/delivery_spec.rb +69 -69
 - data/spec/unit/daemon/apns/delivery_spec.rb +13 -13
 - data/spec/unit/daemon/apns/feedback_receiver_spec.rb +24 -26
 - data/spec/unit/daemon/app_runner_spec.rb +29 -29
 - data/spec/unit/daemon/batch_spec.rb +30 -30
 - data/spec/unit/daemon/delivery_error_spec.rb +2 -2
 - data/spec/unit/daemon/delivery_spec.rb +6 -6
 - data/spec/unit/daemon/dispatcher/http_spec.rb +5 -5
 - data/spec/unit/daemon/dispatcher/tcp_spec.rb +4 -4
 - data/spec/unit/daemon/dispatcher_loop_spec.rb +9 -9
 - data/spec/unit/daemon/feeder_spec.rb +22 -23
 - data/spec/unit/daemon/gcm/delivery_spec.rb +56 -56
 - data/spec/unit/daemon/retryable_error_spec.rb +2 -2
 - data/spec/unit/daemon/service_config_methods_spec.rb +5 -5
 - data/spec/unit/daemon/signal_handler_spec.rb +13 -13
 - data/spec/unit/daemon/store/active_record/reconnectable_spec.rb +13 -13
 - data/spec/unit/daemon/store/active_record_spec.rb +49 -49
 - data/spec/unit/daemon/tcp_connection_spec.rb +50 -50
 - data/spec/unit/daemon/wpns/delivery_spec.rb +36 -36
 - data/spec/unit/daemon_spec.rb +33 -30
 - data/spec/unit/deprecatable_spec.rb +3 -3
 - data/spec/unit/deprecation_spec.rb +2 -2
 - data/spec/unit/embed_spec.rb +7 -7
 - data/spec/unit/logger_spec.rb +25 -25
 - data/spec/unit/notification_shared.rb +7 -7
 - data/spec/unit/plugin_spec.rb +1 -1
 - data/spec/unit/push_spec.rb +8 -8
 - data/spec/unit/reflectable_spec.rb +5 -5
 - data/spec/unit/reflection_collection_spec.rb +2 -2
 - data/spec/unit/rpush_spec.rb +1 -1
 - data/spec/unit_spec_helper.rb +4 -5
 - 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. 
     | 
| 
       34 
     | 
    
         
            -
                Rpush::Daemon::TcpConnection. 
     | 
| 
      
 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 
     | 
    
         
            -
                 
     | 
| 
      
 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. 
     | 
| 
       26 
     | 
    
         
            -
                response. 
     | 
| 
      
 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 
     | 
    
         
            -
                 
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       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 
     | 
    
         
            -
                 
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       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). 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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?( 
     | 
| 
       7 
     | 
    
         
            -
               
     | 
| 
       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?( 
     | 
| 
      
 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?( 
     | 
| 
      
 20 
     | 
    
         
            +
                DatabaseCleaner.clean if functional_example?(self.class.metadata)
         
     | 
| 
       22 
21 
     | 
    
         
             
              end
         
     | 
| 
       23 
22 
     | 
    
         
             
            end
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
| 
         @@ -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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
       18 
     | 
    
         
            -
                receiver. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
       14 
     | 
    
         
            -
                subject.errors[:name]. 
     | 
| 
      
 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. 
     | 
| 
       20 
     | 
    
         
            -
                subject.errors[:name]. 
     | 
| 
      
 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. 
     | 
| 
       26 
     | 
    
         
            -
                subject.errors[:client_id]. 
     | 
| 
      
 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. 
     | 
| 
       32 
     | 
    
         
            -
                subject.errors[:client_secret]. 
     | 
| 
      
 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 
     | 
| 
      
 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 
     | 
| 
      
 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 
     | 
| 
      
 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 
     | 
| 
       14 
     | 
    
         
            -
                notification.errors[:base]. 
     | 
| 
      
 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 
     | 
| 
       20 
     | 
    
         
            -
                notification.errors[:base]. 
     | 
| 
      
 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 
     | 
| 
       29 
     | 
    
         
            -
                notification.errors[:data]. 
     | 
| 
      
 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 
     | 
| 
       36 
     | 
    
         
            -
                notification.errors[:data]. 
     | 
| 
      
 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']. 
     | 
| 
      
 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]. 
     | 
| 
      
 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]. 
     | 
| 
      
 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]. 
     | 
| 
      
 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]. 
     | 
| 
      
 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 
     | 
| 
       7 
     | 
    
         
            -
                notification.errors[:device_token].include 
     | 
| 
      
 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 
     | 
| 
       16 
     | 
    
         
            -
                notification.errors[:device_token].include?("is invalid"). 
     | 
| 
      
 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 
     | 
| 
       23 
     | 
    
         
            -
                notification.errors[:base].include?("APN notification cannot be larger than 2048 bytes. Try condensing your alert and device attributes."). 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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"]. 
     | 
| 
      
 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"). 
     | 
| 
      
 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"]. 
     | 
| 
      
 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"]. 
     | 
| 
      
 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"). 
     | 
| 
      
 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"]. 
     | 
| 
      
 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"). 
     | 
| 
      
 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"]. 
     | 
| 
       87 
     | 
    
         
            -
                notification.as_json["wtf"]. 
     | 
| 
      
 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"]. 
     | 
| 
      
 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. 
     | 
| 
      
 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'). 
     | 
| 
      
 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']. 
     | 
| 
      
 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'). 
     | 
| 
      
 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'). 
     | 
| 
      
 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']. 
     | 
| 
       134 
     | 
    
         
            -
                notification.as_json['hi']. 
     | 
| 
      
 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']. 
     | 
| 
       141 
     | 
    
         
            -
                notification.as_json['hi']. 
     | 
| 
      
 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']. 
     | 
| 
      
 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'). 
     | 
| 
      
 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']. 
     | 
| 
      
 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'). 
     | 
| 
      
 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. 
     | 
| 
       186 
     | 
    
         
            -
                bytes.last. 
     | 
| 
      
 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. 
     | 
| 
       196 
     | 
    
         
            -
                bytes.last. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 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. 
     | 
| 
      
 220 
     | 
    
         
            +
                allow(notification).to receive_messages(:has_attribute? => false)
         
     | 
| 
       221 
221 
     | 
    
         
             
                notification.alert = "{\"one\":2}"
         
     | 
| 
       222 
     | 
    
         
            -
                notification.alert. 
     | 
| 
      
 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. 
     | 
| 
       235 
     | 
    
         
            -
                notification.payload.bytesize. 
     | 
| 
       236 
     | 
    
         
            -
                notification. 
     | 
| 
      
 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. 
     | 
| 
       245 
     | 
    
         
            -
                  MultiJson. 
     | 
| 
      
 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. 
     | 
| 
       252 
     | 
    
         
            -
                  MultiJson. 
     | 
| 
      
 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
         
     |