spec/batch_spec.rb in notifiable-gcm-spacialdb-0.9.0 vs spec/batch_spec.rb in notifiable-gcm-spacialdb-0.10.0
- old
+ new
@@ -1,90 +1,51 @@
require 'spec_helper'
describe Notifiable::Gcm::Spacialdb::Batch do
- let(:a) { Notifiable::App.create }
- let(:n1) { Notifiable::Notification.create(:app => a) }
- let!(:ln) { Notifiable::LocalizedNotification.create(:message => "Test message", :params => {:flag => true}, :notification => n1, :locale => 'en') }
+ let(:app_configuration) { {save_notification_statuses: true, gcm: {api_key: 'abc123'}} }
+ let(:a) { Notifiable::App.create gcm_api_key: 'abc123', configuration: app_configuration }
+ let(:n1) { Notifiable::Notification.create(app: a, message: 'Test message', parameters: {flag: true} ) }
let(:d) { Notifiable::DeviceToken.create(:token => "ABC123", :provider => :gcm, :app => a, :locale => 'en') }
+ let!(:stubbed_request) { stub_request(:post, "https://gcm-http.googleapis.com/gcm/send").with(body: request_body).to_return(body: response_body) }
+ let(:request_body) { }
+ let(:response_body) { }
- before(:each) do
- a.gcm_api_key = "abc123"
- end
-
- it "sends a single gcm notification" do
- stub_request(:post, "https://android.googleapis.com/gcm/send").to_return(:body => '{ "multicast_id": 108, "success": 1, "failure": 0, "canonical_ids": 0, "results": [{ "message_id": "1:08" }]}')
+ describe '#batch' do
+ before(:each) { n1.batch {|n| n.add_device_token(d)} }
- n1.batch {|n| n.add_device_token(d)}
-
- Notifiable::NotificationStatus.count.should == 1
- Notifiable::NotificationStatus.first.status = 0
- end
-
- it "sends custom attributes" do
- stub_request(:post, "https://android.googleapis.com/gcm/send")
- .with(:body => "{\"registration_ids\":[\"ABC123\"],\"data\":{\"message\":\"Test message\",\"flag\":true,\"localized_notification_id\":1}}")
- .to_return(:body => '{ "multicast_id": 108, "success": 1, "failure": 0, "canonical_ids": 0, "results": [{ "message_id": "1:08" }]}')
+ context 'single' do
+ let(:request_body) { "{\"registration_ids\":[\"ABC123\"],\"data\":{\"message\":\"Test message\",\"flag\":true,\"n_id\":1}}" }
+ let(:response_body) { '{ "multicast_id": 108, "success": 1, "failure": 0, "canonical_ids": 0, "results": [{ "message_id": "1:08" }]}' }
+ it { expect(Notifiable::NotificationStatus.count).to eq 1 }
+ it { expect(Notifiable::NotificationStatus.first.status).to eq 0 }
+ end
- n1.batch {|n| n.add_device_token(d)}
-
-
- Notifiable::NotificationStatus.count.should == 1
- Notifiable::NotificationStatus.first.status = 0
+ context 'custom attributes' do
+ let(:request_body) { "{\"registration_ids\":[\"ABC123\"],\"data\":{\"message\":\"Test message\",\"flag\":true,\"n_id\":1}}" }
+ let(:response_body) { '{ "multicast_id": 108, "success": 1, "failure": 0, "canonical_ids": 0, "results": [{ "message_id": "1:08" }]}' }
+ it { expect(Notifiable::NotificationStatus.count).to eq 1 }
+ it { expect(Notifiable::NotificationStatus.first.status).to eq 0 }
+ end
+
+ context 'deletes an unregistered token' do
+ let(:request_body) { "{\"registration_ids\":[\"ABC123\"],\"data\":{\"message\":\"Test message\",\"flag\":true,\"n_id\":1}}" }
+ let(:response_body) { '{ "multicast_id": 108, "success": 0, "failure": 1, "canonical_ids": 0, "results": [{ "error": "NotRegistered" }]}' }
+ it { expect(Notifiable::NotificationStatus.count).to eq 0 }
+ it { expect(Notifiable::DeviceToken.count).to eq 0 }
+ end
+
+ context 'id change' do
+ let(:request_body) { "{\"registration_ids\":[\"ABC123\"],\"data\":{\"message\":\"Test message\",\"flag\":true,\"n_id\":1}}" }
+ let(:response_body) { '{ "multicast_id": 108, "success": 1, "failure": 0, "canonical_ids": 1, "results": [{ "message_id": "1:08", "registration_id": "GHJ12345" }]}' }
+ it { expect(Notifiable::NotificationStatus.count).to eq 1 }
+ it { expect(Notifiable::DeviceToken.count).to eq 1 }
+ it { expect(Notifiable::DeviceToken.first.token).to eq "GHJ12345" }
+ end
+
+ context 'bad key' do
+ let!(:stubbed_request) { stub_request(:post, "https://gcm-http.googleapis.com/gcm/send").to_return(body: '<html>Message</html>', status: 401) }
+ it { expect(Notifiable::NotificationStatus.count).to eq 0 }
+ end
+
end
-
- it "marks a unregistered token as invalid" do
- stub_request(:post, "https://android.googleapis.com/gcm/send").to_return(:body => '{ "multicast_id": 108, "success": 0, "failure": 1, "canonical_ids": 0, "results": [{ "error": "NotRegistered" }]}')
-
- n1.batch {|n| n.add_device_token(d)}
-
- Notifiable::NotificationStatus.count.should == 1
- Notifiable::NotificationStatus.first.status = 4
- d.is_valid.should == false
- end
-
- it "marks an invalid token as invalid" do
- stub_request(:post, "https://android.googleapis.com/gcm/send").to_return(:body => '{ "multicast_id": 108, "success": 0, "failure": 1, "canonical_ids": 0, "results": [{ "error": "InvalidRegistration" }]}')
-
- n1.batch {|n| n.add_device_token(d)}
-
- Notifiable::NotificationStatus.count.should == 1
- Notifiable::NotificationStatus.first.status = 2
- d.is_valid.should == false
- end
-
- it "updates a token to the canonical ID if it does not exist" do
- stub_request(:post, "https://android.googleapis.com/gcm/send").to_return(:body => '{ "multicast_id": 108, "success": 1, "failure": 0, "canonical_ids": 1, "results": [{ "message_id": "1:08", "registration_id": "GHJ12345" }]}')
-
- n1.batch {|n| n.add_device_token(d)}
-
- Notifiable::NotificationStatus.count.should == 1
- Notifiable::NotificationStatus.first.status = 0
- Notifiable::DeviceToken.count.should == 1
- d.token.should eql "GHJ12345"
- end
-
-
-# it "marks a token as invalid if the canonical ID already exists" do
-# Notifiable::DeviceToken.create(:token => "GHJ12345", :provider => :gcm)
-
-# stub_request(:post, "https://android.googleapis.com/gcm/send").to_return(:body => '{ "multicast_id": 108, "success": 1, "failure": 0, "canonical_ids": 1, "results": [{ "message_id": "1:08", "registration_id": "GHJ12345" }]}')
-
-# n1.batch do |n|
-# n.add_device_token(d)
-# end
-
-# Notifiable::NotificationStatus.count.should == 1
-# Notifiable::NotificationStatus.first.status = 0
-# Notifiable::DeviceToken.count.should == 2
-# d.is_valid.should be_false
-# end
-
- it "deals gracefully with an unauthenticated key" do
- stub_request(:post, "https://android.googleapis.com/gcm/send").to_return(:body => '<html>Message</html>', :status => 401)
-
- n1.batch {|n| n.add_device_token(d)}
-
- Notifiable::NotificationStatus.count.should == 0
- end
-
end
\ No newline at end of file