describe('MessageUniqueWrapper', () => {
    let messageUniqueWrapper: MessageUniqueWrapper;
    
    beforeEach(() => {
      messageUniqueWrapper = new MessageUniqueWrapper();
    });
  
    test('createMsg should return a unique shortId for a new message', () => {
      const peer = new Peer();
      peer.chatType = 1;
      peer.peerUid = '123';
      const msgId = 'msgId123';
  
      const key = `${msgId}|${peer.chatType}|${peer.peerUid}`;
      const hash = crypto.createHash('sha1').update(key);
      const expectedShortId = parseInt(hash.digest('hex').slice(0, 8), 16);
  
      const shortId = messageUniqueWrapper.createMsg(peer, msgId);
      
      expect(shortId).toBeDefined();
      expect(shortId).toBe(expectedShortId);
    });
  
    test('createMsg should return undefined if the same message is added again', () => {
      const peer = new Peer();
      peer.chatType = 1;
      peer.peerUid = '123';
      const msgId = 'msgId123';
  
      const shortId = messageUniqueWrapper.createMsg(peer, msgId);
      const secondShortId = messageUniqueWrapper.createMsg(peer, msgId);
      
      expect(shortId).toBeDefined();
      expect(secondShortId).toBeUndefined();
    });
  
    test('getMsgIdAndPeerByShortId should return the message and peer for a given shortId', () => {
      const peer = new Peer();
      peer.chatType = 1;
      peer.peerUid = '123';
      const msgId = 'msgId123';
      messageUniqueWrapper.createMsg(peer, msgId);
  
      const shortId = messageUniqueWrapper.getShortIdByMsgId(msgId);
      const result = messageUniqueWrapper.getMsgIdAndPeerByShortId(shortId);
      
      expect(result).toBeDefined();
      expect(result.MsgId).toBe(msgId);
      expect(result.Peer.chatType).toBe(peer.chatType);
      expect(result.Peer.peerUid).toBe(peer.peerUid);
    });
  
    test('getMsgIdAndPeerByShortId should return undefined if the shortId does not exist', () => {
      const peer = new Peer();
      peer.chatType = 1;
      peer.peerUid = '123';
      const msgId = 'msgId123';
  
      messageUniqueWrapper.createMsg(peer, msgId);
  
      const invalidShortId = 12345678;
      const result = messageUniqueWrapper.getMsgIdAndPeerByShortId(invalidShortId);
      
      expect(result).toBeUndefined();
    });
  
    test('getShortIdByMsgId should return the shortId for a given message Id', () => {
      const peer = new Peer();
      peer.chatType = 1;
      peer.peerUid = '123';
      const msgId = 'msgId123';
  
      messageUniqueWrapper.createMsg(peer, msgId);
  
      const shortId = messageUniqueWrapper.getShortIdByMsgId(msgId);
      
      expect(shortId).toBeDefined();
      expect(typeof shortId).toBe('number');
    });
  
    test('getShortIdByMsgId should return undefined if the message Id does not exist', () => {
      const peer = new Peer();
      peer.chatType = 1;
      peer.peerUid = '123';
      const msgId = 'msgId123';
  
      messageUniqueWrapper.createMsg(peer, msgId);
  
      const invalidMsgId = 'invalidMsgId';
      const shortId = messageUniqueWrapper.getShortIdByMsgId(invalidMsgId);
      
      expect(shortId).toBeUndefined();
    });
  });