import { UserStatus } from '@rocket.chat/core-typings'; import { mockAppRoot } from '@rocket.chat/mock-providers'; import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; import { render, screen } from '@testing-library/react'; import RoomMemberStatus from './RoomMemberStatus'; import FakeRoomProvider from '../../../../tests/mocks/client/FakeRoomProvider'; import { createFakeRoom, createFakeSubscription, createFakeUser } from '../../../../tests/mocks/data'; const user = createFakeUser({ active: true, roles: ['admin'], type: 'user', status: UserStatus.ONLINE, }); const user2 = createFakeUser({ active: true, roles: ['admin'], type: 'user', statusText: 'Sample Status', status: UserStatus.ONLINE, }); const user3 = createFakeUser({ active: true, roles: ['admin'], type: 'user', status: UserStatus.ONLINE, }); const userWithExpiration = createFakeUser({ active: true, roles: ['admin'], type: 'user', statusText: 'In a meeting', statusExpiresAt: new Date(Date.now() + 60 * 60 * 1000), status: UserStatus.BUSY, }); describe('RoomMemberStatus', () => { it('should render the statusText of the DM partner', () => { const room = createFakeRoom({ t: 'd', uids: [user._id, user2._id] }); const subscription = createFakeSubscription({ t: 'd', rid: room._id }); render( , { wrapper: mockAppRoot() .withSubscriptions([{ ...subscription, ...room }] as unknown as SubscriptionWithRoom[]) .withUser(user) .withUsers([user2]) .build(), }, ); expect(screen.getByText('Sample Status')).toBeInTheDocument(); }); it('should expose the expiration text on the title attribute when the partner has one', () => { const room = createFakeRoom({ t: 'd', uids: [user._id, userWithExpiration._id] }); const subscription = createFakeSubscription({ t: 'd', rid: room._id }); render( , { wrapper: mockAppRoot() .withSubscriptions([{ ...subscription, ...room }] as unknown as SubscriptionWithRoom[]) .withUser(user) .withUsers([userWithExpiration]) .build(), }, ); const wrapper = screen.getByText('In a meeting').closest('[title]'); expect(wrapper).toHaveAttribute('title'); expect(wrapper?.getAttribute('title')).not.toBe(''); }); it('should not render statusText for multi-user DMs (3+ participants)', () => { const room = createFakeRoom({ t: 'd', uids: [user._id, user2._id, user3._id] }); const subscription = createFakeSubscription({ t: 'd', rid: room._id }); render( , { wrapper: mockAppRoot() .withSubscriptions([{ ...subscription, ...room }] as unknown as SubscriptionWithRoom[]) .withUser(user) .withUsers([user2, user3]) .build(), }, ); expect(screen.queryByText('Sample Status')).not.toBeInTheDocument(); }); it('should not render statusText for non-DM rooms', () => { const room = createFakeRoom({ t: 'c' }); const subscription = createFakeSubscription({ t: 'c', rid: room._id }); render( , { wrapper: mockAppRoot() .withSubscriptions([{ ...subscription, ...room }] as unknown as SubscriptionWithRoom[]) .withUser(user) .build(), }, ); expect(screen.queryByText('Sample Status')).not.toBeInTheDocument(); }); });