import { expect } from 'chai'; import { beforeEach } from 'mocha'; import { DeviceLinkGrantMessage, DeviceLinkRequestMessage, } from '../../../session/messages/outgoing'; import { SignalService } from '../../../protobuf'; import { LokiProfile } from '../../../types/Message'; describe('DeviceLinkMessage', () => { let linkRequestMessage: DeviceLinkRequestMessage; let linkGrantMessage: DeviceLinkGrantMessage; let lokiProfile: LokiProfile; beforeEach(() => { linkRequestMessage = new DeviceLinkRequestMessage({ timestamp: Date.now(), primaryDevicePubKey: '111111', secondaryDevicePubKey: '222222', requestSignature: new Uint8Array([1, 2, 3, 4, 5, 6]), }); lokiProfile = { displayName: 'displayName', avatarPointer: 'avatarPointer', profileKey: new Uint8Array([1, 2, 3, 4]), }; linkGrantMessage = new DeviceLinkGrantMessage({ timestamp: Date.now(), primaryDevicePubKey: '111111', secondaryDevicePubKey: '222222', requestSignature: new Uint8Array([1, 2, 3, 4, 5, 6]), grantSignature: new Uint8Array([6, 5, 4, 3, 2, 1]), lokiProfile, }); }); describe('content of a linkRequestMessage ', () => { let decoded: any; before(() => { const plainText = linkRequestMessage.plainTextBuffer(); decoded = SignalService.Content.decode(plainText); }); it('has a pairingAuthorisation.primaryDevicePubKey', () => { expect(decoded.pairingAuthorisation).to.have.property( 'primaryDevicePubKey', '111111' ); }); it('has a pairingAuthorisation.secondaryDevicePubKey', () => { expect(decoded.pairingAuthorisation).to.have.property( 'secondaryDevicePubKey', '222222' ); }); it('has a pairingAuthorisation.requestSignature', () => { expect(decoded.pairingAuthorisation) .to.have.property('requestSignature') .to.deep.equal(new Uint8Array([1, 2, 3, 4, 5, 6])); }); it('has no pairingAuthorisation.grantSignature', () => { expect(decoded.pairingAuthorisation) .to.have.property('grantSignature') .to.have.lengthOf(0); }); it('has no lokiProfile', () => { expect(decoded).to.not.have.property('lokiProfile'); }); }); describe('content of a linkGrantMessage ', () => { let decoded: any; before(() => { const plainText = linkGrantMessage.plainTextBuffer(); decoded = SignalService.Content.decode(plainText); }); it('has a pairingAuthorisation.primaryDevicePubKey', () => { expect(decoded.pairingAuthorisation).to.have.property( 'primaryDevicePubKey', '111111' ); }); it('has a pairingAuthorisation.secondaryDevicePubKey', () => { expect(decoded.pairingAuthorisation).to.have.property( 'secondaryDevicePubKey', '222222' ); }); it('has a pairingAuthorisation.requestSignature', () => { expect(decoded.pairingAuthorisation) .to.have.property('requestSignature') .to.deep.equal(new Uint8Array([1, 2, 3, 4, 5, 6])); }); it('has a pairingAuthorisation.grantSignature', () => { expect(decoded.pairingAuthorisation) .to.have.property('grantSignature') .to.deep.equal(new Uint8Array([6, 5, 4, 3, 2, 1])); }); it('has a lokiProfile', () => { expect(decoded.dataMessage) .to.have.property('profileKey') .to.be.deep.equal(lokiProfile.profileKey); expect(decoded.dataMessage) .to.have.property('profile') .to.have.property('displayName') .to.be.deep.equal('displayName'); expect(decoded.dataMessage) .to.have.property('profile') .to.have.property('avatar') .to.be.deep.equal('avatarPointer'); }); }); it('ttl of 2 minutes', () => { expect(linkRequestMessage.ttl()).to.equal(2 * 60 * 1000); expect(linkGrantMessage.ttl()).to.equal(2 * 60 * 1000); }); it('has an identifier', () => { expect(linkRequestMessage.identifier).to.not.equal( null, 'identifier cannot be null' ); expect(linkRequestMessage.identifier).to.not.equal( undefined, 'identifier cannot be undefined' ); }); });