|  |  | const sinon = require('sinon');
 | 
						
						
						
							|  |  | const { assert } = require('chai');
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | const Startup = require('../../js/modules/startup');
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | describe('Startup', () => {
 | 
						
						
						
							|  |  |   const sandbox = sinon.createSandbox();
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   describe('syncReadReceiptConfiguration', () => {
 | 
						
						
						
							|  |  |     afterEach(() => {
 | 
						
						
						
							|  |  |       sandbox.restore();
 | 
						
						
						
							|  |  |     });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     it('should complete if user hasn’t previously synced', async () => {
 | 
						
						
						
							|  |  |       const deviceId = '2';
 | 
						
						
						
							|  |  |       const sendRequestConfigurationSyncMessage = sandbox.spy();
 | 
						
						
						
							|  |  |       const storagePutSpy = sandbox.spy();
 | 
						
						
						
							|  |  |       const storage = {
 | 
						
						
						
							|  |  |         get(name) {
 | 
						
						
						
							|  |  |           if (name !== 'read-receipt-configuration-sync') {
 | 
						
						
						
							|  |  |             return true;
 | 
						
						
						
							|  |  |           }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |           return false;
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |         put: storagePutSpy,
 | 
						
						
						
							|  |  |       };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const expected = {
 | 
						
						
						
							|  |  |         status: 'complete',
 | 
						
						
						
							|  |  |       };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const actual = await Startup.syncReadReceiptConfiguration({
 | 
						
						
						
							|  |  |         deviceId,
 | 
						
						
						
							|  |  |         sendRequestConfigurationSyncMessage,
 | 
						
						
						
							|  |  |         storage,
 | 
						
						
						
							|  |  |       });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       assert.deepEqual(actual, expected);
 | 
						
						
						
							|  |  |       assert.equal(sendRequestConfigurationSyncMessage.callCount, 1);
 | 
						
						
						
							|  |  |       assert.equal(storagePutSpy.callCount, 1);
 | 
						
						
						
							|  |  |       assert(storagePutSpy.calledWith('read-receipt-configuration-sync', true));
 | 
						
						
						
							|  |  |     });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     it('should be skipped if this is the primary device', async () => {
 | 
						
						
						
							|  |  |       const deviceId = '1';
 | 
						
						
						
							|  |  |       const sendRequestConfigurationSyncMessage = () => {};
 | 
						
						
						
							|  |  |       const storage = {};
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const expected = {
 | 
						
						
						
							|  |  |         status: 'skipped',
 | 
						
						
						
							|  |  |         reason: 'isPrimaryDevice',
 | 
						
						
						
							|  |  |       };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const actual = await Startup.syncReadReceiptConfiguration({
 | 
						
						
						
							|  |  |         deviceId,
 | 
						
						
						
							|  |  |         sendRequestConfigurationSyncMessage,
 | 
						
						
						
							|  |  |         storage,
 | 
						
						
						
							|  |  |       });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       assert.deepEqual(actual, expected);
 | 
						
						
						
							|  |  |     });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     it('should be skipped if user has previously synced', async () => {
 | 
						
						
						
							|  |  |       const deviceId = '2';
 | 
						
						
						
							|  |  |       const sendRequestConfigurationSyncMessage = () => {};
 | 
						
						
						
							|  |  |       const storage = {
 | 
						
						
						
							|  |  |         get(name) {
 | 
						
						
						
							|  |  |           if (name !== 'read-receipt-configuration-sync') {
 | 
						
						
						
							|  |  |             return false;
 | 
						
						
						
							|  |  |           }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |           return true;
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |       };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const expected = {
 | 
						
						
						
							|  |  |         status: 'skipped',
 | 
						
						
						
							|  |  |         reason: 'hasPreviouslySynced',
 | 
						
						
						
							|  |  |       };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const actual = await Startup.syncReadReceiptConfiguration({
 | 
						
						
						
							|  |  |         deviceId,
 | 
						
						
						
							|  |  |         sendRequestConfigurationSyncMessage,
 | 
						
						
						
							|  |  |         storage,
 | 
						
						
						
							|  |  |       });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       assert.deepEqual(actual, expected);
 | 
						
						
						
							|  |  |     });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     it('should return error if sending of sync request fails', async () => {
 | 
						
						
						
							|  |  |       const deviceId = '2';
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const sendRequestConfigurationSyncMessage = sandbox.stub();
 | 
						
						
						
							|  |  |       sendRequestConfigurationSyncMessage.rejects(new Error('boom'));
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const storagePutSpy = sandbox.spy();
 | 
						
						
						
							|  |  |       const storage = {
 | 
						
						
						
							|  |  |         get(name) {
 | 
						
						
						
							|  |  |           if (name !== 'read-receipt-configuration-sync') {
 | 
						
						
						
							|  |  |             return true;
 | 
						
						
						
							|  |  |           }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |           return false;
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |         put: storagePutSpy,
 | 
						
						
						
							|  |  |       };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       const actual = await Startup.syncReadReceiptConfiguration({
 | 
						
						
						
							|  |  |         deviceId,
 | 
						
						
						
							|  |  |         sendRequestConfigurationSyncMessage,
 | 
						
						
						
							|  |  |         storage,
 | 
						
						
						
							|  |  |       });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       assert.equal(actual.status, 'error');
 | 
						
						
						
							|  |  |       assert.include(actual.error, 'boom');
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       assert.equal(sendRequestConfigurationSyncMessage.callCount, 1);
 | 
						
						
						
							|  |  |       assert.equal(storagePutSpy.callCount, 0);
 | 
						
						
						
							|  |  |     });
 | 
						
						
						
							|  |  |   });
 | 
						
						
						
							|  |  | });
 |