115 lines
		
	
	
	
		
			3.2 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			3.2 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
// Copyright 2023 Signal Messenger, LLC
 | 
						|
// SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 | 
						|
import { assert } from 'chai';
 | 
						|
import { v4 as generateUuid } from 'uuid';
 | 
						|
 | 
						|
import { generateAci } from '../../types/ServiceId';
 | 
						|
import { DataReader, DataWriter } from '../../sql/Client';
 | 
						|
 | 
						|
import type { MessageAttributesType } from '../../model-types';
 | 
						|
 | 
						|
const { _getAllMessages, getMessagesBetween } = DataReader;
 | 
						|
const { saveMessages, _removeAllMessages } = DataWriter;
 | 
						|
 | 
						|
describe('sql/getMessagesBetween', () => {
 | 
						|
  beforeEach(async () => {
 | 
						|
    await _removeAllMessages();
 | 
						|
  });
 | 
						|
 | 
						|
  it('finds all messages between two in-order messages', async () => {
 | 
						|
    assert.lengthOf(await _getAllMessages(), 0);
 | 
						|
 | 
						|
    const now = Date.now();
 | 
						|
    const conversationId = generateUuid();
 | 
						|
    const ourAci = generateAci();
 | 
						|
 | 
						|
    function getMessage(body: string, offset: number): MessageAttributesType {
 | 
						|
      return {
 | 
						|
        id: generateUuid(),
 | 
						|
        body,
 | 
						|
        type: 'outgoing',
 | 
						|
        conversationId,
 | 
						|
        sent_at: now + offset,
 | 
						|
        received_at: now + offset,
 | 
						|
        timestamp: now + offset,
 | 
						|
      };
 | 
						|
    }
 | 
						|
 | 
						|
    const message1 = getMessage('message 1', -50);
 | 
						|
    const message2 = getMessage('message 2', -40); // after
 | 
						|
    const message3 = getMessage('message 3', -30);
 | 
						|
    const message4 = getMessage('message 4', -20); // before
 | 
						|
    const message5 = getMessage('message 5', -10);
 | 
						|
 | 
						|
    await saveMessages([message1, message2, message3, message4, message5], {
 | 
						|
      forceSave: true,
 | 
						|
      ourAci,
 | 
						|
    });
 | 
						|
 | 
						|
    assert.lengthOf(await _getAllMessages(), 5);
 | 
						|
 | 
						|
    const ids = await getMessagesBetween(conversationId, {
 | 
						|
      after: {
 | 
						|
        received_at: message2.received_at,
 | 
						|
        sent_at: message2.sent_at,
 | 
						|
      },
 | 
						|
      before: {
 | 
						|
        received_at: message4.received_at,
 | 
						|
        sent_at: message4.sent_at,
 | 
						|
      },
 | 
						|
      includeStoryReplies: false,
 | 
						|
    });
 | 
						|
 | 
						|
    assert.lengthOf(ids, 1);
 | 
						|
    assert.deepEqual(ids, [message3.id]);
 | 
						|
  });
 | 
						|
 | 
						|
  it('returns based on timestamps even if one message doesnt exist', async () => {
 | 
						|
    assert.lengthOf(await _getAllMessages(), 0);
 | 
						|
 | 
						|
    const now = Date.now();
 | 
						|
    const conversationId = generateUuid();
 | 
						|
    const ourAci = generateAci();
 | 
						|
 | 
						|
    function getMessage(body: string, offset: number): MessageAttributesType {
 | 
						|
      return {
 | 
						|
        id: generateUuid(),
 | 
						|
        body,
 | 
						|
        type: 'outgoing',
 | 
						|
        conversationId,
 | 
						|
        sent_at: now + offset,
 | 
						|
        received_at: now + offset,
 | 
						|
        timestamp: now + offset,
 | 
						|
      };
 | 
						|
    }
 | 
						|
 | 
						|
    const message1 = getMessage('message 1', -50);
 | 
						|
    const message2 = getMessage('message 2', -40); // after
 | 
						|
    const message3 = getMessage('message 3', -30);
 | 
						|
    const message4 = getMessage('message 4', -20); // before, doesn't exist
 | 
						|
    const message5 = getMessage('message 5', -10);
 | 
						|
 | 
						|
    await saveMessages([message1, message2, message3, message5], {
 | 
						|
      forceSave: true,
 | 
						|
      ourAci,
 | 
						|
    });
 | 
						|
 | 
						|
    assert.lengthOf(await _getAllMessages(), 4);
 | 
						|
 | 
						|
    const ids = await getMessagesBetween(conversationId, {
 | 
						|
      after: {
 | 
						|
        received_at: message2.received_at,
 | 
						|
        sent_at: message2.sent_at,
 | 
						|
      },
 | 
						|
      before: {
 | 
						|
        received_at: message4.received_at,
 | 
						|
        sent_at: message4.sent_at,
 | 
						|
      },
 | 
						|
      includeStoryReplies: false,
 | 
						|
    });
 | 
						|
 | 
						|
    assert.lengthOf(ids, 1);
 | 
						|
    assert.deepEqual(ids, [message3.id]);
 | 
						|
  });
 | 
						|
});
 |