From af37802a54a0bd17887de969bcf39566f4046e49 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Date: Mon, 21 Jul 2025 15:31:18 -0300 Subject: [PATCH 1/2] fix test --- .../UserAndRoomAutoCompleteMultiple.spec.tsx | 132 +++++++++--------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/apps/meteor/client/components/UserAndRoomAutoCompleteMultiple/UserAndRoomAutoCompleteMultiple.spec.tsx b/apps/meteor/client/components/UserAndRoomAutoCompleteMultiple/UserAndRoomAutoCompleteMultiple.spec.tsx index f37e6a32c8c74..3225d0c3ec404 100644 --- a/apps/meteor/client/components/UserAndRoomAutoCompleteMultiple/UserAndRoomAutoCompleteMultiple.spec.tsx +++ b/apps/meteor/client/components/UserAndRoomAutoCompleteMultiple/UserAndRoomAutoCompleteMultiple.spec.tsx @@ -1,91 +1,91 @@ -import { useUser, useUserSubscriptions, useRoomAvatarPath } from '@rocket.chat/ui-contexts'; +import type { IRoom } from '@rocket.chat/core-typings'; +import { MockedAppRootBuilder } from '@rocket.chat/mock-providers/dist/MockedAppRootBuilder'; +import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import UserAndRoomAutoCompleteMultiple from './UserAndRoomAutoCompleteMultiple'; +import { createFakeSubscription, createFakeUser } from '../../../tests/mocks/data'; import { roomCoordinator } from '../../lib/rooms/roomCoordinator'; -// Mock dependencies -jest.mock('@rocket.chat/ui-contexts', () => ({ - useUser: jest.fn(), - useUserSubscriptions: jest.fn(), - useRoomAvatarPath: jest.fn(), -})); +const user = createFakeUser({ + active: true, + roles: ['admin'], + type: 'user', +}); + +const direct = createFakeSubscription({ + t: 'd', + name: 'Direct', +}); + +const channel = createFakeSubscription({ + t: 'c', + name: 'General', +}); + +const appRoot = new MockedAppRootBuilder() + .withSubscriptions([ + { ...direct, ro: false }, + { ...channel, ro: true }, + ] as unknown as SubscriptionWithRoom[]) + .withUser(user); + jest.mock('../../lib/rooms/roomCoordinator', () => ({ - roomCoordinator: { readOnly: jest.fn() }, + roomCoordinator: { + readOnly: jest.fn(), + }, })); -const mockUser = { _id: 'user1', username: 'testuser' }; +beforeEach(() => { + (roomCoordinator.readOnly as jest.Mock).mockReturnValue(false); +}); -const mockRooms = [ - { - rid: 'room1', - fname: 'General', - name: 'general', - t: 'c', - avatarETag: 'etag1', - }, - { - rid: 'room2', - fname: 'Direct', - name: 'direct', - t: 'd', - avatarETag: 'etag2', - blocked: false, - blocker: false, - }, -]; - -describe('UserAndRoomAutoCompleteMultiple', () => { - beforeEach(() => { - (useUser as jest.Mock).mockReturnValue(mockUser); - (useUserSubscriptions as jest.Mock).mockReturnValue(mockRooms); - (useRoomAvatarPath as jest.Mock).mockReturnValue((rid: string) => `/avatar/path/${rid}`); - (roomCoordinator.readOnly as jest.Mock).mockReturnValue(false); - }); +afterEach(() => jest.clearAllMocks()); - it('should render options based on user subscriptions', async () => { - render(); +it('should render options based on user subscriptions', async () => { + render(, { wrapper: appRoot.build() }); - const input = screen.getByRole('textbox'); - await userEvent.click(input); + const input = screen.getByRole('textbox'); + await userEvent.click(input); - await waitFor(() => { - expect(screen.getByText('General')).toBeInTheDocument(); - }); + await waitFor(() => { + expect(screen.getByText('Direct')).toBeInTheDocument(); + }); - await waitFor(() => { - expect(screen.getByText('Direct')).toBeInTheDocument(); - }); + await waitFor(() => { + expect(screen.getByText('General')).toBeInTheDocument(); }); +}); - it('should filter out read-only rooms', async () => { - (roomCoordinator.readOnly as jest.Mock).mockImplementation((rid) => rid === 'room1'); - render(); +it('should filter out read-only rooms', async () => { + (roomCoordinator.readOnly as jest.Mock).mockReturnValueOnce(true); - const input = screen.getByRole('textbox'); - await userEvent.click(input); + render(, { wrapper: appRoot.build() }); - await waitFor(() => { - expect(screen.queryByText('General')).not.toBeInTheDocument(); - }); - await waitFor(() => { - expect(screen.getByText('Direct')).toBeInTheDocument(); - }); + const input = screen.getByRole('textbox'); + await userEvent.click(input); + + await waitFor(() => { + expect(screen.getByText('General')).toBeInTheDocument(); }); - it('should call onChange when selecting an option', async () => { - const handleChange = jest.fn(); - render(); + await waitFor(() => { + expect(screen.queryByText('Direct')).not.toBeInTheDocument(); + }); +}); - const input = screen.getByRole('textbox'); - await userEvent.click(input); +it('should call onChange when selecting an option', async () => { + const handleChange = jest.fn(); + render(, { wrapper: appRoot.build() }); - await waitFor(() => { - expect(screen.getByText('General')).toBeInTheDocument(); - }); + const input = screen.getByRole('textbox'); + await userEvent.click(input); - await userEvent.click(screen.getByText('General')); - expect(handleChange).toHaveBeenCalled(); + await waitFor(() => { + expect(screen.getByText('General')).toBeInTheDocument(); }); + + await userEvent.click(screen.getByText('General')); + expect(handleChange).toHaveBeenCalled(); }); From 64b339694e287d4926b84b26dba1f151b0bfc026 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Date: Mon, 21 Jul 2025 15:54:42 -0300 Subject: [PATCH 2/2] typecheck --- .../UserAndRoomAutoCompleteMultiple.spec.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/meteor/client/components/UserAndRoomAutoCompleteMultiple/UserAndRoomAutoCompleteMultiple.spec.tsx b/apps/meteor/client/components/UserAndRoomAutoCompleteMultiple/UserAndRoomAutoCompleteMultiple.spec.tsx index 3225d0c3ec404..ff2a88d8093d6 100644 --- a/apps/meteor/client/components/UserAndRoomAutoCompleteMultiple/UserAndRoomAutoCompleteMultiple.spec.tsx +++ b/apps/meteor/client/components/UserAndRoomAutoCompleteMultiple/UserAndRoomAutoCompleteMultiple.spec.tsx @@ -1,4 +1,3 @@ -import type { IRoom } from '@rocket.chat/core-typings'; import { MockedAppRootBuilder } from '@rocket.chat/mock-providers/dist/MockedAppRootBuilder'; import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; import { render, screen, waitFor } from '@testing-library/react';