You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			161 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			TypeScript
		
	
		
		
			
		
	
	
			161 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			TypeScript
		
	
| 
											3 years ago
										 | import { expect } from 'chai'; | ||
|  | import { v4 } from 'uuid'; | ||
|  | 
 | ||
|  | import { SignalService } from '../../../../protobuf'; | ||
|  | import { Constants } from '../../../../session'; | ||
|  | import { MessageRequestResponse } from '../../../../session/messages/outgoing/controlMessage/MessageRequestResponse'; | ||
|  | // tslint:disable: no-unused-expression
 | ||
|  | 
 | ||
|  | // tslint:disable-next-line: max-func-body-length
 | ||
|  | describe('MessageRequestResponse', () => { | ||
|  |   let message: MessageRequestResponse | undefined; | ||
|  |   it('correct ttl', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |     }); | ||
|  | 
 | ||
|  |     expect(message.ttl()).to.equal(Constants.TTL_DEFAULT.TTL_MAX); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('has an identifier', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |     }); | ||
|  | 
 | ||
|  |     expect(message.identifier).to.not.equal(null, 'identifier cannot be null'); | ||
|  |     expect(message.identifier).to.not.equal(undefined, 'identifier cannot be undefined'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('has an identifier matching if given', () => { | ||
|  |     const identifier = v4(); | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |       identifier, | ||
|  |     }); | ||
|  | 
 | ||
|  |     expect(message.identifier).to.not.equal(identifier, 'identifier should match'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('isApproved is always true', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |     }); | ||
|  |     const plainText = message.plainTextBuffer(); | ||
|  |     const decoded = SignalService.Content.decode(plainText); | ||
|  |     expect(decoded.messageRequestResponse) | ||
|  |       .to.have.property('isApproved') | ||
|  |       .to.be.eq(true, 'isApproved is true'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('can create response without lokiProfile', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |     }); | ||
|  |     const plainText = message.plainTextBuffer(); | ||
|  |     const decoded = SignalService.Content.decode(plainText); | ||
|  |     expect(decoded.messageRequestResponse) | ||
|  |       .to.have.property('profile') | ||
|  |       .to.be.eq(null, 'no profile field if no profile given'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('can create response with display name only', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |       lokiProfile: { displayName: 'Jane', profileKey: null }, | ||
|  |     }); | ||
|  |     const plainText = message.plainTextBuffer(); | ||
|  |     const decoded = SignalService.Content.decode(plainText); | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profile?.displayName).to.be.deep.eq('Jane'); | ||
|  |     expect(decoded.messageRequestResponse?.profile?.profilePicture).to.be.empty; | ||
|  |     expect(decoded.messageRequestResponse?.profileKey).to.be.empty; | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('empty profileKey does not get included', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |       lokiProfile: { displayName: 'Jane', profileKey: new Uint8Array(0) }, | ||
|  |     }); | ||
|  |     const plainText = message.plainTextBuffer(); | ||
|  |     const decoded = SignalService.Content.decode(plainText); | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profile?.displayName).to.be.eq('Jane'); | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profile?.profilePicture).to.be.empty; | ||
|  |     expect(decoded.messageRequestResponse?.profileKey).to.be.empty; | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('can create response with display name and profileKey and profileImage', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |       lokiProfile: { | ||
|  |         displayName: 'Jane', | ||
|  |         profileKey: new Uint8Array([1, 2, 3, 4, 5, 6]), | ||
|  |         avatarPointer: 'https://somevalidurl.com', | ||
|  |       }, | ||
|  |     }); | ||
|  |     const plainText = message.plainTextBuffer(); | ||
|  |     const decoded = SignalService.Content.decode(plainText); | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profile?.displayName).to.be.deep.eq('Jane'); | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profileKey).to.be.not.empty; | ||
|  | 
 | ||
|  |     if (!decoded.messageRequestResponse?.profileKey?.buffer) { | ||
|  |       throw new Error('decoded.messageRequestResponse?.profileKey?.buffer should be set'); | ||
|  |     } | ||
|  |     expect(decoded.messageRequestResponse?.profile?.profilePicture).to.be.eq( | ||
|  |       'https://somevalidurl.com' | ||
|  |     ); | ||
|  |     // don't ask me why deep.eq ([1,2,3, ...]) gives nothing interesting but a 8192 buffer not matching
 | ||
|  |     expect(decoded.messageRequestResponse?.profileKey.length).to.be.eq(6); | ||
|  |     expect(decoded.messageRequestResponse?.profileKey[0]).to.be.eq(1); | ||
|  |     expect(decoded.messageRequestResponse?.profileKey[1]).to.be.eq(2); | ||
|  |     expect(decoded.messageRequestResponse?.profileKey[2]).to.be.eq(3); | ||
|  |     expect(decoded.messageRequestResponse?.profileKey[3]).to.be.eq(4); | ||
|  |     expect(decoded.messageRequestResponse?.profileKey[4]).to.be.eq(5); | ||
|  |     expect(decoded.messageRequestResponse?.profileKey[5]).to.be.eq(6); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('profileKey not included if profileUrl not set', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |       lokiProfile: { displayName: 'Jane', profileKey: new Uint8Array([1, 2, 3, 4, 5, 6]) }, | ||
|  |     }); | ||
|  |     const plainText = message.plainTextBuffer(); | ||
|  |     const decoded = SignalService.Content.decode(plainText); | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profile?.displayName).to.be.deep.eq('Jane'); | ||
|  | 
 | ||
|  |     if (!decoded.messageRequestResponse?.profileKey?.buffer) { | ||
|  |       throw new Error('decoded.messageRequestResponse?.profileKey?.buffer should be set'); | ||
|  |     } | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profile?.profilePicture).to.be.empty; | ||
|  |     expect(decoded.messageRequestResponse?.profileKey).to.be.empty; | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('url not included if profileKey not set', () => { | ||
|  |     message = new MessageRequestResponse({ | ||
|  |       timestamp: Date.now(), | ||
|  |       lokiProfile: { | ||
|  |         displayName: 'Jane', | ||
|  |         profileKey: null, | ||
|  |         avatarPointer: 'https://somevalidurl.com', | ||
|  |       }, | ||
|  |     }); | ||
|  |     const plainText = message.plainTextBuffer(); | ||
|  |     const decoded = SignalService.Content.decode(plainText); | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profile?.displayName).to.be.deep.eq('Jane'); | ||
|  | 
 | ||
|  |     if (!decoded.messageRequestResponse?.profileKey?.buffer) { | ||
|  |       throw new Error('decoded.messageRequestResponse?.profileKey?.buffer should be set'); | ||
|  |     } | ||
|  | 
 | ||
|  |     expect(decoded.messageRequestResponse?.profile?.displayName).to.be.eq('Jane'); | ||
|  |     expect(decoded.messageRequestResponse?.profile?.profilePicture).to.be.empty; | ||
|  |     expect(decoded.messageRequestResponse?.profileKey).to.be.empty; | ||
|  |   }); | ||
|  | }); |