UNPKG

pubnub

Version:

Publish & Subscribe Real-time Messaging with PubNub

578 lines (524 loc) 19.1 kB
/* global describe, beforeEach, it, before, after */ /* eslint no-console: 0 */ import assert from 'assert'; import nock from 'nock'; import utils from '../../utils'; import PubNub from '../../../src/node/index'; describe('push endpoints', () => { let pubnub; before(() => { nock.disableNetConnect(); }); after(() => { nock.enableNetConnect(); }); beforeEach(() => { nock.cleanAll(); pubnub = new PubNub({ subscribeKey: 'mySubKey', publishKey: 'myPublishKey', uuid: 'myUUID', }); }); describe('adding channels to device', () => { it('supports addition of multiple channels for apple', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice') .query({ add: 'a,b', pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'apns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.addChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'apns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports addition of multiple channels for apple (APNS2)', (done) => { const scope = utils .createNock() .get('/v2/push/sub-key/mySubKey/devices-apns2/niceDevice') .query({ add: 'a,b', pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, environment: 'development', topic: 'com.test.apns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.addChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'apns2', topic: 'com.test.apns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports addition of multiple channels for microsoft', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice') .query({ add: 'a,b', pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'mpns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.addChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'mpns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports addition of multiple channels for google', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice') .query({ add: 'a,b', pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'gcm', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.addChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'gcm' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('should add push enabled for channels API telemetry information', (done) => { let scope = utils.createNock().get('/v1/push/sub-key/mySubKey/devices/niceDevice').query(true); const delays = [100, 200, 300, 400]; const countedDelays = delays.slice(0, delays.length - 1); const average = Math.floor(countedDelays.reduce((acc, delay) => acc + delay, 0) / countedDelays.length); const leeway = 50; utils.runAPIWithResponseDelays(scope, 200, '[1, "Modified Channels"]', delays, (completion) => { pubnub.push.addChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'apns' }, () => { completion(); } ); }) .then((lastRequest) => { utils.verifyRequestTelemetry(lastRequest.path, 'l_push', average, leeway); done(); }); }).timeout(60000); it('should add APNS2 enabled for channels API telemetry information', (done) => { let scope = utils.createNock().get('/v2/push/sub-key/mySubKey/devices-apns2/niceDevice').query(true); const delays = [100, 200, 300, 400]; const countedDelays = delays.slice(0, delays.length - 1); const average = Math.floor(countedDelays.reduce((acc, delay) => acc + delay, 0) / countedDelays.length); const leeway = 50; utils.runAPIWithResponseDelays(scope, 200, '[1, "Modified Channels"]', delays, (completion) => { pubnub.push.addChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'apns2', topic: 'com.test.apns' }, () => { completion(); } ); }) .then((lastRequest) => { utils.verifyRequestTelemetry(lastRequest.path, 'l_push', average, leeway); done(); }); }).timeout(60000); }); describe('listing channels for device', () => { it('supports channel listing for apple', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/coolDevice') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'apns', uuid: 'myUUID', }) .reply(200, '["ch1", "ch2", "ch3"]'); pubnub.push.listChannels( { device: 'coolDevice', pushGateway: 'apns' }, (status, response) => { assert.equal(status.error, false); assert.deepEqual(response.channels, ['ch1', 'ch2', 'ch3']); assert.equal(scope.isDone(), true); done(); } ); }); it('supports channel listing for apple (APNS2)', (done) => { const scope = utils .createNock() .get('/v2/push/sub-key/mySubKey/devices-apns2/coolDevice') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, environment: 'production', topic: 'com.test.apns', uuid: 'myUUID', }) .reply(200, '["ch1", "ch2", "ch3"]'); pubnub.push.listChannels( { device: 'coolDevice', pushGateway: 'apns2', environment: 'production', topic: 'com.test.apns' }, (status, response) => { assert.equal(status.error, false); assert.deepEqual(response.channels, ['ch1', 'ch2', 'ch3']); assert.equal(scope.isDone(), true); done(); } ); }); it('supports channel listing for microsoft', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/coolDevice') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'mpns', uuid: 'myUUID', }) .reply(200, '["ch1", "ch2", "ch3"]'); pubnub.push.listChannels( { device: 'coolDevice', pushGateway: 'mpns' }, (status, response) => { assert.equal(status.error, false); assert.deepEqual(response.channels, ['ch1', 'ch2', 'ch3']); assert.equal(scope.isDone(), true); done(); } ); }); it('supports channel listing for google', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/coolDevice') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'gcm', uuid: 'myUUID', }) .reply(200, '["ch1", "ch2", "ch3"]'); pubnub.push.listChannels( { device: 'coolDevice', pushGateway: 'gcm' }, (status, response) => { assert.equal(status.error, false); assert.deepEqual(response.channels, ['ch1', 'ch2', 'ch3']); assert.equal(scope.isDone(), true); done(); } ); }); it('should add push audit API telemetry information', (done) => { let scope = utils.createNock().get('/v1/push/sub-key/mySubKey/devices/coolDevice').query(true); const delays = [100, 200, 300, 400]; const countedDelays = delays.slice(0, delays.length - 1); const average = Math.floor(countedDelays.reduce((acc, delay) => acc + delay, 0) / countedDelays.length); const leeway = 50; utils.runAPIWithResponseDelays(scope, 200, '["ch1", "ch2", "ch3"]', delays, (completion) => { pubnub.push.listChannels( { device: 'coolDevice', pushGateway: 'apns' }, () => { completion(); } ); }) .then((lastRequest) => { utils.verifyRequestTelemetry(lastRequest.path, 'l_push', average, leeway); done(); }); }).timeout(60000); it('should add APNS2 audit API telemetry information', (done) => { let scope = utils.createNock().get('/v2/push/sub-key/mySubKey/devices-apns2/coolDevice').query(true); const delays = [100, 200, 300, 400]; const countedDelays = delays.slice(0, delays.length - 1); const average = Math.floor(countedDelays.reduce((acc, delay) => acc + delay, 0) / countedDelays.length); const leeway = 50; utils.runAPIWithResponseDelays(scope, 200, '["ch1", "ch2", "ch3"]', delays, (completion) => { pubnub.push.listChannels( { device: 'coolDevice', pushGateway: 'apns2', environment: 'production', topic: 'com.test.apns' }, () => { completion(); } ); }) .then((lastRequest) => { utils.verifyRequestTelemetry(lastRequest.path, 'l_push', average, leeway); done(); }); }).timeout(60000); }); describe('supports deletion of channels', () => { it('supports removal of multiple channels for apple', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice') .query({ remove: 'a,b', pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'apns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.removeChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'apns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports removal of multiple channels for apple (APNS2)', (done) => { const scope = utils .createNock() .get('/v2/push/sub-key/mySubKey/devices-apns2/niceDevice') .query({ remove: 'a,b', pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, environment: 'development', topic: 'com.test.apns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.removeChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'apns2', topic: 'com.test.apns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports removal of multiple channels for microsoft', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice') .query({ remove: 'a,b', pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'mpns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.removeChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'mpns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports removal of multiple channels for google', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice') .query({ remove: 'a,b', pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'gcm', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.removeChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'gcm', uuid: 'myUUID', }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('should add push disable for channels API telemetry information', (done) => { let scope = utils.createNock().get('/v1/push/sub-key/mySubKey/devices/niceDevice').query(true); const delays = [100, 200, 300, 400]; const countedDelays = delays.slice(0, delays.length - 1); const average = Math.floor(countedDelays.reduce((acc, delay) => acc + delay, 0) / countedDelays.length); const leeway = 50; utils.runAPIWithResponseDelays(scope, 200, '[1, "Modified Channels"]', delays, (completion) => { pubnub.push.removeChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'apns' }, () => { completion(); } ); }) .then((lastRequest) => { utils.verifyRequestTelemetry(lastRequest.path, 'l_push', average, leeway); done(); }); }).timeout(60000); it('should add APNS2 disable for channels API telemetry information', (done) => { let scope = utils.createNock().get('/v2/push/sub-key/mySubKey/devices-apns2/niceDevice').query(true); const delays = [100, 200, 300, 400]; const countedDelays = delays.slice(0, delays.length - 1); const average = Math.floor(countedDelays.reduce((acc, delay) => acc + delay, 0) / countedDelays.length); const leeway = 50; utils.runAPIWithResponseDelays(scope, 200, '[1, "Modified Channels"]', delays, (completion) => { pubnub.push.removeChannels( { channels: ['a', 'b'], device: 'niceDevice', pushGateway: 'apns2', topic: 'com.test.apns' }, () => { completion(); } ); }) .then((lastRequest) => { utils.verifyRequestTelemetry(lastRequest.path, 'l_push', average, leeway); done(); }); }).timeout(60000); }); describe('supports removal of device', () => { it('supports removal of device for apple', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice/remove') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'apns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.deleteDevice( { device: 'niceDevice', pushGateway: 'apns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports removal of device for apple (APNS2)', (done) => { const scope = utils .createNock() .get('/v2/push/sub-key/mySubKey/devices-apns2/niceDevice/remove') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, environment: 'production', topic: 'com.test.apns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.deleteDevice( { device: 'niceDevice', pushGateway: 'apns2', environment: 'production', topic: 'com.test.apns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports removal of device for microsoft', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice/remove') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'mpns', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.deleteDevice( { device: 'niceDevice', pushGateway: 'mpns' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('supports removal of device for google', (done) => { const scope = utils .createNock() .get('/v1/push/sub-key/mySubKey/devices/niceDevice/remove') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, type: 'gcm', uuid: 'myUUID', }) .reply(200, '[1, "Modified Channels"]'); pubnub.push.deleteDevice( { device: 'niceDevice', pushGateway: 'gcm' }, (status) => { assert.equal(status.error, false); assert.equal(scope.isDone(), true); done(); } ); }); it('should add push disable for device API telemetry information', (done) => { let scope = utils.createNock().get('/v1/push/sub-key/mySubKey/devices/niceDevice/remove').query(true); const delays = [100, 200, 300, 400]; const countedDelays = delays.slice(0, delays.length - 1); const average = Math.floor(countedDelays.reduce((acc, delay) => acc + delay, 0) / countedDelays.length); const leeway = 50; utils.runAPIWithResponseDelays(scope, 200, '[1, "Modified Channels"]', delays, (completion) => { pubnub.push.deleteDevice( { device: 'niceDevice', pushGateway: 'apns' }, () => { completion(); } ); }) .then((lastRequest) => { utils.verifyRequestTelemetry(lastRequest.path, 'l_push', average, leeway); done(); }); }).timeout(60000); it('should add APNS2 disable for device API telemetry information', (done) => { let scope = utils.createNock().get('/v2/push/sub-key/mySubKey/devices-apns2/niceDevice/remove').query(true); const delays = [100, 200, 300, 400]; const countedDelays = delays.slice(0, delays.length - 1); const average = Math.floor(countedDelays.reduce((acc, delay) => acc + delay, 0) / countedDelays.length); const leeway = 50; utils.runAPIWithResponseDelays(scope, 200, '[1, "Modified Channels"]', delays, (completion) => { pubnub.push.deleteDevice( { device: 'niceDevice', pushGateway: 'apns2', environment: 'production', topic: 'com.test.apns' }, () => { completion(); } ); }) .then((lastRequest) => { utils.verifyRequestTelemetry(lastRequest.path, 'l_push', average, leeway); done(); }); }).timeout(60000); }); });