diff --git a/frontend/src/components/Primitives/Layout/CreateHeader/CreateHeader.tsx b/frontend/src/components/Primitives/Layout/CreateHeader/CreateHeader.tsx index 84b54f561..b6e99ee5d 100644 --- a/frontend/src/components/Primitives/Layout/CreateHeader/CreateHeader.tsx +++ b/frontend/src/components/Primitives/Layout/CreateHeader/CreateHeader.tsx @@ -21,7 +21,7 @@ const CreateHeader = ({ title, disableBack, handleBack }: CreateHeaderProps) => {title} - diff --git a/frontend/src/components/Primitives/Popovers/TeamRolePopover/TeamRolePopover.tsx b/frontend/src/components/Primitives/Popovers/TeamRolePopover/TeamRolePopover.tsx index 483340b56..6846f2317 100644 --- a/frontend/src/components/Primitives/Popovers/TeamRolePopover/TeamRolePopover.tsx +++ b/frontend/src/components/Primitives/Popovers/TeamRolePopover/TeamRolePopover.tsx @@ -29,6 +29,7 @@ const TeamRolePopover = React.memo(({ handleRoleChange }: TeamRolePopoverProps) { handleRoleChange(TeamUserRoles.MEMBER); @@ -47,6 +48,7 @@ const TeamRolePopover = React.memo(({ handleRoleChange }: TeamRolePopoverProps) { handleRoleChange(TeamUserRoles.ADMIN); @@ -65,6 +67,7 @@ const TeamRolePopover = React.memo(({ handleRoleChange }: TeamRolePopoverProps) { handleRoleChange(TeamUserRoles.STAKEHOLDER); diff --git a/frontend/src/components/Sidebar/Sidebar.spec.tsx b/frontend/src/components/Sidebar/Sidebar.spec.tsx index 22a8f1bea..e22678fa5 100644 --- a/frontend/src/components/Sidebar/Sidebar.spec.tsx +++ b/frontend/src/components/Sidebar/Sidebar.spec.tsx @@ -1,6 +1,7 @@ -import Sidebar, { SidebarProps } from '@/components/Sidebar/Sidebar'; +import Sidebar from '@/components/Sidebar/Sidebar'; import { libraryMocks } from '@/utils/testing/mocks'; import { renderWithProviders } from '@/utils/testing/renderWithProviders'; +import { SidebarProps } from '@components/Sidebar/types'; const DEFAULT_PROPS = { firstName: 'First', diff --git a/frontend/src/components/Teams/CreateTeam/CreateTeam.spec.tsx b/frontend/src/components/Teams/CreateTeam/CreateTeam.spec.tsx index 59e970f92..4538e20d8 100644 --- a/frontend/src/components/Teams/CreateTeam/CreateTeam.spec.tsx +++ b/frontend/src/components/Teams/CreateTeam/CreateTeam.spec.tsx @@ -1,11 +1,31 @@ +import { UseMutationResult } from '@tanstack/react-query'; import { fireEvent, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import CreateTeam from '@/components/Teams/CreateTeam/CreateTeam'; +import { ROUTES } from '@/constants/routes'; import { renderWithProviders } from '@/utils/testing/renderWithProviders'; +import useCreateTeam from '@hooks/teams/useCreateTeam'; +import { libraryMocks } from '@utils/testing/mocks'; -const render = () => renderWithProviders(); +const { mockRouter } = libraryMocks.mockNextRouter({ pathname: ROUTES.NewTeam }); + +const render = () => renderWithProviders(, { routerOptions: mockRouter }); + +const mockUseCreateTeam = useCreateTeam as jest.Mock>; +jest.mock('@/hooks/teams/useCreateTeam'); describe('Teams/CreateTeam', () => { + beforeEach(() => { + mockUseCreateTeam.mockReturnValue({ + mutate: jest.fn(), + } as Partial); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + it('should render correctly', () => { // Act const { getByTestId, queryByLabelText } = render(); @@ -22,12 +42,48 @@ describe('Teams/CreateTeam', () => { it('should open a UserListDialog', async () => { // Act const { getByTestId } = render(); + fireEvent.click(getByTestId('addRemoveMembersTrigger')); // Assert - fireEvent.click(getByTestId('addRemoveMembersTrigger')); await waitFor(() => { expect(getByTestId('userListDialog')).toBeInTheDocument(); }); }); + + it('should handle create team', async () => { + // Arrange + const createTeamMutation = jest.fn(); + + mockUseCreateTeam.mockReturnValue({ + mutate: createTeamMutation, + status: 'success', + } as Partial); + + // Act + const { getByText, getByLabelText } = render(); + + await userEvent.type(getByLabelText('Team name'), 'MyTeam'); + + fireEvent.click(getByText('Create team')); + + // Assert + + await waitFor(() => { + expect(createTeamMutation).toBeCalledWith({ name: 'MyTeam', users: [] }); + expect(mockRouter.push).toHaveBeenCalledWith(ROUTES.Teams); + }); + }); + + it('should redirect back', async () => { + // Act + const { getByTestId } = render(); + fireEvent.click(getByTestId('backButton')); + + // Assert + + await waitFor(() => { + expect(mockRouter.back).toHaveBeenCalled(); + }); + }); }); diff --git a/frontend/src/components/Teams/Team/ListMembers/ListMembers.spec.tsx b/frontend/src/components/Teams/Team/ListMembers/ListMembers.spec.tsx new file mode 100644 index 000000000..bc7530b11 --- /dev/null +++ b/frontend/src/components/Teams/Team/ListMembers/ListMembers.spec.tsx @@ -0,0 +1,147 @@ +import { UseMutationResult, UseQueryResult } from '@tanstack/react-query'; +import { fireEvent, waitFor } from '@testing-library/react'; + +import { ROUTES } from '@/constants/routes'; +import useTeam from '@/hooks/teams/useTeam'; +import { createTeamState } from '@/store/team.atom'; +import { usersListState } from '@/store/user.atom'; +import { + renderWithProviders, + RenderWithProvidersOptions, +} from '@/utils/testing/renderWithProviders'; +import ListMembers, { ListMembersProps } from '@components/Teams/Team/ListMembers/ListMembers'; +import useUpdateTeamUsers from '@hooks/teams/useUpdateTeamUsers'; +import useCurrentSession, { UseCurrentSessionResult } from '@hooks/useCurrentSession'; +import { TeamUserRoles } from '@utils/enums/team.user.roles'; +import { TeamFactory } from '@utils/factories/team'; +import { UserListFactory } from '@utils/factories/user'; +import { libraryMocks } from '@utils/testing/mocks'; +import { verifyIfIsNewJoiner } from '@utils/verifyIfIsNewJoiner'; + +const { mockRouter } = libraryMocks.mockNextRouter({ pathname: ROUTES.NewTeam }); + +const render = (props?: Partial, options?: Partial) => + renderWithProviders(, { + routerOptions: mockRouter, + ...options, + }); + +const mockUseUpdateTeamUsers = useUpdateTeamUsers as jest.Mock>; +const mockUseTeam = useTeam as jest.Mock>; +const mockUseCurrentSession = useCurrentSession as jest.Mock>; + +jest.mock('@/hooks/teams/useUpdateTeamUsers'); +jest.mock('@/hooks/teams/useTeam'); +jest.mock('@/hooks/useCurrentSession'); + +describe('Teams/CreateTeam', () => { + beforeEach(() => { + mockUseUpdateTeamUsers.mockReturnValue({ + mutate: jest.fn(), + } as Partial); + + mockUseTeam.mockReturnValue({ + data: TeamFactory.create(), + } as Partial); + + mockUseCurrentSession.mockReturnValue({ + isSAdmin: true, + userId: '123', + } as Partial); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should update team members list on team page', async () => { + // Act + const users = UserListFactory.createMany(2, [{ isChecked: true }, { isChecked: false }]); + const team = TeamFactory.create(); + const updateTeamUsersMutation = jest.fn(); + + mockUseTeam.mockReturnValue({ + data: team, + } as Partial); + + mockUseUpdateTeamUsers.mockReturnValue({ + mutate: updateTeamUsersMutation, + } as Partial); + + const initialState = ({ set }: any) => { + set(usersListState, users); + }; + + const { mockRouter: teamPageMockRouter } = libraryMocks.mockNextRouter({ + pathname: ROUTES.TeamPage(team.id), + query: { teamId: team.id }, + }); + + const { getByText } = render( + { isTeamPage: true }, + { + routerOptions: teamPageMockRouter, + recoilOptions: { initialState, recoilHandler: jest.fn(), recoilState: usersListState }, + }, + ); + + const isNewJoiner = verifyIfIsNewJoiner(users[0].joinedAt, users[0].providerAccountCreatedAt); + + // Assert + fireEvent.click(getByText('Update')); + + await waitFor(() => { + expect(updateTeamUsersMutation).toBeCalledWith({ + addUsers: [ + { + user: users[0]._id, + role: TeamUserRoles.MEMBER, + isNewJoiner, + canBeResponsible: !isNewJoiner, + team: team.id, + }, + ], + removeUsers: [], + team: team.id, + }); + }); + }); + + it('should update team members list on create team page', async () => { + // Act + const user = UserListFactory.create({ isChecked: true }); + const recoilHandler = jest.fn(); + + const initialState = ({ set }: any) => { + set(usersListState, [user]); + }; + + mockUseCurrentSession.mockReturnValue({ + isSAdmin: false, + userId: user._id, + } as Partial); + + const { getByText } = render( + { isTeamPage: false }, + { + recoilOptions: { initialState, recoilHandler, recoilState: createTeamState }, + }, + ); + + const isNewJoiner = verifyIfIsNewJoiner(user.joinedAt, user.providerAccountCreatedAt); + + // Assert + fireEvent.click(getByText('Update')); + + await waitFor(() => { + expect(recoilHandler).toBeCalledWith([ + { + user, + role: TeamUserRoles.MEMBER, + isNewJoiner, + canBeResponsible: !isNewJoiner, + }, + ]); + }); + }); +}); diff --git a/frontend/src/components/Teams/Team/ListMembers/ListMembers.tsx b/frontend/src/components/Teams/Team/ListMembers/ListMembers.tsx index d140ab5b1..a333232f2 100644 --- a/frontend/src/components/Teams/Team/ListMembers/ListMembers.tsx +++ b/frontend/src/components/Teams/Team/ListMembers/ListMembers.tsx @@ -15,13 +15,13 @@ import { TeamUserRoles } from '@/utils/enums/team.user.roles'; import { ToastStateEnum } from '@/utils/enums/toast-types'; import { verifyIfIsNewJoiner } from '@/utils/verifyIfIsNewJoiner'; -type Props = { +export type ListMembersProps = { setIsOpen: Dispatch>; isOpen: boolean; isTeamPage?: boolean; }; -const ListMembers = ({ isOpen, setIsOpen, isTeamPage }: Props) => { +const ListMembers = ({ isOpen, setIsOpen, isTeamPage }: ListMembersProps) => { const { query: { teamId }, } = useRouter(); diff --git a/frontend/src/components/Teams/Team/TeamMemberItem/TeamMemberItem.spec.tsx b/frontend/src/components/Teams/Team/TeamMemberItem/TeamMemberItem.spec.tsx index cbbb74969..2a5ad96e1 100644 --- a/frontend/src/components/Teams/Team/TeamMemberItem/TeamMemberItem.spec.tsx +++ b/frontend/src/components/Teams/Team/TeamMemberItem/TeamMemberItem.spec.tsx @@ -1,21 +1,48 @@ import React from 'react'; +import { UseMutationResult } from '@tanstack/react-query'; +import { fireEvent, waitFor } from '@testing-library/dom'; import TeamMemberItem, { TeamMemberItemProps, } from '@/components/Teams/Team/TeamMemberItem/TeamMemberItem'; -import { TeamUserFactory } from '@/utils/factories/user'; +import { createTeamState } from '@/store/team.atom'; +import { TeamUserFactory, UserFactory } from '@/utils/factories/user'; import { getFormattedUsername } from '@/utils/getFormattedUsername'; import { libraryMocks } from '@/utils/testing/mocks'; -import { renderWithProviders } from '@/utils/testing/renderWithProviders'; +import { + renderWithProviders, + RenderWithProvidersOptions, +} from '@/utils/testing/renderWithProviders'; +import useUpdateTeamUser from '@hooks/teams/useUpdateTeamUser'; +import { TeamUserRoles } from '@utils/enums/team.user.roles'; const { mockRouter } = libraryMocks.mockNextRouter({ pathname: '/teams' }); +const mockUser = UserFactory.create(); -const render = (props: Partial = {}) => +const render = ( + props: Partial = {}, + options?: Partial, +) => renderWithProviders(, { routerOptions: mockRouter, + sessionOptions: { user: mockUser }, + ...options, }); +const mockUseUpdateTeamUser = useUpdateTeamUser as jest.Mock>; +jest.mock('@/hooks/teams/useUpdateTeamUser'); + describe('Components/Teams/Team/TeamMemberItem', () => { + beforeEach(() => { + mockUseUpdateTeamUser.mockReturnValue({ + mutate: jest.fn(), + } as Partial); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + it('should render correctly', () => { // Arrange const member = TeamUserFactory.create(); @@ -48,4 +75,207 @@ describe('Components/Teams/Team/TeamMemberItem', () => { // Assert expect(getByTestId('newJoinerTooltip')).toBeInTheDocument(); }); + + it('should update team user role on team page', async () => { + // Arrange + const teamUser = TeamUserFactory.create({ role: TeamUserRoles.MEMBER }); + const updateTeamUserMutation = jest.fn(); + + mockUseUpdateTeamUser.mockReturnValue({ + mutate: updateTeamUserMutation, + } as Partial); + + const { getByTestId } = render({ + member: teamUser, + hasPermissions: true, + }); + + // Act + const trigger = getByTestId('teamRolePopoverTrigger'); + if (trigger) fireEvent.click(trigger); + + fireEvent.click(getByTestId('teamAdminPopover')); + + // Assert + await waitFor(() => { + expect(updateTeamUserMutation).toBeCalledWith({ + ...teamUser, + role: TeamUserRoles.ADMIN, + user: teamUser.user._id, + }); + }); + }); + + it('should update team user role on create team page', async () => { + // Arrange + const teamUser = TeamUserFactory.create({ role: TeamUserRoles.MEMBER }); + const recoilHandler = jest.fn(); + + const { getByTestId } = render( + { + isTeamPage: false, + member: teamUser, + hasPermissions: true, + }, + { + recoilOptions: { recoilState: createTeamState, recoilHandler }, + }, + ); + + // Act + const trigger = getByTestId('teamRolePopoverTrigger'); + if (trigger) fireEvent.click(trigger); + + fireEvent.click(getByTestId('teamAdminPopover')); + + // Assert + await waitFor(() => { + expect(recoilHandler).toBeCalled(); + }); + }); + + it('should update team user isNewJoiner status on team page', async () => { + // Arrange + const teamUser = TeamUserFactory.create({ + isNewJoiner: true, + canBeResponsible: false, + role: TeamUserRoles.MEMBER, + }); + const updateTeamUserMutation = jest.fn(); + + mockUseUpdateTeamUser.mockReturnValue({ + mutate: updateTeamUserMutation, + } as Partial); + + const { getByTestId, getByText } = render({ + member: teamUser, + hasPermissions: true, + }); + + // Act + const trigger = getByTestId('boardRolePopoverTrigger'); + if (trigger) fireEvent.click(trigger); + + const newJoinerSwitch = + getByText('New Joiner').parentElement?.parentElement?.querySelector('button'); + + if (newJoinerSwitch) fireEvent.click(newJoinerSwitch); + + // Assert + await waitFor(() => { + expect(updateTeamUserMutation).toBeCalledWith({ + ...teamUser, + user: teamUser.user._id, + isNewJoiner: !teamUser.isNewJoiner, + canBeResponsible: !teamUser.canBeResponsible, + }); + }); + }); + + it('should update team user isNewJoiner status on create team page', async () => { + // Arrange + const teamUser = TeamUserFactory.create({ + isNewJoiner: true, + canBeResponsible: false, + role: TeamUserRoles.MEMBER, + }); + const recoilHandler = jest.fn(); + + const { getByTestId, getByText } = render( + { + isTeamPage: false, + member: teamUser, + hasPermissions: true, + }, + { + recoilOptions: { recoilState: createTeamState, recoilHandler }, + }, + ); + + // Act + const trigger = getByTestId('boardRolePopoverTrigger'); + if (trigger) fireEvent.click(trigger); + + const newJoinerSwitch = + getByText('New Joiner').parentElement?.parentElement?.querySelector('button'); + + if (newJoinerSwitch) fireEvent.click(newJoinerSwitch); + + // Assert + await waitFor(() => { + expect(recoilHandler).toBeCalled(); + }); + }); + + it('should update team user canBeResponsible status on team page', async () => { + // Arrange + const teamUser = TeamUserFactory.create({ + isNewJoiner: false, + canBeResponsible: true, + role: TeamUserRoles.MEMBER, + }); + const updateTeamUserMutation = jest.fn(); + + mockUseUpdateTeamUser.mockReturnValue({ + mutate: updateTeamUserMutation, + } as Partial); + + const { getByTestId, getByText } = render({ + member: teamUser, + hasPermissions: true, + }); + + // Act + const trigger = getByTestId('boardRolePopoverTrigger'); + if (trigger) fireEvent.click(trigger); + + const canBeResponsibleSwitch = + getByText('Responsible allowed').parentElement?.parentElement?.querySelector('button'); + + if (canBeResponsibleSwitch) fireEvent.click(canBeResponsibleSwitch); + + // Assert + await waitFor(() => { + expect(updateTeamUserMutation).toBeCalledWith({ + ...teamUser, + user: teamUser.user._id, + canBeResponsible: !teamUser.canBeResponsible, + }); + }); + }); + + it('should update team user canBeResponsible status on create team page', async () => { + // Arrange + const teamUser = TeamUserFactory.create({ + isNewJoiner: false, + canBeResponsible: true, + role: TeamUserRoles.MEMBER, + }); + const recoilHandler = jest.fn(); + + const { getByTestId, getByText } = render( + { + isTeamPage: false, + member: teamUser, + hasPermissions: true, + }, + { + recoilOptions: { recoilState: createTeamState, recoilHandler }, + }, + ); + + // Act + const trigger = getByTestId('boardRolePopoverTrigger'); + if (trigger) fireEvent.click(trigger); + + const canBeResponsibleSwitch = + getByText('Responsible allowed').parentElement?.parentElement?.querySelector('button'); + + if (canBeResponsibleSwitch) fireEvent.click(canBeResponsibleSwitch); + + // Assert + await waitFor(() => { + expect(recoilHandler).toBeCalled(); + }); + }); }); diff --git a/frontend/src/components/Teams/Team/TeamMemberItem/TeamMemberItem.tsx b/frontend/src/components/Teams/Team/TeamMemberItem/TeamMemberItem.tsx index 560f4dea5..84a2697f1 100644 --- a/frontend/src/components/Teams/Team/TeamMemberItem/TeamMemberItem.tsx +++ b/frontend/src/components/Teams/Team/TeamMemberItem/TeamMemberItem.tsx @@ -97,7 +97,7 @@ const TeamMemberItem = React.memo( diff --git a/frontend/src/components/Teams/TeamsList/TeamItem/TeamItem.spec.tsx b/frontend/src/components/Teams/TeamsList/TeamItem/TeamItem.spec.tsx index 2a7c4e759..25a5b343d 100644 --- a/frontend/src/components/Teams/TeamsList/TeamItem/TeamItem.spec.tsx +++ b/frontend/src/components/Teams/TeamsList/TeamItem/TeamItem.spec.tsx @@ -1,29 +1,61 @@ // TODO: Test if Members & Team Admins <> is in the Document +import { UseMutationResult } from '@tanstack/react-query'; +import { fireEvent, waitFor } from '@testing-library/dom'; + import TeamItem, { TeamItemProps } from '@/components/Teams/TeamsList/TeamItem/TeamItem'; import { TeamUserRoles } from '@/utils/enums/team.user.roles'; import { TeamFactory } from '@/utils/factories/team'; import { TeamUserFactory } from '@/utils/factories/user'; import { libraryMocks } from '@/utils/testing/mocks'; -import { renderWithProviders } from '@/utils/testing/renderWithProviders'; +import { + renderWithProviders, + RenderWithProvidersOptions, +} from '@/utils/testing/renderWithProviders'; +import useDeleteTeam from '@hooks/teams/useDeleteTeam'; +import useDeleteTeamUser from '@hooks/teams/useDeleteTeamUser'; +import useUpdateTeamUser from '@hooks/teams/useUpdateTeamUser'; const { mockRouter } = libraryMocks.mockNextRouter({ pathname: '/teams' }); -const render = (props: Partial = {}, options?: any) => - renderWithProviders( - , +const render = ( + props: Partial = {}, + options?: Partial, +) => { + const team = TeamFactory.create(); + return renderWithProviders( + , { routerOptions: mockRouter, + ...options, }, ); +}; + +const mockUseDeleteTeam = useDeleteTeam as jest.Mock>; +const mockUseDeleteTeamUser = useDeleteTeamUser as jest.Mock>; +const mockUseUpdateTeamUser = useUpdateTeamUser as jest.Mock>; + +jest.mock('@/hooks/teams/useDeleteTeam'); +jest.mock('@/hooks/teams/useDeleteTeamUser'); +jest.mock('@/hooks/teams/useUpdateTeamUser'); describe('Components/Teams/TeamsList/TeamItem', () => { beforeEach(() => { + mockUseDeleteTeam.mockReturnValue({ + mutate: jest.fn(), + } as Partial); + + mockUseDeleteTeamUser.mockReturnValue({ + mutate: jest.fn(), + } as Partial); + + mockUseUpdateTeamUser.mockReturnValue({ + mutate: jest.fn(), + } as Partial); + }); + + afterEach(() => { jest.clearAllMocks(); }); @@ -69,9 +101,101 @@ describe('Components/Teams/TeamsList/TeamItem', () => { }); // Act - const { getByText } = render({ team }, { user: teamAdmin.user }); + const { getByText } = render({ team, userId: teamAdmin.user._id }); // Assert expect(getByText('Create first board')).toBeInTheDocument(); }); + + it('should delete the team', async () => { + // Arrange + const deleteTeamMutation = jest.fn(); + + mockUseDeleteTeam.mockReturnValue({ + mutate: deleteTeamMutation, + } as Partial); + + const teamAdmin = TeamUserFactory.create({ role: TeamUserRoles.ADMIN }); + const team = TeamFactory.create({ + users: [teamAdmin], + }); + + // Act + const { getByTestId, getByText } = render({ team, userId: teamAdmin.user._id }); + + fireEvent.click(getByTestId('deleteTeamButton')); + fireEvent.click(getByText('Delete')); + + // Assert + await waitFor(() => { + expect(deleteTeamMutation).toBeCalledWith(team.id); + }); + }); + + it('should remove the user from the team', async () => { + // Arrange + const teamMember = TeamUserFactory.create({ role: TeamUserRoles.MEMBER }); + const team = TeamFactory.create({ + users: [teamMember], + }); + + const { mockRouter } = libraryMocks.mockNextRouter({ + pathname: `/users/${teamMember.user._id}`, + query: { userId: teamMember.user._id }, + }); + + const deleteTeamUserMutation = jest.fn(); + + mockUseDeleteTeamUser.mockReturnValue({ + mutate: deleteTeamUserMutation, + } as Partial); + + // Act + const { getByTestId, getByText } = render( + { team, isSAdmin: true }, + { routerOptions: mockRouter }, + ); + + fireEvent.click(getByTestId('deleteTeamButton')); + fireEvent.click(getByText('Remove')); + + // Assert + await waitFor(() => { + expect(deleteTeamUserMutation).toBeCalledWith(teamMember); + }); + }); + + it('should change team user role on user teams page', async () => { + // Arrange + const teamMember = TeamUserFactory.create({ role: TeamUserRoles.MEMBER }); + const team = TeamFactory.create({ + users: [teamMember], + }); + + const { mockRouter } = libraryMocks.mockNextRouter({ + pathname: `/users/${teamMember.user._id}`, + query: { userId: teamMember.user._id }, + }); + + const updateamUserMutation = jest.fn(); + + mockUseUpdateTeamUser.mockReturnValue({ + mutate: updateamUserMutation, + } as Partial); + + // Act + const { getByTestId } = render({ team, isSAdmin: true }, { routerOptions: mockRouter }); + + fireEvent.click(getByTestId('teamRolePopoverTrigger')); + fireEvent.click(getByTestId('teamStakeholderPopover')); + + // Assert + await waitFor(() => { + expect(updateamUserMutation).toBeCalledWith({ + ...teamMember, + user: teamMember.user._id, + role: TeamUserRoles.STAKEHOLDER, + }); + }); + }); }); diff --git a/frontend/src/components/Teams/TeamsList/TeamItem/TeamItem.tsx b/frontend/src/components/Teams/TeamsList/TeamItem/TeamItem.tsx index 5945179ca..2279a5cee 100644 --- a/frontend/src/components/Teams/TeamsList/TeamItem/TeamItem.tsx +++ b/frontend/src/components/Teams/TeamsList/TeamItem/TeamItem.tsx @@ -153,7 +153,7 @@ const TeamItem = React.memo(({ team, userId, isSAdmin }: TeamItemProps) => { title={isTeamPage ? 'Delete team' : 'Remove User'} tooltip={isTeamPage ? 'Delete team' : 'Remove user'} > -