From 5ddc49644b4a823ee21c5beb75eda09f24d1ff4e Mon Sep 17 00:00:00 2001 From: Artur Fedorov <afedorov@gitlab.com> Date: Wed, 12 Mar 2025 15:49:49 +0100 Subject: [PATCH] Add additional checks for group projects Add fallback values for grapqhql response in case of response has some missing values Changelog: fixed EE: true --- .../shared/group_projects_dropdown.vue | 9 +++++---- .../shared/group_projects_dropdown_spec.js | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/ee/app/assets/javascripts/security_orchestration/components/shared/group_projects_dropdown.vue b/ee/app/assets/javascripts/security_orchestration/components/shared/group_projects_dropdown.vue index b15a071c7415..5e1a4548bb94 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/shared/group_projects_dropdown.vue +++ b/ee/app/assets/javascripts/security_orchestration/components/shared/group_projects_dropdown.vue @@ -32,10 +32,11 @@ export default { * otherwise after performing backend search and selecting found item * selection is overwritten */ - return uniqBy([...this.projects, ...data.group.projects.nodes], 'id'); + const { projects: { nodes = [] } = {} } = data.group || {}; + return uniqBy([...this.projects, ...nodes], 'id'); }, result({ data }) { - this.pageInfo = data?.group?.projects.pageInfo || {}; + this.pageInfo = data?.group?.projects?.pageInfo || {}; if (this.selectedButNotLoadedProjectIds.length > 0) { this.fetchGroupProjectsByIds(); @@ -176,8 +177,8 @@ export default { query: getGroupProjects, variables, }); - - this.projects = uniqBy([...this.projects, ...data.group.projects.nodes], 'id'); + const { projects: { nodes = [] } = {} } = data.group || {}; + this.projects = uniqBy([...this.projects, ...nodes], 'id'); } catch { this.$emit('projects-query-error'); } diff --git a/ee/spec/frontend/security_orchestration/components/shared/group_projects_dropdown_spec.js b/ee/spec/frontend/security_orchestration/components/shared/group_projects_dropdown_spec.js index b9d09244ed86..dd3e71860b2e 100644 --- a/ee/spec/frontend/security_orchestration/components/shared/group_projects_dropdown_spec.js +++ b/ee/spec/frontend/security_orchestration/components/shared/group_projects_dropdown_spec.js @@ -206,6 +206,26 @@ describe('GroupProjectsDropdown', () => { }); }); + describe('when fetch query returns group as null', () => { + it('renders empty list when group is null', async () => { + createComponent({ + handlers: { + handlers: { + getGroupProjects: jest.fn().mockResolvedValue({ + data: { + id: 1, + group: null, + }, + }), + }, + }, + }); + + await waitForPromises(); + expect(wrapper.emitted('projects-query-error')).toHaveLength(1); + }); + }); + describe('when a query is loading a new page of projects', () => { it('should render the loading spinner', async () => { createComponent({ handlers: mockApolloHandlers([], true) }); -- GitLab