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.
		
		
		
		
		
			
		
			
				
	
	
		
			159 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			159 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			TypeScript
		
	
import { expect } from 'chai';
 | 
						|
import { v4 } from 'uuid';
 | 
						|
 | 
						|
import { SignalService } from '../../../../protobuf';
 | 
						|
import { Constants } from '../../../../session';
 | 
						|
import { MessageRequestResponse } from '../../../../session/messages/outgoing/controlMessage/MessageRequestResponse';
 | 
						|
 | 
						|
describe('MessageRequestResponse', () => {
 | 
						|
  let message: MessageRequestResponse | undefined;
 | 
						|
  it('correct ttl', () => {
 | 
						|
    message = new MessageRequestResponse({
 | 
						|
      timestamp: Date.now(),
 | 
						|
    });
 | 
						|
 | 
						|
    expect(message.ttl()).to.equal(Constants.TTL_DEFAULT.CONTENT_MESSAGE);
 | 
						|
  });
 | 
						|
 | 
						|
  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;
 | 
						|
  });
 | 
						|
});
 |