stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
57 lines (45 loc) • 1.78 kB
text/typescript
import { ReactionResponse } from 'stream-chat';
import {
reconcileUpdatedReactionInList,
removeReactionFromList,
upsertReactionInList,
} from '../useFetchReactions';
const makeReaction = (
params: Partial<ReactionResponse> & Pick<ReactionResponse, 'type' | 'user_id'>,
) =>
({
type: params.type,
user_id: params.user_id,
user: params.user ?? { id: params.user_id, name: params.user_id },
}) as ReactionResponse;
describe('useFetchReactions helpers', () => {
it('upserts reactions in the unfiltered list without duplicating the same user/type pair', () => {
const existing = makeReaction({ type: 'like', user_id: 'user-1' });
const updated = makeReaction({ type: 'like', user_id: 'user-1' });
const result = upsertReactionInList({
prevReactions: [existing],
reaction: updated,
});
expect(result).toHaveLength(1);
expect(result[0]).toBe(updated);
});
it('removes only the matching user/type pair in the unfiltered list', () => {
const likeReaction = makeReaction({ type: 'like', user_id: 'user-1' });
const loveReaction = makeReaction({ type: 'love', user_id: 'user-1' });
const result = removeReactionFromList({
prevReactions: [likeReaction, loveReaction],
reaction: likeReaction,
});
expect(result).toEqual([loveReaction]);
});
it('removes the previous filtered reaction when an updated event moves that user to another type', () => {
const existing = makeReaction({ type: 'like', user_id: 'user-1' });
const updated = makeReaction({ type: 'love', user_id: 'user-1' });
const result = reconcileUpdatedReactionInList({
prevReactions: [existing],
reaction: updated,
reactionType: 'like',
});
expect(result).toEqual([]);
});
});