From 29bf4a46bd9197701f2ac49c0820b773d69cbbcf Mon Sep 17 00:00:00 2001 From: Nikhil Kuriakose Date: Thu, 3 Jul 2025 09:07:11 +0200 Subject: [PATCH] fix(editor): Show shared with me only on multi user instances (#16770) --- .../Projects/ProjectNavigation.test.ts | 42 +++++++++++++++++++ .../components/Projects/ProjectNavigation.vue | 16 ++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/packages/frontend/editor-ui/src/components/Projects/ProjectNavigation.test.ts b/packages/frontend/editor-ui/src/components/Projects/ProjectNavigation.test.ts index 6b50fc1252..d1e9a745fa 100644 --- a/packages/frontend/editor-ui/src/components/Projects/ProjectNavigation.test.ts +++ b/packages/frontend/editor-ui/src/components/Projects/ProjectNavigation.test.ts @@ -6,6 +6,7 @@ import { createProjectListItem } from '@/__tests__/data/projects'; import ProjectsNavigation from '@/components/Projects/ProjectNavigation.vue'; import { useProjectsStore } from '@/stores/projects.store'; import { useSettingsStore } from '@/stores/settings.store'; +import { useUsersStore } from '@/stores/users.store'; vi.mock('vue-router', async () => { const actual = await vi.importActual('vue-router'); @@ -64,6 +65,7 @@ const renderComponent = createComponentRenderer(ProjectsNavigation, { let projectsStore: ReturnType>; let settingsStore: ReturnType>; +let usersStore: ReturnType>; const personalProjects = Array.from({ length: 3 }, createProjectListItem); const teamProjects = Array.from({ length: 3 }, () => createProjectListItem('team')); @@ -74,6 +76,7 @@ describe('ProjectsNavigation', () => { projectsStore = mockedStore(useProjectsStore); settingsStore = mockedStore(useSettingsStore); + usersStore = mockedStore(useUsersStore); }); it('should not throw an error', () => { @@ -226,4 +229,43 @@ describe('ProjectsNavigation', () => { expect(getByTestId('add-first-project-button')).toBeVisible(); expect(getByTestId('add-first-project-button').classList.contains('collapsed')).toBe(true); }); + + it('should not render shared menu item when only one verified user', async () => { + // Only one verified user + usersStore.allUsers = [ + { id: '1', isPendingUser: false, isDefaultUser: false, mfaEnabled: false }, + { id: '2', isPendingUser: true, isDefaultUser: false, mfaEnabled: false }, + ]; + projectsStore.teamProjectsLimit = -1; + projectsStore.isTeamProjectFeatureEnabled = true; + + const { queryByTestId } = renderComponent({ + props: { + collapsed: false, + }, + }); + + // The shared menu item should not be rendered + expect(queryByTestId('project-shared-menu-item')).not.toBeInTheDocument(); + }); + + it('should render shared menu item when more than one verified user', async () => { + // Only one verified user + usersStore.allUsers = [ + { id: '1', isPendingUser: false, isDefaultUser: false, mfaEnabled: false }, + { id: '2', isPendingUser: true, isDefaultUser: false, mfaEnabled: false }, + { id: '3', isPendingUser: false, isDefaultUser: false, mfaEnabled: false }, + ]; + projectsStore.teamProjectsLimit = -1; + projectsStore.isTeamProjectFeatureEnabled = true; + + const { getByTestId } = renderComponent({ + props: { + collapsed: false, + }, + }); + + // The shared menu item should not be rendered + expect(getByTestId('project-shared-menu-item')).toBeInTheDocument(); + }); }); diff --git a/packages/frontend/editor-ui/src/components/Projects/ProjectNavigation.vue b/packages/frontend/editor-ui/src/components/Projects/ProjectNavigation.vue index 73429505d5..edc4f7ebdc 100644 --- a/packages/frontend/editor-ui/src/components/Projects/ProjectNavigation.vue +++ b/packages/frontend/editor-ui/src/components/Projects/ProjectNavigation.vue @@ -1,5 +1,5 @@