stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
52 lines (39 loc) • 1.6 kB
text/typescript
import { LocalMessage } from 'stream-chat';
import {
buildMessageListWithNeighbours,
MessageListItemWithNeighbours,
} from '../utils/buildMessageListWithNeighbours';
const createMessage = (id: string) =>
({
id,
text: id,
}) as LocalMessage;
describe('buildMessageListWithNeighbours', () => {
it('keeps reference for unaffected rows and updates only affected rows', () => {
const m3 = createMessage('m3');
const m2 = createMessage('m2');
const m1 = createMessage('m1');
const firstPass = buildMessageListWithNeighbours([m3, m2, m1], new Map());
const oldItems = firstPass.items;
const m4 = createMessage('m4');
const secondPass = buildMessageListWithNeighbours([m4, m3, m2, m1], firstPass.nextDerivedItems);
const newItems = secondPass.items;
expect(newItems[0]).not.toBe(oldItems[0]);
expect(newItems[1]).not.toBe(oldItems[0]);
expect(newItems[2]).toBe(oldItems[1]);
expect(newItems[3]).toBe(oldItems[2]);
});
it('sets previous/next neighbors correctly', () => {
const m3 = createMessage('m3');
const m2 = createMessage('m2');
const m1 = createMessage('m1');
const { items } = buildMessageListWithNeighbours([m3, m2, m1], new Map());
const [row0, row1, row2] = items as MessageListItemWithNeighbours[];
expect(row0.previousMessage?.id).toBe('m2');
expect(row0.nextMessage).toBeUndefined();
expect(row1.previousMessage?.id).toBe('m1');
expect(row1.nextMessage?.id).toBe('m3');
expect(row2.previousMessage).toBeUndefined();
expect(row2.nextMessage?.id).toBe('m2');
});
});