Skip to content

Commit b7c33c8

Browse files
authored
fix: calculate message read status for the first message in a channel (ported from v13) (#3056)
1 parent 880d12d commit b7c33c8

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { renderHook } from '@testing-library/react';
2+
3+
import { generateMessage, generateUser } from '../../../../mock-builders';
4+
import { useLastOwnMessage } from '../useLastOwnMessage';
5+
6+
describe('useLastOwnMessage', () => {
7+
it('returns undefined when there are no messages', () => {
8+
const ownUser = generateUser();
9+
10+
const { result } = renderHook(() =>
11+
useLastOwnMessage({ messages: undefined, ownUserId: ownUser.id }),
12+
);
13+
14+
expect(result.current).toBeUndefined();
15+
});
16+
17+
it('returns undefined when there are no own messages', () => {
18+
const ownUser = generateUser();
19+
const otherUser = generateUser();
20+
const messages = [generateMessage({ user: otherUser })];
21+
22+
const { result } = renderHook(() =>
23+
useLastOwnMessage({ messages, ownUserId: ownUser.id }),
24+
);
25+
26+
expect(result.current).toBeUndefined();
27+
});
28+
29+
it('returns the first message when it is the only own message', () => {
30+
const ownUser = generateUser();
31+
const otherUser = generateUser();
32+
const ownMessage = generateMessage({ user: ownUser });
33+
const messages = [ownMessage, generateMessage({ user: otherUser })];
34+
35+
const { result } = renderHook(() =>
36+
useLastOwnMessage({ messages, ownUserId: ownUser.id }),
37+
);
38+
39+
expect(result.current).toBe(ownMessage);
40+
});
41+
42+
it('returns the latest own message', () => {
43+
const ownUser = generateUser();
44+
const otherUser = generateUser();
45+
const firstOwnMessage = generateMessage({ user: ownUser });
46+
const lastOwnMessage = generateMessage({ user: ownUser });
47+
const messages = [
48+
firstOwnMessage,
49+
generateMessage({ user: otherUser }),
50+
lastOwnMessage,
51+
generateMessage({ user: otherUser }),
52+
];
53+
54+
const { result } = renderHook(() =>
55+
useLastOwnMessage({ messages, ownUserId: ownUser.id }),
56+
);
57+
58+
expect(result.current).toBe(lastOwnMessage);
59+
});
60+
});

src/utils/findReverse.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export const findReverse = <T>(
33
items: T[],
44
matches: (items: T) => boolean,
55
): T | undefined => {
6-
for (let i = items.length - 1; i > 0; i -= 1) {
6+
for (let i = items.length - 1; i >= 0; i -= 1) {
77
if (matches(items[i])) {
88
return items[i];
99
}

0 commit comments

Comments
 (0)