|  |  |  |  | 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); | 
					
						
							|  |  |  |  |     }); | 
					
						
							|  |  |  |  |   }); | 
					
						
							|  |  |  |  | }); |