From 20974d8e513f67e6f6691704348eeab4bd5ae880 Mon Sep 17 00:00:00 2001 From: Coung Ngo Date: Tue, 16 Dec 2025 13:50:56 +0000 Subject: [PATCH 1/4] Update naming from workspace to namespace Groups and projects are namespaces, not workspaces, so we should update the naming to reflect this. The name workspace was used in the frontend before it became common for the backend to use namespaces, so the name workspace has just stuck around until now. --- .../components/time_tracking/time_tracking_report.vue | 4 ++-- .../javascripts/work_items/components/create_work_item.vue | 2 +- .../work_items/components/notes/work_item_add_note.vue | 2 +- .../work_items/components/notes/work_item_comment_form.vue | 2 +- .../work_items/components/notes/work_item_note.vue | 2 +- .../work_items/components/work_item_created_updated.vue | 2 +- .../work_items/components/work_item_crm_contacts.vue | 2 +- .../work_items/components/work_item_description.vue | 2 +- .../javascripts/work_items/components/work_item_detail.vue | 2 +- .../work_item_development/work_item_development.vue | 2 +- .../javascripts/work_items/components/work_item_labels.vue | 4 ++-- .../work_item_links/work_item_children_wrapper.vue | 2 +- .../components/work_item_links/work_item_rolled_up_data.vue | 2 +- .../work_items/components/work_item_prefetch.vue | 2 +- .../work_items/components/work_item_state_toggle.vue | 2 +- app/assets/javascripts/work_items/graphql/cache_utils.js | 6 +++--- app/assets/javascripts/work_items/graphql/resolvers.js | 4 ++-- .../work_items/graphql/work_item_by_iid.query.graphql | 2 +- .../work_items/components/work_item_health_status.vue | 2 +- .../javascripts/work_items/components/work_item_status.vue | 4 ++-- spec/frontend/work_items/mock_data.js | 2 +- 21 files changed, 27 insertions(+), 27 deletions(-) diff --git a/app/assets/javascripts/sidebar/components/time_tracking/time_tracking_report.vue b/app/assets/javascripts/sidebar/components/time_tracking/time_tracking_report.vue index 646a1c0351c388..fbf7627c88a57f 100644 --- a/app/assets/javascripts/sidebar/components/time_tracking/time_tracking_report.vue +++ b/app/assets/javascripts/sidebar/components/time_tracking/time_tracking_report.vue @@ -97,7 +97,7 @@ export default { }; }, update(data) { - return data.workspace.workItem ?? {}; + return data.namespace.workItem ?? {}; }, skip() { return !this.workItemIid; @@ -155,7 +155,7 @@ export default { }, (sourceData) => produce(sourceData, (draftState) => { - const timeTrackingWidget = findTimeTrackingWidget(draftState.workspace.workItem); + const timeTrackingWidget = findTimeTrackingWidget(draftState.namespace.workItem); const timelogs = timeTrackingWidget.timelogs.nodes; const index = timelogs.findIndex((timelog) => timelog.id === timelogId); diff --git a/app/assets/javascripts/work_items/components/create_work_item.vue b/app/assets/javascripts/work_items/components/create_work_item.vue index ab6b387cb92e90..0518763f250daf 100644 --- a/app/assets/javascripts/work_items/components/create_work_item.vue +++ b/app/assets/javascripts/work_items/components/create_work_item.vue @@ -267,7 +267,7 @@ export default { return this.skipWorkItemQuery; }, update(data) { - return data?.workspace?.workItem ?? {}; + return data?.namespace?.workItem ?? {}; }, result() { this.initialLoadingWorkItem = false; diff --git a/app/assets/javascripts/work_items/components/notes/work_item_add_note.vue b/app/assets/javascripts/work_items/components/notes/work_item_add_note.vue index 142fa3f44d7904..f0f668382f87d8 100644 --- a/app/assets/javascripts/work_items/components/notes/work_item_add_note.vue +++ b/app/assets/javascripts/work_items/components/notes/work_item_add_note.vue @@ -158,7 +158,7 @@ export default { }; }, update(data) { - return data.workspace?.workItem ?? {}; + return data.namespace?.workItem ?? {}; }, skip() { return !this.workItemIid; diff --git a/app/assets/javascripts/work_items/components/notes/work_item_comment_form.vue b/app/assets/javascripts/work_items/components/notes/work_item_comment_form.vue index 21cd6b64b2a0c7..c7c3a0463ceb96 100644 --- a/app/assets/javascripts/work_items/components/notes/work_item_comment_form.vue +++ b/app/assets/javascripts/work_items/components/notes/work_item_comment_form.vue @@ -270,7 +270,7 @@ export default { }; }, update(data) { - return data.workspace?.workItem ?? {}; + return data.namespace?.workItem ?? {}; }, skip() { return !this.workItemIid; diff --git a/app/assets/javascripts/work_items/components/notes/work_item_note.vue b/app/assets/javascripts/work_items/components/notes/work_item_note.vue index f3598da12fdcbd..5a4f3faea80816 100644 --- a/app/assets/javascripts/work_items/components/notes/work_item_note.vue +++ b/app/assets/javascripts/work_items/components/notes/work_item_note.vue @@ -249,7 +249,7 @@ export default { }; }, update(data) { - return data.workspace?.workItem ?? {}; + return data.namespace?.workItem ?? {}; }, skip() { return !this.workItemIid; diff --git a/app/assets/javascripts/work_items/components/work_item_created_updated.vue b/app/assets/javascripts/work_items/components/work_item_created_updated.vue index 3a4fcdfdf61db9..02292f2f3c00a5 100644 --- a/app/assets/javascripts/work_items/components/work_item_created_updated.vue +++ b/app/assets/javascripts/work_items/components/work_item_created_updated.vue @@ -89,7 +89,7 @@ export default { return !this.workItemIid; }, update(data) { - return data.workspace?.workItem ?? {}; + return data.namespace?.workItem ?? {}; }, }, }, diff --git a/app/assets/javascripts/work_items/components/work_item_crm_contacts.vue b/app/assets/javascripts/work_items/components/work_item_crm_contacts.vue index 3ad9323bd8fe46..87a9f40e1526f6 100644 --- a/app/assets/javascripts/work_items/components/work_item_crm_contacts.vue +++ b/app/assets/javascripts/work_items/components/work_item_crm_contacts.vue @@ -133,7 +133,7 @@ export default { }; }, update(data) { - return data?.workspace?.workItem ?? {}; + return data?.namespace?.workItem ?? {}; }, result() { this.selectedCount = this.selectedItemIds.length; diff --git a/app/assets/javascripts/work_items/components/work_item_description.vue b/app/assets/javascripts/work_items/components/work_item_description.vue index 68b7cdd1f93f9d..b1d6df3cdf91cc 100644 --- a/app/assets/javascripts/work_items/components/work_item_description.vue +++ b/app/assets/javascripts/work_items/components/work_item_description.vue @@ -152,7 +152,7 @@ export default { }; }, update(data) { - return data?.workspace?.workItem || {}; + return data?.namespace?.workItem || {}; }, result() { if (this.isEditing) { diff --git a/app/assets/javascripts/work_items/components/work_item_detail.vue b/app/assets/javascripts/work_items/components/work_item_detail.vue index 699b27333ade6e..18088f40183c82 100644 --- a/app/assets/javascripts/work_items/components/work_item_detail.vue +++ b/app/assets/javascripts/work_items/components/work_item_detail.vue @@ -259,7 +259,7 @@ export default { if (this.workItemId) { return data.workItem ?? {}; } - return data.workspace?.workItem ?? {}; + return data.namespace?.workItem ?? {}; }, error() { if (this.workItem?.id === this.workItemId || this.workItem?.iid === this.workItemIid) { diff --git a/app/assets/javascripts/work_items/components/work_item_development/work_item_development.vue b/app/assets/javascripts/work_items/components/work_item_development/work_item_development.vue index 7ea93096a3e728..be827a25de9be2 100644 --- a/app/assets/javascripts/work_items/components/work_item_development/work_item_development.vue +++ b/app/assets/javascripts/work_items/components/work_item_development/work_item_development.vue @@ -185,7 +185,7 @@ export default { }; }, update(data) { - return data.workspace?.workItem || {}; + return data.namespace?.workItem || {}; }, skip() { return !this.workItemIid; diff --git a/app/assets/javascripts/work_items/components/work_item_labels.vue b/app/assets/javascripts/work_items/components/work_item_labels.vue index 80362e95da1a26..7e1718d34d9bac 100644 --- a/app/assets/javascripts/work_items/components/work_item_labels.vue +++ b/app/assets/javascripts/work_items/components/work_item_labels.vue @@ -180,10 +180,10 @@ export default { }; }, update(data) { - return data.workspace?.workItem || {}; + return data.namespace?.workItem || {}; }, result({ data }) { - const labels = findLabelsWidget(data?.workspace?.workItem)?.labels?.nodes || []; + const labels = findLabelsWidget(data?.namespace?.workItem)?.labels?.nodes || []; this.labelsCache = unionBy(this.labelsCache, labels, 'id'); this.selectedLabelsIds = labels.map(({ id }) => id); }, diff --git a/app/assets/javascripts/work_items/components/work_item_links/work_item_children_wrapper.vue b/app/assets/javascripts/work_items/components/work_item_links/work_item_children_wrapper.vue index c5711746b4e907..04fa9936fff2f9 100644 --- a/app/assets/javascripts/work_items/components/work_item_links/work_item_children_wrapper.vue +++ b/app/assets/javascripts/work_items/components/work_item_links/work_item_children_wrapper.vue @@ -233,7 +233,7 @@ export default { iid, }, update(data) { - return data.workspace?.workItem; + return data.namespace?.workItem; }, }) .catch((error) => { diff --git a/app/assets/javascripts/work_items/components/work_item_links/work_item_rolled_up_data.vue b/app/assets/javascripts/work_items/components/work_item_links/work_item_rolled_up_data.vue index 8af21e931a4d39..dc0107437e80ef 100644 --- a/app/assets/javascripts/work_items/components/work_item_links/work_item_rolled_up_data.vue +++ b/app/assets/javascripts/work_items/components/work_item_links/work_item_rolled_up_data.vue @@ -47,7 +47,7 @@ export default { }; }, update(data) { - return data.workspace?.workItem || {}; + return data.namespace?.workItem || {}; }, skip() { return !this.workItemIid; diff --git a/app/assets/javascripts/work_items/components/work_item_prefetch.vue b/app/assets/javascripts/work_items/components/work_item_prefetch.vue index d2a571b2fcb023..344c39fd31fba5 100644 --- a/app/assets/javascripts/work_items/components/work_item_prefetch.vue +++ b/app/assets/javascripts/work_items/components/work_item_prefetch.vue @@ -42,7 +42,7 @@ export default normalizeRender({ return !this.fullPath || this.skipQuery; }, update(data) { - return data.workspace?.workItem ?? {}; + return data.namespace?.workItem ?? {}; }, }, }, diff --git a/app/assets/javascripts/work_items/components/work_item_state_toggle.vue b/app/assets/javascripts/work_items/components/work_item_state_toggle.vue index 02ac4911f4dd70..d919480984c0b1 100644 --- a/app/assets/javascripts/work_items/components/work_item_state_toggle.vue +++ b/app/assets/javascripts/work_items/components/work_item_state_toggle.vue @@ -98,7 +98,7 @@ export default { }; }, update(data) { - return data.workspace?.workItem ?? {}; + return data.namespace?.workItem ?? {}; }, skip() { return !this.workItemIid; diff --git a/app/assets/javascripts/work_items/graphql/cache_utils.js b/app/assets/javascripts/work_items/graphql/cache_utils.js index 79c2355fb9c0d9..b90ab082bcba52 100644 --- a/app/assets/javascripts/work_items/graphql/cache_utils.js +++ b/app/assets/javascripts/work_items/graphql/cache_utils.js @@ -290,7 +290,7 @@ export const updateParent = ({ cache, fullPath, iid, workItem }) => { cache.writeQuery({ ...queryArgs, data: produce(sourceData, (draftState) => { - const children = findHierarchyWidgetChildren(draftState.workspace?.workItem); + const children = findHierarchyWidgetChildren(draftState.namespace?.workItem); const index = children.findIndex((child) => child.id === workItem.id); if (index >= 0) children.splice(index, 1); }), @@ -310,7 +310,7 @@ export const updateWorkItemCurrentTodosWidget = ({ cache, fullPath, iid, todos } } const newData = produce(sourceData, (draftState) => { - const widgetCurrentUserTodos = findCurrentUserTodosWidget(draftState.workspace.workItem); + const widgetCurrentUserTodos = findCurrentUserTodosWidget(draftState.namespace.workItem); widgetCurrentUserTodos.currentUserTodos.nodes = todos; }); @@ -724,7 +724,7 @@ export const setNewWorkItemCache = ({ iid: NEW_WORK_ITEM_IID, }, data: { - workspace: { + namespace: { id: newWorkItemPath, workItem: { id: newWorkItemId(workItemType), diff --git a/app/assets/javascripts/work_items/graphql/resolvers.js b/app/assets/javascripts/work_items/graphql/resolvers.js index 2f13998d608c45..33e1c3d4a22365 100644 --- a/app/assets/javascripts/work_items/graphql/resolvers.js +++ b/app/assets/javascripts/work_items/graphql/resolvers.js @@ -192,9 +192,9 @@ export const updateNewWorkItemCache = (input, cache) => { // We want to allow users to delete a title for an in-progress work item draft // as we check for the title being valid when submitting the form - if (title !== undefined) draftData.workspace.workItem.title = title; + if (title !== undefined) draftData.namespace.workItem.title = title; - if (confidential !== undefined) draftData.workspace.workItem.confidential = confidential; + if (confidential !== undefined) draftData.namespace.workItem.confidential = confidential; }), ); diff --git a/app/assets/javascripts/work_items/graphql/work_item_by_iid.query.graphql b/app/assets/javascripts/work_items/graphql/work_item_by_iid.query.graphql index 3caad892890414..5ae559d763e227 100644 --- a/app/assets/javascripts/work_items/graphql/work_item_by_iid.query.graphql +++ b/app/assets/javascripts/work_items/graphql/work_item_by_iid.query.graphql @@ -1,7 +1,7 @@ #import "ee_else_ce/work_items/graphql/work_item.fragment.graphql" query namespaceWorkItem($fullPath: ID!, $iid: String!) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id workItem(iid: $iid) { ...WorkItem diff --git a/ee/app/assets/javascripts/work_items/components/work_item_health_status.vue b/ee/app/assets/javascripts/work_items/components/work_item_health_status.vue index a4e6110d28ee97..9a19e4b942894f 100644 --- a/ee/app/assets/javascripts/work_items/components/work_item_health_status.vue +++ b/ee/app/assets/javascripts/work_items/components/work_item_health_status.vue @@ -94,7 +94,7 @@ export default { }; }, update(data) { - return data.workspace?.workItem || {}; + return data.namespace?.workItem || {}; }, skip() { return !this.workItemIid; diff --git a/ee/app/assets/javascripts/work_items/components/work_item_status.vue b/ee/app/assets/javascripts/work_items/components/work_item_status.vue index d7dc5a34e80980..99b8eaaa1d2d38 100644 --- a/ee/app/assets/javascripts/work_items/components/work_item_status.vue +++ b/ee/app/assets/javascripts/work_items/components/work_item_status.vue @@ -137,10 +137,10 @@ export default { }; }, update(data) { - return data?.workspace?.workItem ?? {}; + return data?.namespace?.workItem ?? {}; }, result({ data }) { - this.localStatus = findStatusWidget(data?.workspace?.workItem)?.status || {}; + this.localStatus = findStatusWidget(data?.namespace?.workItem)?.status || {}; }, skip() { return !this.workItemIid || !this.fullPath; diff --git a/spec/frontend/work_items/mock_data.js b/spec/frontend/work_items/mock_data.js index 301a3aee7e15f4..498951b5e70fcf 100644 --- a/spec/frontend/work_items/mock_data.js +++ b/spec/frontend/work_items/mock_data.js @@ -2171,7 +2171,7 @@ export const workItemByIidResponseFactory = (options) => { const response = workItemResponseFactory(options); return { data: { - workspace: { + namespace: { __typename: 'Project', id: 'gid://gitlab/Project/1', workItem: response.data.workItem, -- GitLab From f5ab55900efc68f52b7bb150ef8032d25317e46b Mon Sep 17 00:00:00 2001 From: Coung Ngo Date: Tue, 16 Dec 2025 15:01:19 +0000 Subject: [PATCH 2/4] Update the rest --- .../boards/components/board_list.vue | 2 +- .../issues/show/components/description.vue | 2 +- .../components/create_work_item.vue | 2 +- .../notes/work_item_comment_form.vue | 2 +- .../shared/work_item_relationship_icons.vue | 6 +-- .../shared/work_item_token_input.vue | 4 +- .../components/work_item_actions.vue | 2 +- .../work_item_attributes_wrapper.vue | 6 +-- .../components/work_item_award_emoji.vue | 10 ++-- .../work_item_bulk_edit_parent.vue | 4 +- .../work_item_change_type_modal.vue | 2 +- .../components/work_item_description.vue | 2 +- .../components/work_item_detail.vue | 2 +- ...eate_branch_merge_request_split_button.vue | 2 +- .../work_item_development.vue | 2 +- .../work_item_links/work_item_links_form.vue | 2 +- .../work_item_links/work_item_tree.vue | 2 +- .../work_items/components/work_item_notes.vue | 4 +- .../components/work_item_parent.vue | 2 +- .../work_item_add_relationship_form.vue | 2 +- .../work_item_relationships.vue | 8 +-- .../components/work_item_state_toggle.vue | 6 +-- .../ai_permissions_for_project.query.graphql | 2 +- .../graphql/award_emoji.query.graphql | 2 +- .../work_items/graphql/cache_utils.js | 13 ++--- .../graphql/group_work_items.query.graphql | 2 +- .../group_workspace_permissions.query.graphql | 2 +- ...space_merge_requests_enabled.query.graphql | 2 +- .../namespace_work_item_types.query.graphql | 2 +- ...em_email_participants_by_iid.query.graphql | 2 +- .../work_item_notes_by_iid.query.graphql | 2 +- .../graphql/project_work_items.query.graphql | 2 +- .../work_items/graphql/resolvers.js | 12 ++--- .../work_item_linked_items.query.graphql | 2 +- .../work_item_participants.query.graphql | 2 +- ...work_items_linked_items_slim.query.graphql | 2 +- .../workspace_permissions.query.graphql | 2 +- .../work_items/notes/award_utils.js | 4 +- .../work_items/pages/work_items_list_app.vue | 2 +- app/assets/javascripts/work_items/utils.js | 8 +-- .../components/board_add_new_column.vue | 2 +- .../queries/group_iterations.query.graphql | 2 +- .../tokens/work_item_status_token.vue | 2 +- .../list/work_item_bulk_edit_iteration.vue | 2 +- .../work_item_bulk_edit_status.vue | 2 +- .../work_item_change_type_modal.vue | 2 +- .../components/work_item_iteration.vue | 2 +- .../components/work_item_status.vue | 4 +- .../components/work_item_vulnerabilities.vue | 2 +- .../graphql/project_iterations.query.graphql | 2 +- .../work_item_vulnerabilities.query.graphql | 2 +- .../components/board_add_new_column_spec.js | 2 +- .../components/create_work_item_spec.js | 2 +- .../work_item_attributes_wrapper_spec.js | 2 +- .../work_item_bulk_edit_status_spec.js | 2 +- .../work_item_change_type_modal_spec.js | 6 +-- .../components/work_item_color_spec.js | 4 +- .../components/work_item_detail_spec.js | 2 +- .../work_item_development_spec.js | 2 +- .../components/work_item_iteration_spec.js | 4 +- .../components/work_item_notes_spec.js | 4 +- .../components/work_item_status_spec.js | 2 +- .../work_item_vulnerabilities_spec.js | 2 +- .../work_items/graphql/cache_utils_spec.js | 4 +- .../work_items/graphql/resolvers_spec.js | 4 +- ee/spec/frontend/work_items/mock_data.js | 4 +- ee/spec/frontend/work_items/utils_spec.js | 2 +- .../show/components/description_spec.js | 2 +- .../components/create_work_item_spec.js | 8 +-- .../notes/work_item_add_note_spec.js | 2 +- .../notes/work_item_discussion_spec.js | 2 +- .../notes/work_item_note_awards_list_spec.js | 2 +- .../components/notes/work_item_note_spec.js | 2 +- .../work_item_sidebar_dropdown_widget_spec.js | 2 +- .../components/work_item_assignees_spec.js | 2 +- .../work_item_attributes_wrapper_spec.js | 2 +- .../components/work_item_award_emoji_spec.js | 2 +- .../work_item_change_type_modal_spec.js | 10 ++-- .../work_item_created_updated_spec.js | 2 +- .../components/work_item_description_spec.js | 6 +-- .../components/work_item_detail_spec.js | 10 ++-- ..._branch_merge_request_split_button_spec.js | 4 +- .../work_item_development_spec.js | 6 +-- .../work_item_children_wrapper_spec.js | 2 +- .../work_item_links_form_spec.js | 12 ++--- .../components/work_item_notes_spec.js | 8 +-- .../components/work_item_state_toggle_spec.js | 2 +- .../work_items/graphql/cache_utils_spec.js | 16 +++--- .../work_items/graphql/resolvers_spec.js | 6 +-- spec/frontend/work_items/mock_data.js | 50 +++++++++---------- .../work_items/notes/award_utils_spec.js | 4 +- spec/frontend/work_items/utils_spec.js | 2 +- 92 files changed, 188 insertions(+), 191 deletions(-) diff --git a/app/assets/javascripts/boards/components/board_list.vue b/app/assets/javascripts/boards/components/board_list.vue index c3a2693dace846..f06fcb60edbab5 100644 --- a/app/assets/javascripts/boards/components/board_list.vue +++ b/app/assets/javascripts/boards/components/board_list.vue @@ -127,7 +127,7 @@ export default { }; }, update(data) { - return getWorkItemTypeAllowedStatusMap(data.workspace?.workItemTypes?.nodes); + return getWorkItemTypeAllowedStatusMap(data.namespace?.workItemTypes?.nodes); }, skip() { return this.isEpicBoard; diff --git a/app/assets/javascripts/issues/show/components/description.vue b/app/assets/javascripts/issues/show/components/description.vue index 4456154771e1f4..64f86875af81bb 100644 --- a/app/assets/javascripts/issues/show/components/description.vue +++ b/app/assets/javascripts/issues/show/components/description.vue @@ -112,7 +112,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes; + return data.namespace?.workItemTypes?.nodes; }, skip() { return !this.canUpdate; diff --git a/app/assets/javascripts/work_items/components/create_work_item.vue b/app/assets/javascripts/work_items/components/create_work_item.vue index 0518763f250daf..1bff8eb31a3b25 100644 --- a/app/assets/javascripts/work_items/components/create_work_item.vue +++ b/app/assets/javascripts/work_items/components/create_work_item.vue @@ -287,7 +287,7 @@ export default { }; }, update(data) { - return data.workspace; + return data.namespace; }, async result() { this.initialLoadingWorkItemTypes = false; diff --git a/app/assets/javascripts/work_items/components/notes/work_item_comment_form.vue b/app/assets/javascripts/work_items/components/notes/work_item_comment_form.vue index c7c3a0463ceb96..432e7467820db9 100644 --- a/app/assets/javascripts/work_items/components/notes/work_item_comment_form.vue +++ b/app/assets/javascripts/work_items/components/notes/work_item_comment_form.vue @@ -257,7 +257,7 @@ export default { }, update(data) { return ( - findEmailParticipantsWidget(data?.workspace?.workItem)?.emailParticipants?.nodes || [] + findEmailParticipantsWidget(data?.namespace?.workItem)?.emailParticipants?.nodes || [] ); }, }, diff --git a/app/assets/javascripts/work_items/components/shared/work_item_relationship_icons.vue b/app/assets/javascripts/work_items/components/shared/work_item_relationship_icons.vue index 366773520fc17e..cc349cce1e7018 100644 --- a/app/assets/javascripts/work_items/components/shared/work_item_relationship_icons.vue +++ b/app/assets/javascripts/work_items/components/shared/work_item_relationship_icons.vue @@ -66,10 +66,10 @@ export default { iid: this.workItemIid, }; }, - update({ workspace }) { - if (!workspace?.workItem) return []; + update({ namespace }) { + if (!namespace?.workItem) return []; - return findLinkedItemsWidget(workspace.workItem).linkedItems?.nodes || []; + return findLinkedItemsWidget(namespace.workItem).linkedItems?.nodes || []; }, }, }, diff --git a/app/assets/javascripts/work_items/components/shared/work_item_token_input.vue b/app/assets/javascripts/work_items/components/shared/work_item_token_input.vue index 392ab5c0ac2dd0..7d16d01689a97c 100644 --- a/app/assets/javascripts/work_items/components/shared/work_item_token_input.vue +++ b/app/assets/javascripts/work_items/components/shared/work_item_token_input.vue @@ -74,8 +74,8 @@ export default { }, update(data) { return [ - ...this.filterItems(data.workspace?.workItemsByIid?.nodes || []), - ...this.filterItems(data.workspace?.workItems?.nodes || []), + ...this.filterItems(data.namespace?.workItemsByIid?.nodes || []), + ...this.filterItems(data.namespace?.workItems?.nodes || []), ]; }, error() { diff --git a/app/assets/javascripts/work_items/components/work_item_actions.vue b/app/assets/javascripts/work_items/components/work_item_actions.vue index ddef531c58ab05..d4d445b031dc06 100644 --- a/app/assets/javascripts/work_items/components/work_item_actions.vue +++ b/app/assets/javascripts/work_items/components/work_item_actions.vue @@ -255,7 +255,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes; + return data.namespace?.workItemTypes?.nodes; }, skip() { return !this.canUpdateMetadata || this.workItemType !== WORK_ITEM_TYPE_NAME_KEY_RESULT; diff --git a/app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue b/app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue index 4161949bc9a420..12161979f3a524 100644 --- a/app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue +++ b/app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue @@ -111,12 +111,12 @@ export default { skip() { return !this.workItem.iid; }, - update({ workspace }) { - if (!workspace?.workItem) return {}; + update({ namespace }) { + if (!namespace?.workItem) return {}; const workItemParticipantData = this.isWidgetPresent( WIDGET_TYPE_PARTICIPANTS, - workspace.workItem, + namespace.workItem, ); return workItemParticipantData?.participants || {}; diff --git a/app/assets/javascripts/work_items/components/work_item_award_emoji.vue b/app/assets/javascripts/work_items/components/work_item_award_emoji.vue index 96c847b51a12b8..f3872db5e672e1 100644 --- a/app/assets/javascripts/work_items/components/work_item_award_emoji.vue +++ b/app/assets/javascripts/work_items/components/work_item_award_emoji.vue @@ -99,7 +99,7 @@ export default { }; }, update(data) { - return findAwardEmojiWidget(data.workspace?.workItem).awardEmoji || {}; + return findAwardEmojiWidget(data.namespace?.workItem).awardEmoji || {}; }, skip() { return !this.workItemIid; @@ -110,10 +110,10 @@ export default { } else { this.isLoading = false; } - if (data?.workspace) { + if (data?.namespace) { this.newCustomEmojiPath = - findAwardEmojiWidget(data.workspace?.workItem)?.newCustomEmojiPath || ''; - this.$emit('emoji-updated', data.workspace?.workItem); + findAwardEmojiWidget(data.namespace?.workItem)?.newCustomEmojiPath || ''; + this.$emit('emoji-updated', data.namespace?.workItem); } }, error() { @@ -198,7 +198,7 @@ export default { const sourceData = cache.readQuery(query); const newData = produce(sourceData, (draftState) => { - const widgetAwardEmoji = findAwardEmojiWidget(draftState.workspace?.workItem); + const widgetAwardEmoji = findAwardEmojiWidget(draftState.namespace?.workItem); if (widgetAwardEmoji && widgetAwardEmoji.awardEmoji) { widgetAwardEmoji.awardEmoji.nodes = this.getAwardEmojiNodes(name, toggledOn); } diff --git a/app/assets/javascripts/work_items/components/work_item_bulk_edit/work_item_bulk_edit_parent.vue b/app/assets/javascripts/work_items/components/work_item_bulk_edit/work_item_bulk_edit_parent.vue index 74591823a45f39..7c7adcb479e2be 100644 --- a/app/assets/javascripts/work_items/components/work_item_bulk_edit/work_item_bulk_edit_parent.vue +++ b/app/assets/javascripts/work_items/components/work_item_bulk_edit/work_item_bulk_edit_parent.vue @@ -83,7 +83,7 @@ export default { return !this.searchStarted || !this.shouldLoadParents; }, update(data) { - return data.workspace?.workItems?.nodes || []; + return data.namespace?.workItems?.nodes || []; }, error(error) { createAlert({ @@ -124,7 +124,7 @@ export default { }, update(data) { const typesParentsMap = {}; - const types = data.workspace.workItemTypes.nodes || []; + const types = data.namespace.workItemTypes.nodes || []; // Used `for` loop for better readability and performance for (const type of types) { diff --git a/app/assets/javascripts/work_items/components/work_item_change_type_modal.vue b/app/assets/javascripts/work_items/components/work_item_change_type_modal.vue index 1f05dc1f0cbe6e..4e1201d00268d5 100644 --- a/app/assets/javascripts/work_items/components/work_item_change_type_modal.vue +++ b/app/assets/javascripts/work_items/components/work_item_change_type_modal.vue @@ -114,7 +114,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes || []; + return data.namespace?.workItemTypes?.nodes || []; }, error(e) { this.throwError(e); diff --git a/app/assets/javascripts/work_items/components/work_item_description.vue b/app/assets/javascripts/work_items/components/work_item_description.vue index b1d6df3cdf91cc..1800efbc4ca201 100644 --- a/app/assets/javascripts/work_items/components/work_item_description.vue +++ b/app/assets/javascripts/work_items/components/work_item_description.vue @@ -211,7 +211,7 @@ export default { }; }, update(data) { - return data.workspace || {}; + return data.namespace || {}; }, skip() { return this.isGroup; diff --git a/app/assets/javascripts/work_items/components/work_item_detail.vue b/app/assets/javascripts/work_items/components/work_item_detail.vue index 18088f40183c82..ca8a8288d30ca4 100644 --- a/app/assets/javascripts/work_items/components/work_item_detail.vue +++ b/app/assets/javascripts/work_items/components/work_item_detail.vue @@ -316,7 +316,7 @@ export default { return this.isGroup || this.workItemLoading; }, update(data) { - return data.workspace?.userPermissions ?? defaultWorkspacePermissions; + return data.namespace?.userPermissions ?? defaultWorkspacePermissions; }, }, }, diff --git a/app/assets/javascripts/work_items/components/work_item_development/work_item_create_branch_merge_request_split_button.vue b/app/assets/javascripts/work_items/components/work_item_development/work_item_create_branch_merge_request_split_button.vue index 0d76c41607dd03..bfa499cf580c2f 100644 --- a/app/assets/javascripts/work_items/components/work_item_development/work_item_create_branch_merge_request_split_button.vue +++ b/app/assets/javascripts/work_items/components/work_item_development/work_item_create_branch_merge_request_split_button.vue @@ -61,7 +61,7 @@ export default { }; }, update(data) { - return data.workspace?.mergeRequestsEnabled ?? false; + return data.namespace?.mergeRequestsEnabled ?? false; }, skip() { return !this.workItemFullPath; diff --git a/app/assets/javascripts/work_items/components/work_item_development/work_item_development.vue b/app/assets/javascripts/work_items/components/work_item_development/work_item_development.vue index be827a25de9be2..cfcfdb5916ed63 100644 --- a/app/assets/javascripts/work_items/components/work_item_development/work_item_development.vue +++ b/app/assets/javascripts/work_items/components/work_item_development/work_item_development.vue @@ -237,7 +237,7 @@ export default { }; }, update(data) { - return data.workspace?.mergeRequestsEnabled ?? false; + return data.namespace?.mergeRequestsEnabled ?? false; }, skip() { return !this.workItemFullPath; diff --git a/app/assets/javascripts/work_items/components/work_item_links/work_item_links_form.vue b/app/assets/javascripts/work_items/components/work_item_links/work_item_links_form.vue index ebc58a83fab1f3..0479c1872aaf04 100644 --- a/app/assets/javascripts/work_items/components/work_item_links/work_item_links_form.vue +++ b/app/assets/javascripts/work_items/components/work_item_links/work_item_links_form.vue @@ -108,7 +108,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes; + return data.namespace?.workItemTypes?.nodes; }, }, }, diff --git a/app/assets/javascripts/work_items/components/work_item_links/work_item_tree.vue b/app/assets/javascripts/work_items/components/work_item_links/work_item_tree.vue index 3ba7bdd37e4221..b9edb40c4cefd1 100644 --- a/app/assets/javascripts/work_items/components/work_item_links/work_item_tree.vue +++ b/app/assets/javascripts/work_items/components/work_item_links/work_item_tree.vue @@ -186,7 +186,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes; + return data.namespace?.workItemTypes?.nodes; }, skip() { return !this.canUpdate; diff --git a/app/assets/javascripts/work_items/components/work_item_notes.vue b/app/assets/javascripts/work_items/components/work_item_notes.vue index c7ca255fc94c3a..f78da90deee149 100644 --- a/app/assets/javascripts/work_items/components/work_item_notes.vue +++ b/app/assets/javascripts/work_items/components/work_item_notes.vue @@ -338,7 +338,7 @@ export default { }; }, update(data) { - return findNotesWidget(data.workspace?.workItem)?.discussions || []; + return findNotesWidget(data.namespace?.workItem)?.discussions || []; }, skip() { return !this.workItemIid; @@ -347,7 +347,7 @@ export default { this.$emit('error', i18n.fetchError); }, result({ data }) { - this.workItemNamespace = data?.workspace?.workItem?.namespace; + this.workItemNamespace = data?.namespace?.workItem?.namespace; this.isLoadingMore = false; if (this.hasNextPage) { this.fetchMoreNotes(); diff --git a/app/assets/javascripts/work_items/components/work_item_parent.vue b/app/assets/javascripts/work_items/components/work_item_parent.vue index 9afdf701d4ca3e..e9a966f3927cbc 100644 --- a/app/assets/javascripts/work_items/components/work_item_parent.vue +++ b/app/assets/javascripts/work_items/components/work_item_parent.vue @@ -177,7 +177,7 @@ export default { return !this.searchStarted && !this.allowedChildTypes?.length; }, update(data) { - return data.workspace?.workItems?.nodes?.filter((wi) => this.workItemId !== wi.id) || []; + return data.namespace?.workItems?.nodes?.filter((wi) => this.workItemId !== wi.id) || []; }, error() { this.$emit( diff --git a/app/assets/javascripts/work_items/components/work_item_relationships/work_item_add_relationship_form.vue b/app/assets/javascripts/work_items/components/work_item_relationships/work_item_add_relationship_form.vue index f6080a249c1f18..e061c3234f8e58 100644 --- a/app/assets/javascripts/work_items/components/work_item_relationships/work_item_add_relationship_form.vue +++ b/app/assets/javascripts/work_items/components/work_item_relationships/work_item_add_relationship_form.vue @@ -137,7 +137,7 @@ export default { cache.writeQuery({ ...queryArgs, data: produce(sourceData, (draftState) => { - const linkedItemsWidget = findLinkedItemsWidget(draftState.workspace.workItem); + const linkedItemsWidget = findLinkedItemsWidget(draftState.namespace.workItem); linkedItemsWidget.linkedItems = findLinkedItemsWidget(workItem)?.linkedItems; }), diff --git a/app/assets/javascripts/work_items/components/work_item_relationships/work_item_relationships.vue b/app/assets/javascripts/work_items/components/work_item_relationships/work_item_relationships.vue index 5fa110015b1657..c625251ece7cea 100644 --- a/app/assets/javascripts/work_items/components/work_item_relationships/work_item_relationships.vue +++ b/app/assets/javascripts/work_items/components/work_item_relationships/work_item_relationships.vue @@ -104,10 +104,10 @@ export default { skip() { return !this.workItemIid; }, - update({ workspace }) { - if (!workspace?.workItem) return []; + update({ namespace }) { + if (!namespace?.workItem) return []; - return findLinkedItemsWidget(workspace.workItem).linkedItems?.nodes || []; + return findLinkedItemsWidget(namespace.workItem).linkedItems?.nodes || []; }, async result() { // When work items are switched in a modal, the data props are not getting reset. @@ -303,7 +303,7 @@ export default { ...queryArgs, data: produce(sourceData, (draftState) => { const linkedItems = - findLinkedItemsWidget(draftState.workspace.workItem).linkedItems?.nodes || []; + findLinkedItemsWidget(draftState.namespace.workItem).linkedItems?.nodes || []; const index = linkedItems.findIndex((item) => { return item.workItem.id === linkedItem.id; }); diff --git a/app/assets/javascripts/work_items/components/work_item_state_toggle.vue b/app/assets/javascripts/work_items/components/work_item_state_toggle.vue index d919480984c0b1..a0132ed053faa7 100644 --- a/app/assets/javascripts/work_items/components/work_item_state_toggle.vue +++ b/app/assets/javascripts/work_items/components/work_item_state_toggle.vue @@ -120,10 +120,10 @@ export default { skip() { return !this.workItemIid; }, - update({ workspace }) { - if (!workspace?.workItem) return []; + update({ namespace }) { + if (!namespace?.workItem) return []; - const linkedWorkItems = findLinkedItemsWidget(workspace.workItem)?.linkedItems?.nodes || []; + const linkedWorkItems = findLinkedItemsWidget(namespace.workItem)?.linkedItems?.nodes || []; return linkedWorkItems.filter((item) => { return ( diff --git a/app/assets/javascripts/work_items/graphql/ai_permissions_for_project.query.graphql b/app/assets/javascripts/work_items/graphql/ai_permissions_for_project.query.graphql index d9aadfa03b69a3..6f7efd589d6b81 100644 --- a/app/assets/javascripts/work_items/graphql/ai_permissions_for_project.query.graphql +++ b/app/assets/javascripts/work_items/graphql/ai_permissions_for_project.query.graphql @@ -1,5 +1,5 @@ query projectGenerateDescriptionPermissions($fullPath: ID!) { - workspace: project(fullPath: $fullPath) { + namespace: project(fullPath: $fullPath) { id userPermissions { generateDescription diff --git a/app/assets/javascripts/work_items/graphql/award_emoji.query.graphql b/app/assets/javascripts/work_items/graphql/award_emoji.query.graphql index 88a2cfd269abbe..b31098bead1073 100644 --- a/app/assets/javascripts/work_items/graphql/award_emoji.query.graphql +++ b/app/assets/javascripts/work_items/graphql/award_emoji.query.graphql @@ -2,7 +2,7 @@ #import "~/work_items/graphql/award_emoji.fragment.graphql" query projectWorkItemAwardEmojis($fullPath: ID!, $iid: String!, $after: String, $pageSize: Int) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id workItem(iid: $iid) { id diff --git a/app/assets/javascripts/work_items/graphql/cache_utils.js b/app/assets/javascripts/work_items/graphql/cache_utils.js index b90ab082bcba52..bbb3fdd9b61c67 100644 --- a/app/assets/javascripts/work_items/graphql/cache_utils.js +++ b/app/assets/javascripts/work_items/graphql/cache_utils.js @@ -44,11 +44,11 @@ import workItemByIidQuery from './work_item_by_iid.query.graphql'; import workItemByIdQuery from './work_item_by_id.query.graphql'; import getWorkItemTreeQuery from './work_item_tree.query.graphql'; -const getNotesWidgetFromSourceData = (draftData) => findNotesWidget(draftData?.workspace?.workItem); +const getNotesWidgetFromSourceData = (draftData) => findNotesWidget(draftData?.namespace?.workItem); const updateNotesWidgetDataInDraftData = (draftData, notesWidget) => { - const noteWidgetIndex = draftData.workspace.workItem.widgets.findIndex(isNotesWidget); - draftData.workspace.workItem.widgets[noteWidgetIndex] = notesWidget; + const noteWidgetIndex = draftData.namespace.workItem.widgets.findIndex(isNotesWidget); + draftData.namespace.workItem.widgets[noteWidgetIndex] = notesWidget; }; /** @@ -696,7 +696,7 @@ export const setNewWorkItemCache = ({ const newWorkItemPath = newWorkItemFullPath(fullPath, workItemType); // get the widgets stored in draft data - const draftDataWidgetTypes = map(draftData?.workspace?.workItem?.widgets, 'type') || []; + const draftDataWidgetTypes = map(draftData?.namespace?.workItem?.widgets, 'type') || []; const freshWidgetTypes = map(widgets, 'type') || []; // this is to fix errors when we are introducing a new widget and the cache always updates from the old widgets @@ -707,10 +707,7 @@ export const setNewWorkItemCache = ({ ); const isValidDraftData = - draftData?.workspace?.workItem && - getStorageDraftString && - draftData?.workspace?.workItem && - draftWidgetsAreSameAsCacheDigits; + draftData?.namespace?.workItem && getStorageDraftString && draftWidgetsAreSameAsCacheDigits; /** check in case of someone plays with the localstorage, we need to be sure */ if (!isValidDraftData) { diff --git a/app/assets/javascripts/work_items/graphql/group_work_items.query.graphql b/app/assets/javascripts/work_items/graphql/group_work_items.query.graphql index 9e4500c03aabff..4ea89cce802d2c 100644 --- a/app/assets/javascripts/work_items/graphql/group_work_items.query.graphql +++ b/app/assets/javascripts/work_items/graphql/group_work_items.query.graphql @@ -9,7 +9,7 @@ query groupWorkItems( $searchByIid: Boolean = false $searchByText: Boolean = true ) { - workspace: group(fullPath: $fullPath) { + namespace: group(fullPath: $fullPath) { id workItems( search: $searchTerm diff --git a/app/assets/javascripts/work_items/graphql/group_workspace_permissions.query.graphql b/app/assets/javascripts/work_items/graphql/group_workspace_permissions.query.graphql index e6da78f088950f..1b343a552f4e68 100644 --- a/app/assets/javascripts/work_items/graphql/group_workspace_permissions.query.graphql +++ b/app/assets/javascripts/work_items/graphql/group_workspace_permissions.query.graphql @@ -1,5 +1,5 @@ query groupWorkspacePermissions($fullPath: ID!) { - workspace: group(fullPath: $fullPath) { + namespace: group(fullPath: $fullPath) { id userPermissions { adminWorkItemLifecycle diff --git a/app/assets/javascripts/work_items/graphql/namespace_merge_requests_enabled.query.graphql b/app/assets/javascripts/work_items/graphql/namespace_merge_requests_enabled.query.graphql index 7407ea9ba5d8b2..f521f76a22e242 100644 --- a/app/assets/javascripts/work_items/graphql/namespace_merge_requests_enabled.query.graphql +++ b/app/assets/javascripts/work_items/graphql/namespace_merge_requests_enabled.query.graphql @@ -1,5 +1,5 @@ query namespaceMergeRequestsEnabled($fullPath: ID!) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id mergeRequestsEnabled } diff --git a/app/assets/javascripts/work_items/graphql/namespace_work_item_types.query.graphql b/app/assets/javascripts/work_items/graphql/namespace_work_item_types.query.graphql index ceee37ad00f6fb..3067005764346d 100644 --- a/app/assets/javascripts/work_items/graphql/namespace_work_item_types.query.graphql +++ b/app/assets/javascripts/work_items/graphql/namespace_work_item_types.query.graphql @@ -1,7 +1,7 @@ #import "ee_else_ce/work_items/graphql/work_item_type.fragment.graphql" query namespaceWorkItemTypes($fullPath: ID!, $name: IssueType, $onlyAvailable: Boolean = false) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id webUrl userPermissions { diff --git a/app/assets/javascripts/work_items/graphql/notes/work_item_email_participants_by_iid.query.graphql b/app/assets/javascripts/work_items/graphql/notes/work_item_email_participants_by_iid.query.graphql index 72f70f3c6c64a4..27ab2bd4871752 100644 --- a/app/assets/javascripts/work_items/graphql/notes/work_item_email_participants_by_iid.query.graphql +++ b/app/assets/javascripts/work_items/graphql/notes/work_item_email_participants_by_iid.query.graphql @@ -1,5 +1,5 @@ query workItemEmailParticipantsByIid($fullPath: ID!, $iid: String!) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id workItem(iid: $iid) { id diff --git a/app/assets/javascripts/work_items/graphql/notes/work_item_notes_by_iid.query.graphql b/app/assets/javascripts/work_items/graphql/notes/work_item_notes_by_iid.query.graphql index 81d05c1f87d9bf..d169e8555f4220 100644 --- a/app/assets/javascripts/work_items/graphql/notes/work_item_notes_by_iid.query.graphql +++ b/app/assets/javascripts/work_items/graphql/notes/work_item_notes_by_iid.query.graphql @@ -8,7 +8,7 @@ query workItemNotesByIid( $pageSize: Int $sort: WorkItemDiscussionsSort ) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id workItem(iid: $iid) { id diff --git a/app/assets/javascripts/work_items/graphql/project_work_items.query.graphql b/app/assets/javascripts/work_items/graphql/project_work_items.query.graphql index 69bd4ca639cb9e..44c178337e54b6 100644 --- a/app/assets/javascripts/work_items/graphql/project_work_items.query.graphql +++ b/app/assets/javascripts/work_items/graphql/project_work_items.query.graphql @@ -7,7 +7,7 @@ query projectWorkItems( $searchByIid: Boolean = false $searchByText: Boolean = true ) { - workspace: project(fullPath: $fullPath) { + namespace: project(fullPath: $fullPath) { id workItems(search: $searchTerm, types: $types, state: opened, in: $in) @include(if: $searchByText) { diff --git a/app/assets/javascripts/work_items/graphql/resolvers.js b/app/assets/javascripts/work_items/graphql/resolvers.js index 33e1c3d4a22365..60fd1264bd02df 100644 --- a/app/assets/javascripts/work_items/graphql/resolvers.js +++ b/app/assets/javascripts/work_items/graphql/resolvers.js @@ -38,8 +38,8 @@ const updateWidget = (draftData, widgetType, newData, nodePath) => { /** we have to make sure we do not pass values when custom types are introduced */ if (newData === undefined) return; - if (draftData.workspace) { - const widget = findWidget(widgetType, draftData.workspace.workItem); + if (draftData.namespace) { + const widget = findWidget(widgetType, draftData.namespace.workItem); set(widget, nodePath, newData); } }; @@ -50,7 +50,7 @@ const updateDatesWidget = (draftData, dates) => { const dueDate = dates.dueDate ? toISODateFormat(newDate(dates.dueDate)) : null; const startDate = dates.startDate ? toISODateFormat(newDate(dates.startDate)) : null; - const widget = findStartAndDueDateWidget(draftData.workspace.workItem); + const widget = findStartAndDueDateWidget(draftData.namespace.workItem); Object.assign(widget, { dueDate, startDate, @@ -63,12 +63,12 @@ const updateDatesWidget = (draftData, dates) => { const updateCustomFieldsWidget = (sourceData, draftData, customField) => { if (!customField) return; - const widget = findCustomFieldsWidget(draftData.workspace.workItem); + const widget = findCustomFieldsWidget(draftData.namespace.workItem); if (!widget) return; const currentValues = - sourceData?.workspace?.workItem?.widgets?.find((w) => w.type === WIDGET_TYPE_CUSTOM_FIELDS) + sourceData?.namespace?.workItem?.widgets?.find((w) => w.type === WIDGET_TYPE_CUSTOM_FIELDS) ?.customFieldValues ?? []; const updatedCustomFieldValues = currentValues.map((field) => { @@ -207,7 +207,7 @@ export const updateNewWorkItemCache = (input, cache) => { relatedItemId, }); - const isQueryDataValid = !isEmpty(newData) && newData?.workspace?.workItem; + const isQueryDataValid = !isEmpty(newData) && newData?.namespace?.workItem; if (isQueryDataValid && autosaveKey) { updateDraft(autosaveKey, JSON.stringify(newData)); diff --git a/app/assets/javascripts/work_items/graphql/work_item_linked_items.query.graphql b/app/assets/javascripts/work_items/graphql/work_item_linked_items.query.graphql index 5a9d9ced439987..8f7c0c747e485b 100644 --- a/app/assets/javascripts/work_items/graphql/work_item_linked_items.query.graphql +++ b/app/assets/javascripts/work_items/graphql/work_item_linked_items.query.graphql @@ -1,7 +1,7 @@ #import "./work_item_linked_items.fragment.graphql" query workItemLinkedItems($fullPath: ID!, $iid: String!) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id workItem(iid: $iid) { id diff --git a/app/assets/javascripts/work_items/graphql/work_item_participants.query.graphql b/app/assets/javascripts/work_items/graphql/work_item_participants.query.graphql index fe2b09cce0a631..4aaf6801285425 100644 --- a/app/assets/javascripts/work_items/graphql/work_item_participants.query.graphql +++ b/app/assets/javascripts/work_items/graphql/work_item_participants.query.graphql @@ -1,7 +1,7 @@ #import "~/graphql_shared/fragments/user.fragment.graphql" query workItemParticipants($fullPath: ID!, $iid: String!) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id workItem(iid: $iid) { id diff --git a/app/assets/javascripts/work_items/graphql/work_items_linked_items_slim.query.graphql b/app/assets/javascripts/work_items/graphql/work_items_linked_items_slim.query.graphql index f43e6475c4c6bf..c97ae52e636c1a 100644 --- a/app/assets/javascripts/work_items/graphql/work_items_linked_items_slim.query.graphql +++ b/app/assets/javascripts/work_items/graphql/work_items_linked_items_slim.query.graphql @@ -1,5 +1,5 @@ query workItemLinkedItemsSlim($fullPath: ID!, $iid: String!) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id workItem(iid: $iid) { id diff --git a/app/assets/javascripts/work_items/graphql/workspace_permissions.query.graphql b/app/assets/javascripts/work_items/graphql/workspace_permissions.query.graphql index 309884d87d0188..2ba8d6300861bf 100644 --- a/app/assets/javascripts/work_items/graphql/workspace_permissions.query.graphql +++ b/app/assets/javascripts/work_items/graphql/workspace_permissions.query.graphql @@ -1,5 +1,5 @@ query workspacePermissions($fullPath: ID!) { - workspace: project(fullPath: $fullPath) { + namespace: project(fullPath: $fullPath) { id userPermissions { createDesign diff --git a/app/assets/javascripts/work_items/notes/award_utils.js b/app/assets/javascripts/work_items/notes/award_utils.js index 89d4cb668d85fa..a1691ccf5f670d 100644 --- a/app/assets/javascripts/work_items/notes/award_utils.js +++ b/app/assets/javascripts/work_items/notes/award_utils.js @@ -77,9 +77,9 @@ export const getNewCustomEmojiPath = ({ cache, fullPath, workItemIid }) => { const sourceData = cache.readQuery(query); - if (!sourceData?.workspace?.workItem) { + if (!sourceData?.namespace?.workItem) { return ''; } - return findAwardEmojiWidget(sourceData.workspace.workItem)?.newCustomEmojiPath || ''; + return findAwardEmojiWidget(sourceData.namespace.workItem)?.newCustomEmojiPath || ''; }; diff --git a/app/assets/javascripts/work_items/pages/work_items_list_app.vue b/app/assets/javascripts/work_items/pages/work_items_list_app.vue index 97f8db450140b9..38e72613c55fb2 100644 --- a/app/assets/javascripts/work_items/pages/work_items_list_app.vue +++ b/app/assets/javascripts/work_items/pages/work_items_list_app.vue @@ -454,7 +454,7 @@ export default { }; }, update(data) { - return data?.workspace?.workItemTypes?.nodes; + return data?.namespace?.workItemTypes?.nodes; }, error(error) { Sentry.captureException(error); diff --git a/app/assets/javascripts/work_items/utils.js b/app/assets/javascripts/work_items/utils.js index 6ab0b7cc533897..8464347f2b9906 100644 --- a/app/assets/javascripts/work_items/utils.js +++ b/app/assets/javascripts/work_items/utils.js @@ -367,16 +367,16 @@ export const getNewWorkItemWidgetsAutoSaveKey = ({ fullPath, context, relatedIte }; export const getWorkItemWidgets = (draftData) => { - if (!draftData?.workspace?.workItem) return {}; + if (!draftData?.namespace?.workItem) return {}; const widgets = {}; - for (const widget of draftData.workspace.workItem.widgets || []) { + for (const widget of draftData.namespace.workItem.widgets || []) { if (widget.type) { widgets[widget.type] = widget; } } - widgets.TITLE = draftData.workspace.workItem.title; - widgets.TYPE = draftData.workspace.workItem.workItemType; + widgets.TITLE = draftData.namespace.workItem.title; + widgets.TYPE = draftData.namespace.workItem.workItemType; return widgets; }; diff --git a/ee/app/assets/javascripts/boards/components/board_add_new_column.vue b/ee/app/assets/javascripts/boards/components/board_add_new_column.vue index 4a0b07375fc1e2..ba1723fb30eab7 100644 --- a/ee/app/assets/javascripts/boards/components/board_add_new_column.vue +++ b/ee/app/assets/javascripts/boards/components/board_add_new_column.vue @@ -233,7 +233,7 @@ export default { }; }, update(data) { - return getStatuses(data.workspace?.workItemTypes?.nodes); + return getStatuses(data.namespace?.workItemTypes?.nodes); }, skip() { return this.columnType !== ListType.status; diff --git a/ee/app/assets/javascripts/sidebar/queries/group_iterations.query.graphql b/ee/app/assets/javascripts/sidebar/queries/group_iterations.query.graphql index c828534a700e60..12c1c2af874845 100644 --- a/ee/app/assets/javascripts/sidebar/queries/group_iterations.query.graphql +++ b/ee/app/assets/javascripts/sidebar/queries/group_iterations.query.graphql @@ -1,7 +1,7 @@ #import "./iteration.fragment.graphql" query issueIterationsAliased($fullPath: ID!, $title: String, $state: IterationState) { - workspace: group(fullPath: $fullPath) { + namespace: group(fullPath: $fullPath) { id attributes: iterations(search: $title, in: [TITLE, CADENCE_TITLE], state: $state) { nodes { diff --git a/ee/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/work_item_status_token.vue b/ee/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/work_item_status_token.vue index f0d1774f1c55a5..ab557c86fc53be 100644 --- a/ee/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/work_item_status_token.vue +++ b/ee/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/work_item_status_token.vue @@ -58,7 +58,7 @@ export default { fullPath: this.config.fullPath, }, }) - .then(({ data }) => getStatuses(data?.workspace?.workItemTypes?.nodes)); + .then(({ data }) => getStatuses(data?.namespace?.workItemTypes?.nodes)); }, fetchStatuses(search) { this.loading = true; diff --git a/ee/app/assets/javascripts/work_items/components/list/work_item_bulk_edit_iteration.vue b/ee/app/assets/javascripts/work_items/components/list/work_item_bulk_edit_iteration.vue index 5eeb47693ece6f..0e0b19b6dbfb88 100644 --- a/ee/app/assets/javascripts/work_items/components/list/work_item_bulk_edit_iteration.vue +++ b/ee/app/assets/javascripts/work_items/components/list/work_item_bulk_edit_iteration.vue @@ -63,7 +63,7 @@ export default { return !this.searchStarted; }, update(data) { - return data.workspace?.attributes.nodes ?? []; + return data.namespace?.attributes.nodes ?? []; }, error(error) { createAlert({ diff --git a/ee/app/assets/javascripts/work_items/components/work_item_bulk_edit/work_item_bulk_edit_status.vue b/ee/app/assets/javascripts/work_items/components/work_item_bulk_edit/work_item_bulk_edit_status.vue index e7bfe770363ab2..219b6e8950da8c 100644 --- a/ee/app/assets/javascripts/work_items/components/work_item_bulk_edit/work_item_bulk_edit_status.vue +++ b/ee/app/assets/javascripts/work_items/components/work_item_bulk_edit/work_item_bulk_edit_status.vue @@ -161,7 +161,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes || []; + return data.namespace?.workItemTypes?.nodes || []; }, skip() { return !this.hasItemsSelected; diff --git a/ee/app/assets/javascripts/work_items/components/work_item_change_type_modal.vue b/ee/app/assets/javascripts/work_items/components/work_item_change_type_modal.vue index 59a5458210c671..5f83dd84aaf51b 100644 --- a/ee/app/assets/javascripts/work_items/components/work_item_change_type_modal.vue +++ b/ee/app/assets/javascripts/work_items/components/work_item_change_type_modal.vue @@ -76,7 +76,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes || []; + return data.namespace?.workItemTypes?.nodes || []; }, error(e) { this.throwError(e); diff --git a/ee/app/assets/javascripts/work_items/components/work_item_iteration.vue b/ee/app/assets/javascripts/work_items/components/work_item_iteration.vue index baeb986ec2f2f0..221c44e55f7e7f 100644 --- a/ee/app/assets/javascripts/work_items/components/work_item_iteration.vue +++ b/ee/app/assets/javascripts/work_items/components/work_item_iteration.vue @@ -132,7 +132,7 @@ export default { }; }, update(data) { - return data.workspace?.attributes?.nodes || []; + return data.namespace?.attributes?.nodes || []; }, skip() { return !this.shouldFetch; diff --git a/ee/app/assets/javascripts/work_items/components/work_item_status.vue b/ee/app/assets/javascripts/work_items/components/work_item_status.vue index 99b8eaaa1d2d38..f80fdcb2f2da60 100644 --- a/ee/app/assets/javascripts/work_items/components/work_item_status.vue +++ b/ee/app/assets/javascripts/work_items/components/work_item_status.vue @@ -157,7 +157,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes || []; + return data.namespace?.workItemTypes?.nodes || []; }, skip() { return !this.shouldFetch; @@ -181,7 +181,7 @@ export default { return this.isLoading || !this.fullPath; }, update(data) { - return data.workspace?.userPermissions ?? {}; + return data.namespace?.userPermissions ?? {}; }, error(error) { Sentry.captureException(error); diff --git a/ee/app/assets/javascripts/work_items/components/work_item_vulnerabilities.vue b/ee/app/assets/javascripts/work_items/components/work_item_vulnerabilities.vue index 9803947cf3364c..0dd233111bd3c2 100644 --- a/ee/app/assets/javascripts/work_items/components/work_item_vulnerabilities.vue +++ b/ee/app/assets/javascripts/work_items/components/work_item_vulnerabilities.vue @@ -85,7 +85,7 @@ export default { }, methods: { getRelatedVulnerabilities(data) { - const workItemVulnerabilities = findVulnerabilitiesWidget(data.workspace?.workItem) || {}; + const workItemVulnerabilities = findVulnerabilitiesWidget(data.namespace?.workItem) || {}; return workItemVulnerabilities.relatedVulnerabilities; }, async fetchNextPage() { diff --git a/ee/app/assets/javascripts/work_items/graphql/project_iterations.query.graphql b/ee/app/assets/javascripts/work_items/graphql/project_iterations.query.graphql index 00a52a314139ee..dc8c11b17dc8cd 100644 --- a/ee/app/assets/javascripts/work_items/graphql/project_iterations.query.graphql +++ b/ee/app/assets/javascripts/work_items/graphql/project_iterations.query.graphql @@ -1,7 +1,7 @@ #import "ee/sidebar/queries/iteration.fragment.graphql" query issueIterationsAliasedProject($fullPath: ID!, $title: String, $state: IterationState) { - workspace: project(fullPath: $fullPath) { + namespace: project(fullPath: $fullPath) { id attributes: iterations(search: $title, in: [TITLE, CADENCE_TITLE], state: $state) { nodes { diff --git a/ee/app/assets/javascripts/work_items/graphql/work_item_vulnerabilities.query.graphql b/ee/app/assets/javascripts/work_items/graphql/work_item_vulnerabilities.query.graphql index 7f843632402f32..6aed5b6d57ff1b 100644 --- a/ee/app/assets/javascripts/work_items/graphql/work_item_vulnerabilities.query.graphql +++ b/ee/app/assets/javascripts/work_items/graphql/work_item_vulnerabilities.query.graphql @@ -6,7 +6,7 @@ query workItemVulnerabilities( $first: Int = 25 $after: String = "" ) { - workspace: namespace(fullPath: $fullPath) { + namespace(fullPath: $fullPath) { id workItem(iid: $iid) { id diff --git a/ee/spec/frontend/boards/components/board_add_new_column_spec.js b/ee/spec/frontend/boards/components/board_add_new_column_spec.js index 8b2243585096bb..66b827d002ccc2 100644 --- a/ee/spec/frontend/boards/components/board_add_new_column_spec.js +++ b/ee/spec/frontend/boards/components/board_add_new_column_spec.js @@ -73,7 +73,7 @@ describe('BoardAddNewColumn', () => { let allowedStatus = []; - namespaceWorkItemTypesQueryResponse.data.workspace?.workItemTypes?.nodes?.forEach((type) => { + namespaceWorkItemTypesQueryResponse.data.namespace?.workItemTypes?.nodes?.forEach((type) => { const statusWidget = type.widgetDefinitions.find( (widget) => widget.type === WIDGET_TYPE_STATUS, ); diff --git a/ee/spec/frontend/work_items/components/create_work_item_spec.js b/ee/spec/frontend/work_items/components/create_work_item_spec.js index 92c2fa4afa9d62..9b012d84e4f401 100644 --- a/ee/spec/frontend/work_items/components/create_work_item_spec.js +++ b/ee/spec/frontend/work_items/components/create_work_item_spec.js @@ -278,7 +278,7 @@ describe('EE Create work item component', () => { const customFieldsNamespaceWorkItemTypesResponse = { ...namespaceWorkItemsWithoutEpicSupport, widgetDefinitions: [ - ...namespaceWorkItemsWithoutEpicSupport.data.workspace.workItemTypes.nodes[0] + ...namespaceWorkItemsWithoutEpicSupport.data.namespace.workItemTypes.nodes[0] .widgetDefinitions, { type: 'CUSTOM_FIELDS', diff --git a/ee/spec/frontend/work_items/components/work_item_attributes_wrapper_spec.js b/ee/spec/frontend/work_items/components/work_item_attributes_wrapper_spec.js index 6651917f1756d6..cc927bc0ae322a 100644 --- a/ee/spec/frontend/work_items/components/work_item_attributes_wrapper_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_attributes_wrapper_spec.js @@ -37,7 +37,7 @@ describe('EE WorkItemAttributesWrapper component', () => { }); const workItemParticipantsQueryResponse = { data: { - workspace: { + namespace: { __typename: 'Namespace', id: workItemQueryResponse.data.workItem.namespace.id, workItem: { diff --git a/ee/spec/frontend/work_items/components/work_item_bulk_edit/work_item_bulk_edit_status_spec.js b/ee/spec/frontend/work_items/components/work_item_bulk_edit/work_item_bulk_edit_status_spec.js index 408b880befbdc9..1bedb03b102345 100644 --- a/ee/spec/frontend/work_items/components/work_item_bulk_edit/work_item_bulk_edit_status_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_bulk_edit/work_item_bulk_edit_status_spec.js @@ -27,7 +27,7 @@ describe('WorkItemBulkEditStatus', () => { ]; const statusPerType = []; const namespaceQueryHandler = jest.fn().mockResolvedValue(namespaceWorkItemTypesQueryResponse); - namespaceWorkItemTypesQueryResponse.data.workspace?.workItemTypes?.nodes?.forEach((type) => { + namespaceWorkItemTypesQueryResponse.data.namespace?.workItemTypes?.nodes?.forEach((type) => { const statusWidget = type.widgetDefinitions.find( (widget) => widget.type === WIDGET_TYPE_STATUS, ); diff --git a/ee/spec/frontend/work_items/components/work_item_change_type_modal_spec.js b/ee/spec/frontend/work_items/components/work_item_change_type_modal_spec.js index e87c315f855fe7..16886865908455 100644 --- a/ee/spec/frontend/work_items/components/work_item_change_type_modal_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_change_type_modal_spec.js @@ -33,15 +33,15 @@ describe('WorkItemChangeTypeModal component', () => { let wrapper; const graphqlError = 'GraphQL error'; const keyResultTypeId = - namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes.find( + namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes.find( (item) => item.name === WORK_ITEM_TYPE_NAME_KEY_RESULT, ).id; - const issueTypeId = namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes.find( + const issueTypeId = namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes.find( (item) => item.name === WORK_ITEM_TYPE_NAME_ISSUE, ).id; - const epicTypeId = namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes.find( + const epicTypeId = namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes.find( (item) => item.name === WORK_ITEM_TYPE_NAME_EPIC, ).id; diff --git a/ee/spec/frontend/work_items/components/work_item_color_spec.js b/ee/spec/frontend/work_items/components/work_item_color_spec.js index 6d83d326c742c3..bf396c40b0c6b1 100644 --- a/ee/spec/frontend/work_items/components/work_item_color_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_color_spec.js @@ -27,12 +27,12 @@ describe('WorkItemColor component', () => { workItemType: epicType, colorWidgetPresent: true, color: '#1068bf', - }).data.workspace.workItem; + }).data.namespace.workItem; const mockSelectedColorWorkItem = workItemByIidResponseFactory({ workItemType: epicType, colorWidgetPresent: true, color: selectedColor, - }).data.workspace.workItem; + }).data.namespace.workItem; const successUpdateWorkItemMutationHandler = jest .fn() .mockResolvedValue( diff --git a/ee/spec/frontend/work_items/components/work_item_detail_spec.js b/ee/spec/frontend/work_items/components/work_item_detail_spec.js index 29cc0e1254e97c..8c53363ca6e4fa 100644 --- a/ee/spec/frontend/work_items/components/work_item_detail_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_detail_spec.js @@ -127,7 +127,7 @@ describe('EE WorkItemDetail component', () => { it('passes correct props to DuoWorkflowAction', () => { const duoWorkflowAction = findDuoWorkflowAction(); - const { workItem } = workItemByIidQueryResponse.data.workspace; + const { workItem } = workItemByIidQueryResponse.data.namespace; expect(duoWorkflowAction.props()).toMatchObject({ hoverMessage: 'Generate merge request with Duo', diff --git a/ee/spec/frontend/work_items/components/work_item_development/work_item_development_spec.js b/ee/spec/frontend/work_items/components/work_item_development/work_item_development_spec.js index 56f0b87d8034a0..a884f133413534 100644 --- a/ee/spec/frontend/work_items/components/work_item_development/work_item_development_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_development/work_item_development_spec.js @@ -36,7 +36,7 @@ describe('WorkItemDevelopment EE', () => { const createWorkItemDevelopmentResponse = (config) => workItemDevelopmentResponse({ widgets: [ - ...workItemResponse.data.workspace.workItem.widgets, + ...workItemResponse.data.namespace.workItem.widgets, workItemDevelopmentFragmentResponse(config), ], }); diff --git a/ee/spec/frontend/work_items/components/work_item_iteration_spec.js b/ee/spec/frontend/work_items/components/work_item_iteration_spec.js index 909c30c634f9e2..42cc47a8b09519 100644 --- a/ee/spec/frontend/work_items/components/work_item_iteration_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_iteration_spec.js @@ -141,7 +141,7 @@ describe('WorkItemIteration component', () => { expect(findSidebarDropdownWidget().props('loading')).toBe(false); expect(findSidebarDropdownWidget().props('listItems')).toHaveLength( - groupIterationsResponse.data.workspace.attributes.nodes.length, + groupIterationsResponse.data.namespace.attributes.nodes.length, ); }); @@ -157,7 +157,7 @@ describe('WorkItemIteration component', () => { }); it('changes the iteration to the selected iteration', async () => { - const iterationAtIndex = groupIterationsResponse.data.workspace.attributes.nodes[0]; + const iterationAtIndex = groupIterationsResponse.data.namespace.attributes.nodes[0]; findSidebarDropdownWidget().vm.$emit('updateValue', iterationAtIndex.id); await waitForPromises(); diff --git a/ee/spec/frontend/work_items/components/work_item_notes_spec.js b/ee/spec/frontend/work_items/components/work_item_notes_spec.js index d84a874d7c3a69..b9e746503fddb8 100644 --- a/ee/spec/frontend/work_items/components/work_item_notes_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_notes_spec.js @@ -89,7 +89,7 @@ describe('WorkItemNotes component', () => { describe('system notes with description changes', () => { it('collapses notes with time difference of 10 mins into one', async () => { const notesWidget = - workItemNotesWithSystemNotesWithChangedDescription.data.workspace.workItem.widgets.find( + workItemNotesWithSystemNotesWithChangedDescription.data.namespace.workItem.widgets.find( (widget) => widget.type === WIDGET_TYPE_NOTES, ); @@ -113,7 +113,7 @@ describe('WorkItemNotes component', () => { localStorage.setItem(WORK_ITEM_NOTES_SORT_ORDER_KEY, DESC); const reversedNotes = { ...workItemNotesWithSystemNotesWithChangedDescription }; - const discussions = reversedNotes.data.workspace.workItem.widgets.find( + const discussions = reversedNotes.data.namespace.workItem.widgets.find( (widget) => widget.type === WIDGET_TYPE_NOTES, ).discussions.nodes; diff --git a/ee/spec/frontend/work_items/components/work_item_status_spec.js b/ee/spec/frontend/work_items/components/work_item_status_spec.js index 397ce2207e076c..bf403bdf2ba3d3 100644 --- a/ee/spec/frontend/work_items/components/work_item_status_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_status_spec.js @@ -28,7 +28,7 @@ describe('WorkItemStatus component', () => { const workItemIid = '1'; const workItemType = 'Task'; - const allowedStatus = namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes + const allowedStatus = namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes .find((node) => node.name === workItemType) .widgetDefinitions?.find((item) => { return item.type === 'STATUS'; diff --git a/ee/spec/frontend/work_items/components/work_item_vulnerabilities_spec.js b/ee/spec/frontend/work_items/components/work_item_vulnerabilities_spec.js index 7d95d6df5b1fa4..00899e5a1995be 100644 --- a/ee/spec/frontend/work_items/components/work_item_vulnerabilities_spec.js +++ b/ee/spec/frontend/work_items/components/work_item_vulnerabilities_spec.js @@ -18,7 +18,7 @@ import { jest.mock('~/alert'); const items = - vulnerabilitiesWidgetResponse.data.workspace.workItem.widgets[0].relatedVulnerabilities.nodes; + vulnerabilitiesWidgetResponse.data.namespace.workItem.widgets[0].relatedVulnerabilities.nodes; describe('WorkItemVulnerabilities component', () => { Vue.use(VueApollo); diff --git a/ee/spec/frontend/work_items/graphql/cache_utils_spec.js b/ee/spec/frontend/work_items/graphql/cache_utils_spec.js index 27ec2dea37795f..2655f0dedec427 100644 --- a/ee/spec/frontend/work_items/graphql/cache_utils_spec.js +++ b/ee/spec/frontend/work_items/graphql/cache_utils_spec.js @@ -23,7 +23,7 @@ describe('work items graphql cache utils', () => { window.gon.current_user_id = 1; const workItemTypes = - namespaceWorkItemTypesQueryResponse.data?.workspace?.workItemTypes?.nodes || []; + namespaceWorkItemTypesQueryResponse.data?.namespace?.workItemTypes?.nodes || []; const taskWidgetDefinitions = workItemTypes?.find((type) => type.name === 'Task')?.widgetDefinitions || []; const statusDefinition = taskWidgetDefinitions.find((item) => { @@ -44,7 +44,7 @@ describe('work items graphql cache utils', () => { expect(mockWriteQuery).toHaveBeenCalledWith( expect.objectContaining({ data: expect.objectContaining({ - workspace: expect.objectContaining({ + namespace: expect.objectContaining({ workItem: expect.objectContaining({ widgets: expect.arrayContaining([ { diff --git a/ee/spec/frontend/work_items/graphql/resolvers_spec.js b/ee/spec/frontend/work_items/graphql/resolvers_spec.js index 35e1d9c251e5c8..12f73f4653d05a 100644 --- a/ee/spec/frontend/work_items/graphql/resolvers_spec.js +++ b/ee/spec/frontend/work_items/graphql/resolvers_spec.js @@ -58,9 +58,9 @@ describe('EE work items graphql resolvers', () => { variables: { fullPath: fullPathWithId, iid }, }); - if (widgetName == null) return queryResult.data.workspace.workItem; + if (widgetName == null) return queryResult.data.namespace.workItem; - return queryResult.data.workspace.workItem.widgets.find(({ type }) => type === widgetName); + return queryResult.data.namespace.workItem.widgets.find(({ type }) => type === widgetName); }; beforeEach(() => { diff --git a/ee/spec/frontend/work_items/mock_data.js b/ee/spec/frontend/work_items/mock_data.js index 95142b8a744af2..ac9eceddb95ef9 100644 --- a/ee/spec/frontend/work_items/mock_data.js +++ b/ee/spec/frontend/work_items/mock_data.js @@ -215,7 +215,7 @@ export const getEpicWeightWidgetDefinitions = (editable = false) => { export const namespaceWorkItemsWithoutEpicSupport = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Group/14', webUrl: 'http://127.0.0.1:3000/groups/flightjs', userPermissions: { @@ -600,7 +600,7 @@ export const getVulnerabilitiesWidgetResponse = ( ) => { return { data: { - workspace: { + namespace: { __typename: 'Namespace', id: 'gid://gitlab/Namespaces::ProjectNamespace/1', workItem: { diff --git a/ee/spec/frontend/work_items/utils_spec.js b/ee/spec/frontend/work_items/utils_spec.js index 0ad8b44a641701..bd899740ce08b1 100644 --- a/ee/spec/frontend/work_items/utils_spec.js +++ b/ee/spec/frontend/work_items/utils_spec.js @@ -95,7 +95,7 @@ describe('sortStatuses', () => { describe('getStatuses', () => { it('merges, sorts, and deduplicates statuses', () => { expect( - getStatuses(namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes), + getStatuses(namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes), ).toEqual([ expect.objectContaining({ name: 'To do' }), expect.objectContaining({ name: 'In progress' }), diff --git a/spec/frontend/issues/show/components/description_spec.js b/spec/frontend/issues/show/components/description_spec.js index 647950006f014d..983c657e499074 100644 --- a/spec/frontend/issues/show/components/description_spec.js +++ b/spec/frontend/issues/show/components/description_spec.js @@ -285,7 +285,7 @@ describe('Description component', () => { it('calls a mutation to create a task', () => { const workItemTypeIdForTask = - namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes.find( + namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes.find( (node) => node.name === 'Task', ).id; const { confidential, iteration, milestone } = issueDetailsResponse.data.issue; diff --git a/spec/frontend/work_items/components/create_work_item_spec.js b/spec/frontend/work_items/components/create_work_item_spec.js index b36968e9ed6599..05bd8255dab827 100644 --- a/spec/frontend/work_items/components/create_work_item_spec.js +++ b/spec/frontend/work_items/components/create_work_item_spec.js @@ -78,7 +78,7 @@ describe('Create work item component', () => { const mutationErrorHandler = jest.fn().mockResolvedValue(createWorkItemMutationErrorResponse); const workItemQuerySuccessHandler = jest.fn().mockResolvedValue(createWorkItemQueryResponse()); const namespaceWorkItemTypes = - namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes; + namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes; const mockRelatedItem = { id: 'gid://gitlab/WorkItem/22', type: 'Issue', @@ -122,7 +122,7 @@ describe('Create work item component', () => { fullPath = 'full-path', } = {}) => { const namespaceResponseCopy = cloneDeep(namespaceQueryResponse); - namespaceResponseCopy.data.workspace.id = 'gid://gitlab/Group/33'; + namespaceResponseCopy.data.namespace.id = 'gid://gitlab/Group/33'; const namespaceResponse = isGroupWorkItem ? namespaceResponseCopy : namespaceQueryResponse; namespaceWorkItemTypesHandler = jest.fn().mockResolvedValue(namespaceResponse); @@ -1106,8 +1106,8 @@ describe('Create work item component', () => { it('does not show work item widgets when userPermissions.setNewWorkItemMetadata is false', async () => { const namespaceQueryResponse = { data: { - workspace: { - ...namespaceWorkItemTypesQueryResponse.data.workspace, + namespace: { + ...namespaceWorkItemTypesQueryResponse.data.namespace, userPermissions: { setNewWorkItemMetadata: false, }, diff --git a/spec/frontend/work_items/components/notes/work_item_add_note_spec.js b/spec/frontend/work_items/components/notes/work_item_add_note_spec.js index d1283b43b57774..49848cc410a133 100644 --- a/spec/frontend/work_items/components/notes/work_item_add_note_spec.js +++ b/spec/frontend/work_items/components/notes/work_item_add_note_spec.js @@ -85,7 +85,7 @@ describe('Work item add note', () => { ]), propsData: { fullPath: 'test-project-path', - workItemId: workItemResponse.data.workspace.workItem.id, + workItemId: workItemResponse.data.namespace.workItem.id, workItemIid, workItemType: 'Task', markdownPreviewPath: '/group/project/preview_markdown?target_type=WorkItem', diff --git a/spec/frontend/work_items/components/notes/work_item_discussion_spec.js b/spec/frontend/work_items/components/notes/work_item_discussion_spec.js index ce8f27a3d4c207..5e5cae5d59d889 100644 --- a/spec/frontend/work_items/components/notes/work_item_discussion_spec.js +++ b/spec/frontend/work_items/components/notes/work_item_discussion_spec.js @@ -18,7 +18,7 @@ import { import { WIDGET_TYPE_NOTES } from '~/work_items/constants'; const mockWorkItemNotesWidgetResponseWithComments = - mockWorkItemNotesResponseWithComments().data.workspace.workItem.widgets.find( + mockWorkItemNotesResponseWithComments().data.namespace.workItem.widgets.find( (widget) => widget.type === WIDGET_TYPE_NOTES, ); diff --git a/spec/frontend/work_items/components/notes/work_item_note_awards_list_spec.js b/spec/frontend/work_items/components/notes/work_item_note_awards_list_spec.js index a4d917a7c706f3..09970cc30cb330 100644 --- a/spec/frontend/work_items/components/notes/work_item_note_awards_list_spec.js +++ b/spec/frontend/work_items/components/notes/work_item_note_awards_list_spec.js @@ -24,7 +24,7 @@ Vue.use(VueApollo); describe('Work Item Note Awards List', () => { let wrapper; - const { workItem } = mockWorkItemNotesResponseWithComments().data.workspace; + const { workItem } = mockWorkItemNotesResponseWithComments().data.namespace; const firstNote = workItem.widgets.find((w) => w.type === 'NOTES').discussions.nodes[0].notes .nodes[0]; const fullPath = 'test-project-path'; diff --git a/spec/frontend/work_items/components/notes/work_item_note_spec.js b/spec/frontend/work_items/components/notes/work_item_note_spec.js index 6d109cbe532032..506745b830d1d2 100644 --- a/spec/frontend/work_items/components/notes/work_item_note_spec.js +++ b/spec/frontend/work_items/components/notes/work_item_note_spec.js @@ -425,7 +425,7 @@ end`; it('confidential information on note', async () => { createComponent(); await findNoteActions().vm.$emit('startEditing'); - const { confidential } = workItemByIidResponseFactory().data.workspace.workItem; + const { confidential } = workItemByIidResponseFactory().data.namespace.workItem; expect(findCommentForm().props('isWorkItemConfidential')).toBe(confidential); }); diff --git a/spec/frontend/work_items/components/shared/work_item_sidebar_dropdown_widget_spec.js b/spec/frontend/work_items/components/shared/work_item_sidebar_dropdown_widget_spec.js index fdbd5cc3e9eea5..9d9153dc0df2bd 100644 --- a/spec/frontend/work_items/components/shared/work_item_sidebar_dropdown_widget_spec.js +++ b/spec/frontend/work_items/components/shared/work_item_sidebar_dropdown_widget_spec.js @@ -152,7 +152,7 @@ describe('WorkItemSidebarDropdownWidget component', () => { }); it('clears search on item select when props passes', async () => { - const listItems = groupIterationsResponse.data.workspace.attributes.nodes.map((item) => ({ + const listItems = groupIterationsResponse.data.namespace.attributes.nodes.map((item) => ({ value: item.id, ...item, })); diff --git a/spec/frontend/work_items/components/work_item_assignees_spec.js b/spec/frontend/work_items/components/work_item_assignees_spec.js index 14a7765a0c0ae1..2afe755681f387 100644 --- a/spec/frontend/work_items/components/work_item_assignees_spec.js +++ b/spec/frontend/work_items/components/work_item_assignees_spec.js @@ -101,7 +101,7 @@ describe('WorkItemAssignees component', () => { iid: NEW_WORK_ITEM_IID, }, data: { - workspace: { + namespace: { id: newWorkItemPath, ...workItemQueryResponse.data, }, diff --git a/spec/frontend/work_items/components/work_item_attributes_wrapper_spec.js b/spec/frontend/work_items/components/work_item_attributes_wrapper_spec.js index 02e89e5949106a..13354bee6f19da 100644 --- a/spec/frontend/work_items/components/work_item_attributes_wrapper_spec.js +++ b/spec/frontend/work_items/components/work_item_attributes_wrapper_spec.js @@ -40,7 +40,7 @@ describe('WorkItemAttributesWrapper component', () => { }); const workItemParticipantsQueryResponse = { data: { - workspace: { + namespace: { __typename: 'Namespace', id: workItemQueryResponse.data.workItem.namespace.id, workItem: { diff --git a/spec/frontend/work_items/components/work_item_award_emoji_spec.js b/spec/frontend/work_items/components/work_item_award_emoji_spec.js index a87b150dbd3028..538f9d0f27535b 100644 --- a/spec/frontend/work_items/components/work_item_award_emoji_spec.js +++ b/spec/frontend/work_items/components/work_item_award_emoji_spec.js @@ -37,7 +37,7 @@ describe('WorkItemAwardEmoji component', () => { const newCustomEmojiPath = '/groups/gitlab-org/-/custom_emoji/new'; const workItemQueryResponse = workItemByIidResponseFactory({ newCustomEmojiPath }); - const mockWorkItem = workItemQueryResponse.data.workspace.workItem; + const mockWorkItem = workItemQueryResponse.data.namespace.workItem; const awardEmojiQuerySuccessHandler = jest.fn().mockResolvedValue(workItemQueryResponse); const awardEmojiQueryEmptyHandler = jest.fn().mockResolvedValue( diff --git a/spec/frontend/work_items/components/work_item_change_type_modal_spec.js b/spec/frontend/work_items/components/work_item_change_type_modal_spec.js index 586a1e6b961ef9..2adef05d6dad13 100644 --- a/spec/frontend/work_items/components/work_item_change_type_modal_spec.js +++ b/spec/frontend/work_items/components/work_item_change_type_modal_spec.js @@ -32,20 +32,20 @@ describe('WorkItemChangeTypeModal component', () => { let wrapper; const typesQuerySuccessHandler = jest.fn().mockResolvedValue(namespaceWorkItemTypesQueryResponse); - const issueTypeId = namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes.find( + const issueTypeId = namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes.find( (type) => type.name === WORK_ITEM_TYPE_NAME_ISSUE, ).id; - const taskTypeId = namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes.find( + const taskTypeId = namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes.find( (type) => type.name === WORK_ITEM_TYPE_NAME_TASK, ).id; - const epicTypeId = namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes.find( + const epicTypeId = namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes.find( (item) => item.name === WORK_ITEM_TYPE_NAME_EPIC, ).id; - namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes + namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes .find((item) => item.name === WORK_ITEM_TYPE_NAME_TASK) .widgetDefinitions.splice( - namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes + namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes .find((item) => item.name === WORK_ITEM_TYPE_NAME_TASK) .widgetDefinitions.findIndex((item) => item.type === 'CRM_CONTACTS'), 1, diff --git a/spec/frontend/work_items/components/work_item_created_updated_spec.js b/spec/frontend/work_items/components/work_item_created_updated_spec.js index 133037790ee96e..891db85384e9ca 100644 --- a/spec/frontend/work_items/components/work_item_created_updated_spec.js +++ b/spec/frontend/work_items/components/work_item_created_updated_spec.js @@ -118,7 +118,7 @@ describe('WorkItemCreatedUpdated component', () => { await createComponent(); const { - data: { workspace: { workItem } = {} }, + data: { namespace: { workItem } = {} }, } = workItemByIidResponseFactory(); expect(findWorkItemTypeIcon().props()).toMatchObject({ diff --git a/spec/frontend/work_items/components/work_item_description_spec.js b/spec/frontend/work_items/components/work_item_description_spec.js index b053286fa4abd3..ceee74817a145d 100644 --- a/spec/frontend/work_items/components/work_item_description_spec.js +++ b/spec/frontend/work_items/components/work_item_description_spec.js @@ -70,7 +70,7 @@ describe('WorkItemDescription', () => { const mockWorkspacePermissionsResponse = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Project/1', userPermissions: { generateDescription: true, @@ -814,7 +814,7 @@ describe('WorkItemDescription', () => { beforeEach(async () => { const workspacePermissionsHandlerNoPermission = jest.fn().mockResolvedValue({ data: { - workspace: { + namespace: { id: 'gid://gitlab/Project/1', userPermissions: { generateDescription: false, @@ -841,7 +841,7 @@ describe('WorkItemDescription', () => { beforeEach(async () => { const workspacePermissionsHandlerNullWorkspace = jest.fn().mockResolvedValue({ data: { - workspace: null, + namespace: null, }, }); diff --git a/spec/frontend/work_items/components/work_item_detail_spec.js b/spec/frontend/work_items/components/work_item_detail_spec.js index 36ff825d630f96..af99a14389bd95 100644 --- a/spec/frontend/work_items/components/work_item_detail_spec.js +++ b/spec/frontend/work_items/components/work_item_detail_spec.js @@ -90,7 +90,7 @@ describe('WorkItemDetail component', () => { const successHandlerWithNoPermissions = jest .fn() .mockResolvedValue(workItemQueryResponseWithNoPermissions); - const { id } = workItemByIidQueryResponse.data.workspace.workItem; + const { id } = workItemByIidQueryResponse.data.namespace.workItem; const workItemUpdatedSubscriptionHandler = jest .fn() .mockResolvedValue({ data: { workItemUpdated: null } }); @@ -325,7 +325,7 @@ describe('WorkItemDetail component', () => { }); it('passes `parentMilestone` prop to work item tree', () => { - const { milestone } = workItemByIidQueryResponse.data.workspace.workItem.widgets.find( + const { milestone } = workItemByIidQueryResponse.data.namespace.workItem.widgets.find( (widget) => widget.type === WIDGET_TYPE_MILESTONE, ); @@ -376,7 +376,7 @@ describe('WorkItemDetail component', () => { const mutationHandler = jest.fn().mockResolvedValue({ data: { workItemUpdate: { - workItem: confidentialWorkItem.data.workspace.workItem, + workItem: confidentialWorkItem.data.namespace.workItem, errors: [], }, }, @@ -442,7 +442,7 @@ describe('WorkItemDetail component', () => { const mutationHandler = jest.fn().mockResolvedValue({ data: { workItemUpdate: { - workItem: workItemByIidQueryResponse.data.workspace.workItem, + workItem: workItemByIidQueryResponse.data.namespace.workItem, errors: [], }, }, @@ -889,7 +889,7 @@ describe('WorkItemDetail component', () => { createComponent(); await waitForPromises(); - const { confidential } = workItemByIidQueryResponse.data.workspace.workItem; + const { confidential } = workItemByIidQueryResponse.data.namespace.workItem; expect(findNotesWidget().exists()).toBe(true); expect(findNotesWidget().props('isWorkItemConfidential')).toBe(confidential); diff --git a/spec/frontend/work_items/components/work_item_development/work_item_create_branch_merge_request_split_button_spec.js b/spec/frontend/work_items/components/work_item_development/work_item_create_branch_merge_request_split_button_spec.js index fe50719c735c1a..574e2a4e6865b2 100644 --- a/spec/frontend/work_items/components/work_item_development/work_item_create_branch_merge_request_split_button_spec.js +++ b/spec/frontend/work_items/components/work_item_development/work_item_create_branch_merge_request_split_button_spec.js @@ -19,7 +19,7 @@ describe('WorkItemCreateBranchMergeRequestSplitButton', () => { let wrapper; const defaultNamespaceMergeRequestsEnabledHandler = jest.fn().mockResolvedValue({ - data: { workspace: { id: 'gid://gitlab/Group/33', mergeRequestsEnabled: true } }, + data: { namespace: { id: 'gid://gitlab/Group/33', mergeRequestsEnabled: true } }, }); const createComponent = ({ @@ -120,7 +120,7 @@ describe('WorkItemCreateBranchMergeRequestSplitButton', () => { beforeEach(async () => { wrapper = createComponent({ namespaceMergeRequestsEnabledHandler: jest.fn().mockResolvedValue({ - data: { workspace: { id: 'gid://gitlab/Group/33', mergeRequestsEnabled: false } }, + data: { namespace: { id: 'gid://gitlab/Group/33', mergeRequestsEnabled: false } }, }), }); await waitForPromises(); diff --git a/spec/frontend/work_items/components/work_item_development/work_item_development_spec.js b/spec/frontend/work_items/components/work_item_development/work_item_development_spec.js index 63da627ab10b8e..d198dda5defd3d 100644 --- a/spec/frontend/work_items/components/work_item_development/work_item_development_spec.js +++ b/spec/frontend/work_items/components/work_item_development/work_item_development_spec.js @@ -36,7 +36,7 @@ describe('WorkItemDevelopment CE', () => { const createWorkItemDevelopmentResponse = (config) => workItemDevelopmentResponse({ widgets: [ - ...workItemResponse.data.workspace.workItem.widgets, + ...workItemResponse.data.namespace.workItem.widgets, workItemDevelopmentFragmentResponse(config), ], }); @@ -76,7 +76,7 @@ describe('WorkItemDevelopment CE', () => { .fn() .mockResolvedValue({ data: { workItemUpdated: null } }); const defaultNamespaceMergeRequestsEnabledHandler = jest.fn().mockResolvedValue({ - data: { workspace: { id: 'gid://gitlab/Group/33', mergeRequestsEnabled: true } }, + data: { namespace: { id: 'gid://gitlab/Group/33', mergeRequestsEnabled: true } }, }); const createComponent = ({ @@ -241,7 +241,7 @@ describe('WorkItemDevelopment CE', () => { it('renders only "Create branch" in dropdown', async () => { createComponent({ namespaceMergeRequestsEnabledHandler: jest.fn().mockResolvedValue({ - data: { workspace: { id: 'gid://gitlab/Group/33', mergeRequestsEnabled: false } }, + data: { namespace: { id: 'gid://gitlab/Group/33', mergeRequestsEnabled: false } }, }), }); await waitForPromises(); diff --git a/spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js b/spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js index bfda186225c53f..085eb8a16a2730 100644 --- a/spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js +++ b/spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js @@ -98,7 +98,7 @@ describe('WorkItemChildrenWrapper', () => { disableContent, canUpdate, showClosed, - parent: workItemByIidResponseFactory().data.workspace.workItem, + parent: workItemByIidResponseFactory().data.namespace.workItem, }, mocks: { $toast, diff --git a/spec/frontend/work_items/components/work_item_links/work_item_links_form_spec.js b/spec/frontend/work_items/components/work_item_links/work_item_links_form_spec.js index 45bdfc7d748a3f..5e7d46150a5855 100644 --- a/spec/frontend/work_items/components/work_item_links/work_item_links_form_spec.js +++ b/spec/frontend/work_items/components/work_item_links/work_item_links_form_spec.js @@ -37,7 +37,7 @@ Vue.use(VueApollo); const projectData = namespaceProjectsList.data.namespace.projects.nodes; const findWorkItemTypeId = (typeName) => { - return namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes.find( + return namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes.find( (node) => node.name === typeName, ).id; }; @@ -136,11 +136,11 @@ describe('WorkItemLinksForm', () => { }); it.each` - workspace | isGroup | queryResolver + namespace | isGroup | queryResolver ${'project'} | ${false} | ${namespaceWorkItemTypesResolver} ${'group'} | ${true} | ${namespaceWorkItemTypesResolver} `( - 'fetches $workspace work item types when isGroup is $isGroup', + 'fetches $namespace work item types when isGroup is $isGroup', async ({ isGroup, queryResolver }) => { await createComponent({ isGroup }); @@ -418,7 +418,7 @@ describe('WorkItemLinksForm', () => { describe('adding an existing work item', () => { const selectAvailableWorkItemTokens = ( - tokens = availableWorkItemsResponse.data.workspace.workItems.nodes, + tokens = availableWorkItemsResponse.data.namespace.workItems.nodes, ) => { findWorkItemTokenInput().vm.$emit('input', tokens); }; @@ -452,7 +452,7 @@ describe('WorkItemLinksForm', () => { expect(findAddChildButton().text()).toBe('Add tasks'); expect(findWorkItemTokenInput().props('areWorkItemsToAddValid')).toBe(true); expect(findWorkItemTokenInput().props('value')).toBe( - availableWorkItemsResponse.data.workspace.workItems.nodes, + availableWorkItemsResponse.data.namespace.workItems.nodes, ); findForm().vm.$emit('submit', { preventDefault: jest.fn(), @@ -500,7 +500,7 @@ describe('WorkItemLinksForm', () => { // Trigger Token input update, causing error to clear await selectAvailableWorkItemTokens( - availableWorkItemsResponse.data.workspace.workItems.nodes.slice(0, 2), + availableWorkItemsResponse.data.namespace.workItems.nodes.slice(0, 2), ); // Assert if error was cleared diff --git a/spec/frontend/work_items/components/work_item_notes_spec.js b/spec/frontend/work_items/components/work_item_notes_spec.js index 058dbd938ea93e..a00118f95a0058 100644 --- a/spec/frontend/work_items/components/work_item_notes_spec.js +++ b/spec/frontend/work_items/components/work_item_notes_spec.js @@ -56,12 +56,12 @@ const mockNotesWidgetResponse = mockWorkItemNotesResponse.data.workItem.widgets. ); const mockMoreNotesWidgetResponse = - mockMoreWorkItemNotesResponse.data.workspace.workItem.widgets.find( + mockMoreWorkItemNotesResponse.data.namespace.workItem.widgets.find( (widget) => widget.type === WIDGET_TYPE_NOTES, ); const mockWorkItemNotesWidgetResponseWithComments = - mockWorkItemNotesResponseWithComments().data.workspace.workItem.widgets.find( + mockWorkItemNotesResponseWithComments().data.namespace.workItem.widgets.find( (widget) => widget.type === WIDGET_TYPE_NOTES, ); @@ -627,10 +627,10 @@ describe('WorkItemNotes component', () => { it('should pass the correct `autoCompleteDataSources` to group work item comment note', async () => { const groupWorkItemNotes = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Group/24', workItem: { - ...mockWorkItemNotesResponseWithComments().data.workspace.workItem, + ...mockWorkItemNotesResponseWithComments().data.namespace.workItem, namespace: { id: 'gid://gitlab/Group/24', __typename: 'Namespace', diff --git a/spec/frontend/work_items/components/work_item_state_toggle_spec.js b/spec/frontend/work_items/components/work_item_state_toggle_spec.js index 104a461e251838..26a19ebd6d10a3 100644 --- a/spec/frontend/work_items/components/work_item_state_toggle_spec.js +++ b/spec/frontend/work_items/components/work_item_state_toggle_spec.js @@ -58,7 +58,7 @@ describe('Work Item State toggle button component', () => { findBlockedByModal().findAllComponents(GlLink).at(index); const findOpenChildrenModal = () => wrapper.findByTestId('open-children-warning-modal'); - const { id, iid } = workItemQueryResponse.data.workspace.workItem; + const { id, iid } = workItemQueryResponse.data.namespace.workItem; const createComponent = ({ mutationHandler = mutationSuccessHandler, diff --git a/spec/frontend/work_items/graphql/cache_utils_spec.js b/spec/frontend/work_items/graphql/cache_utils_spec.js index 839ca5326c9980..0c4adb3946f4b1 100644 --- a/spec/frontend/work_items/graphql/cache_utils_spec.js +++ b/spec/frontend/work_items/graphql/cache_utils_spec.js @@ -126,7 +126,7 @@ describe('work items graphql cache utils', () => { addHierarchyChildren({ cache: mockCache, id, - workItem: workItemHierarchyResponse.data.workspace.workItem, + workItem: workItemHierarchyResponse.data.namespace.workItem, childrenIds: [childrenWorkItems[1].id, childrenWorkItems[0].id], }); @@ -177,7 +177,7 @@ describe('work items graphql cache utils', () => { addHierarchyChildren({ cache: mockCache, id, - workItem: workItemHierarchyResponse.data.workspace.workItem, + workItem: workItemHierarchyResponse.data.namespace.workItem, childrenIds: [childrenWorkItems[1].id, childrenWorkItems[0].id], }), ).not.toThrow(); @@ -276,9 +276,9 @@ describe('work items graphql cache utils', () => { expect(mockWriteQuery).toHaveBeenCalledWith( expect.objectContaining({ data: expect.objectContaining({ - workspace: expect.objectContaining({ + namespace: expect.objectContaining({ workItem: expect.objectContaining({ - title: mockCreateWorkItemDraftData.workspace.workItem.title, + title: mockCreateWorkItemDraftData.namespace.workItem.title, widgets: expect.arrayContaining(restoredDraftDataWidgets), }), }), @@ -291,7 +291,7 @@ describe('work items graphql cache utils', () => { description | locationSearchString | expectedTitle | expectedWidgets ${'restores cache with empty form'} | ${'?vulnerability_id=1'} | ${''} | ${restoredDraftDataWidgetsEmpty} ${'restores cache with empty form'} | ${'?discussion_to_resolve=1'} | ${''} | ${restoredDraftDataWidgetsEmpty} - ${'restores cache with draft'} | ${'?type=ISSUE'} | ${mockCreateWorkItemDraftData.workspace.workItem.title} | ${restoredDraftDataWidgets} + ${'restores cache with draft'} | ${'?type=ISSUE'} | ${mockCreateWorkItemDraftData.namespace.workItem.title} | ${restoredDraftDataWidgets} `( '$description when URL params include $locationSearchString', async ({ locationSearchString, expectedTitle, expectedWidgets }) => { @@ -302,7 +302,7 @@ describe('work items graphql cache utils', () => { expect(mockWriteQuery).toHaveBeenCalledWith( expect.objectContaining({ data: expect.objectContaining({ - workspace: expect.objectContaining({ + namespace: expect.objectContaining({ workItem: expect.objectContaining({ title: expectedTitle, widgets: expect.arrayContaining(expectedWidgets), @@ -316,8 +316,8 @@ describe('work items graphql cache utils', () => { }); describe('updateCacheAfterCreatingNote', () => { - const findDiscussions = ({ workspace }) => - findNotesWidget(workspace.workItem).discussions.nodes; + const findDiscussions = ({ namespace }) => + findNotesWidget(namespace.workItem).discussions.nodes; it('adds a new discussion to the notes widget', () => { const currentNotes = mockWorkItemNotesByIidResponse.data; diff --git a/spec/frontend/work_items/graphql/resolvers_spec.js b/spec/frontend/work_items/graphql/resolvers_spec.js index 9587070a3603d4..8b5cd5b09725fc 100644 --- a/spec/frontend/work_items/graphql/resolvers_spec.js +++ b/spec/frontend/work_items/graphql/resolvers_spec.js @@ -41,9 +41,9 @@ describe('work items graphql resolvers', () => { variables: { fullPath: fullPathWithId, iid }, }); - if (widgetName == null) return queryResult.data.workspace.workItem; + if (widgetName == null) return queryResult.data.namespace.workItem; - return queryResult.data.workspace.workItem.widgets.find(({ type }) => type === widgetName); + return queryResult.data.namespace.workItem.widgets.find(({ type }) => type === widgetName); }; beforeEach(() => { @@ -211,7 +211,7 @@ describe('work items graphql resolvers', () => { const queryResult = await query(); const object = { - workspace: { + namespace: { __typename: 'Namespace', id: 'full-path-epic-id', workItem: { diff --git a/spec/frontend/work_items/mock_data.js b/spec/frontend/work_items/mock_data.js index 498951b5e70fcf..ed51a855c75b66 100644 --- a/spec/frontend/work_items/mock_data.js +++ b/spec/frontend/work_items/mock_data.js @@ -1121,7 +1121,7 @@ export const mockLinkedItems = { export const workItemLinkedItemsResponse = { data: { - workspace: { + namespace: { __typename: 'Namespace', id: 'gid://gitlab/Group/1', workItem: { @@ -1135,7 +1135,7 @@ export const workItemLinkedItemsResponse = { export const workItemEmptyLinkedItemsResponse = { data: { - workspace: { + namespace: { __typename: 'Namespace', id: 'gid://gitlab/Group/1', workItem: { @@ -1160,7 +1160,7 @@ export const workItemEmptyLinkedItemsResponse = { export const workItemSingleLinkedItemResponse = { data: { - workspace: { + namespace: { __typename: 'Namespace', id: 'gid://gitlab/Group/1', workItem: { @@ -1216,7 +1216,7 @@ export const workItemSingleLinkedItemResponse = { export const workItemNoBlockedByLinkedItemsResponse = { data: { - workspace: { + namespace: { __typename: 'Namespace', id: 'gid://gitlab/Group/1', workItem: { @@ -1230,7 +1230,7 @@ export const workItemNoBlockedByLinkedItemsResponse = { export const workItemBlockedByLinkedItemsResponse = { data: { - workspace: { + namespace: { __typename: 'Namespace', id: 'gid://gitlab/Group/1', workItem: { @@ -1244,7 +1244,7 @@ export const workItemBlockedByLinkedItemsResponse = { export const workItemsClosedAndOpenLinkedItemsResponse = { data: { - workspace: { + namespace: { __typename: 'Namespace', id: 'gid://gitlab/Group/1', workItem: { @@ -2752,7 +2752,7 @@ export const childrenWorkItemsObjectives = [ export const workItemHierarchyResponse = { data: { - workspace: { + namespace: { __typename: 'Project', id: 'gid://gitlab/Project/2', workItem: { @@ -3593,7 +3593,7 @@ export const changeWorkItemParentMutationResponse = { export const availableWorkItemsResponse = { data: { - workspace: { + namespace: { __typename: 'Project', id: 'gid://gitlab/Project/2', workItems: { @@ -3645,7 +3645,7 @@ export const availableWorkItemsResponse = { export const availableObjectivesResponse = { data: { - workspace: { + namespace: { __typename: 'Project', id: 'gid://gitlab/Project/2', workItems: { @@ -3715,7 +3715,7 @@ export const availableObjectivesResponse = { export const searchedObjectiveResponse = { data: { - workspace: { + namespace: { __typename: 'Project', id: 'gid://gitlab/Project/2', workItems: { @@ -3748,7 +3748,7 @@ export const searchedObjectiveResponse = { export const searchWorkItemsResponse = ({ workItems = [], workItemsByIid = [] } = {}) => { return { data: { - workspace: { + namespace: { __typename: 'Project', id: 'gid://gitlab/Project/2', workItems: { @@ -3891,7 +3891,7 @@ export const mockIterationWidgetResponse = { export const groupIterationsResponse = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Group/22', attributes: { nodes: [ @@ -3948,7 +3948,7 @@ export const groupIterationsResponse = { export const groupIterationsResponseWithNoIterations = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Group/22', attributes: { nodes: [], @@ -4350,7 +4350,7 @@ export const mockWorkItemNotesResponse = { }; export const mockWorkItemNotesByIidResponse = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Project/6', workItem: { id: 'gid://gitlab/WorkItem/600', @@ -4553,7 +4553,7 @@ export const mockWorkItemNotesByIidResponse = { export const mockMoreWorkItemNotesResponse = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Project/6', workItem: { id: 'gid://gitlab/WorkItem/600', @@ -4886,7 +4886,7 @@ export const mockWorkItemDiscussion = { export const mockWorkItemNotesResponseWithComments = (resolved = false) => { return { data: { - workspace: { + namespace: { id: 'gid://gitlab/Project/6', workItem: { id: 'gid://gitlab/WorkItem/600', @@ -5256,7 +5256,7 @@ export const workItemSystemNoteWithMetadata = { export const workItemNotesWithSystemNotesWithChangedDescription = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Project/4', workItem: { id: 'gid://gitlab/WorkItem/733', @@ -6552,7 +6552,7 @@ export const namespaceGroupsList = { export const createWorkItemQueryResponse = (widgets = []) => ({ data: { - workspace: { + namespace: { id: 'full-path-epic-id', workItem: { id: 'gid://gitlab/WorkItem/new-epic', @@ -6941,7 +6941,7 @@ export const mockProjectPermissionsQueryResponse = ({ updateDesign = true, } = {}) => ({ data: { - workspace: { + namespace: { id: 'gid://gitlab/Project/1', userPermissions: { createDesign, @@ -6956,7 +6956,7 @@ export const mockProjectPermissionsQueryResponse = ({ export const mockGroupPermissionsQueryResponse = ({ adminWorkItemLifecycle = true } = {}) => ({ data: { - workspace: { + namespace: { id: 'gid://gitlab/Group/24', userPermissions: { adminWorkItemLifecycle, @@ -7124,7 +7124,7 @@ export const workItemHierarchyNoChildrenTreeResponse = { export const workItemEmailParticipantsResponse = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Namespaces::ProjectNamespace/34', workItem: { id: 'gid://gitlab/WorkItem/689', @@ -7153,7 +7153,7 @@ export const workItemEmailParticipantsResponse = { export const workItemEmailParticipantsEmptyResponse = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Namespaces::ProjectNamespace/34', workItem: { id: 'gid://gitlab/WorkItem/689', @@ -7244,7 +7244,7 @@ export const errorTrackingQueryResponseWithStackTrace = getErrorTrackingQueryRes export const mockRolledUpHealthStatus = []; export const mockCreateWorkItemDraftData = { - workspace: { + namespace: { __typename: 'Namespace', id: 'gitlab-org-epic-id', workItem: { @@ -7827,7 +7827,7 @@ export const getAllStatusesQueryResponse = [ export const namespaceWorkItemTypesQueryResponse = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Project/8', webUrl: 'web/url', userPermissions: { @@ -8939,7 +8939,7 @@ export const namespaceWorkItemTypesQueryResponse = { export const namespaceWorkItemTypesWithOKRsQueryResponse = { data: { - workspace: { + namespace: { id: 'gid://gitlab/Namespaces::ProjectNamespace/9', webUrl: 'http://localhost/group2/project-4', userPermissions: { diff --git a/spec/frontend/work_items/notes/award_utils_spec.js b/spec/frontend/work_items/notes/award_utils_spec.js index 2985c955e85e98..236dce8c9d70e9 100644 --- a/spec/frontend/work_items/notes/award_utils_spec.js +++ b/spec/frontend/work_items/notes/award_utils_spec.js @@ -17,7 +17,7 @@ import { } from '../mock_data'; function getWorkItem(data) { - return data.workspace.workItem; + return data.namespace.workItem; } function getFirstNote(workItem) { return workItem.widgets.find((w) => w.type === 'NOTES').discussions.nodes[0].notes.nodes[0]; @@ -154,7 +154,7 @@ describe('Work item note award utils', () => { const cacheData = workItemResponseFactory({ newCustomEmojiPath }); const mockCache = { readQuery: jest.fn().mockReturnValue({ - workspace: { + namespace: { workItem: cacheData.data.workItem, }, }), diff --git a/spec/frontend/work_items/utils_spec.js b/spec/frontend/work_items/utils_spec.js index 3dbe8cb5be6f0c..93569e3aa0b367 100644 --- a/spec/frontend/work_items/utils_spec.js +++ b/spec/frontend/work_items/utils_spec.js @@ -439,7 +439,7 @@ describe('getNewWorkItemWidgetsAutoSaveKey', () => { describe('getWorkItemWidgets', () => { it('returns the correct widgets for a work item', () => { const result = getWorkItemWidgets({ - workspace: { + namespace: { workItem: workItemQueryResponse.data.workItem, }, }); -- GitLab From 222d1c3b4e6f5fe779487ae4a8dfe51557179f25 Mon Sep 17 00:00:00 2001 From: Coung Ngo Date: Tue, 16 Dec 2025 17:50:34 +0000 Subject: [PATCH 3/4] Fix test failures --- .../javascripts/sidebar/components/sidebar_dropdown.vue | 3 ++- .../sidebar/components/sidebar_dropdown_widget.vue | 5 +++-- .../filtered_search_bar/tokens/work_item_type_token.vue | 2 +- .../sidebar/components/sidebar_dropdown_widget.vue | 7 ++++--- .../sidebar/queries/project_issue_iteration.query.graphql | 2 +- ee/spec/frontend/sidebar/mock_data.js | 6 +++--- .../tokens/work_item_type_token_spec.js | 4 ++-- 7 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/sidebar/components/sidebar_dropdown.vue b/app/assets/javascripts/sidebar/components/sidebar_dropdown.vue index a0cbf5854ad6e1..0f51f37b7e2c1e 100644 --- a/app/assets/javascripts/sidebar/components/sidebar_dropdown.vue +++ b/app/assets/javascripts/sidebar/components/sidebar_dropdown.vue @@ -143,7 +143,8 @@ export default { return variables; }, - update: (data) => data?.workspace?.attributes?.nodes ?? [], + update: (data) => + (data?.workspace?.attributes?.nodes || data?.namespace?.attributes?.nodes) ?? [], error(error) { createAlert({ message: this.i18n.listFetchError, captureError: true, error }); }, diff --git a/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue b/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue index 5104215cd945c0..93f8a69d28d608 100644 --- a/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue +++ b/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue @@ -111,11 +111,12 @@ export default { }; }, update(data) { - return data.workspace?.issuable || {}; + return data.workspace?.issuable || data.namespace?.issuable || {}; }, result({ data }) { if (this.glFeatures?.epicWidgetEditConfirmation && this.isEpicAttribute) { - this.hasCurrentAttribute = data?.workspace?.issuable.hasEpic; + this.hasCurrentAttribute = + data?.workspace?.issuable.hasEpic || data?.namespace?.issuable.hasEpic; } }, skip() { diff --git a/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/work_item_type_token.vue b/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/work_item_type_token.vue index 22488bcb2b6cec..9b1aaf97f9333d 100644 --- a/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/work_item_type_token.vue +++ b/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/work_item_type_token.vue @@ -54,7 +54,7 @@ export default { this.config .fetchWorkItemTypes() .then((res) => { - const rawTypes = Array.isArray(res) ? res : res.data?.workspace?.workItemTypes?.nodes; + const rawTypes = Array.isArray(res) ? res : res.data?.namespace?.workItemTypes?.nodes; if (rawTypes) { this.workItemTypes = rawTypes.map((type) => ({ value: type.name.toUpperCase().replace(/\s+/g, '_'), // 'Key Results' -> 'KEY_RESULTS' diff --git a/ee/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue b/ee/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue index 04a4c733eeebc6..672090ba50304d 100644 --- a/ee/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue +++ b/ee/app/assets/javascripts/sidebar/components/sidebar_dropdown_widget.vue @@ -88,7 +88,6 @@ export default { query() { const { current } = this.issuableAttributeQuery; const { query } = current[this.issuableType]; - return query; }, variables() { @@ -98,10 +97,12 @@ export default { }; }, update(data) { - return data.workspace?.issuable || {}; + return data.workspace?.issuable || data.namespace?.issuable || {}; }, result({ data }) { - this.hasWorkItemParent = data?.workspace?.issuable?.hasParent && this.showWorkItemEpics; + this.hasWorkItemParent = + (data?.workspace?.issuable?.hasParent || data?.namespace?.issuable?.hasParent) && + this.showWorkItemEpics; }, error(error) { createAlert({ diff --git a/ee/app/assets/javascripts/sidebar/queries/project_issue_iteration.query.graphql b/ee/app/assets/javascripts/sidebar/queries/project_issue_iteration.query.graphql index f77b63da2d3ada..8df9923b5adaca 100644 --- a/ee/app/assets/javascripts/sidebar/queries/project_issue_iteration.query.graphql +++ b/ee/app/assets/javascripts/sidebar/queries/project_issue_iteration.query.graphql @@ -1,7 +1,7 @@ #import "./iteration.fragment.graphql" query projectIssueIteration($fullPath: ID!, $iid: String!) { - workspace: project(fullPath: $fullPath) { + namespace: project(fullPath: $fullPath) { id issuable: issue(iid: $iid) { id diff --git a/ee/spec/frontend/sidebar/mock_data.js b/ee/spec/frontend/sidebar/mock_data.js index a5ea2d58b091e7..6696c7779a3499 100644 --- a/ee/spec/frontend/sidebar/mock_data.js +++ b/ee/spec/frontend/sidebar/mock_data.js @@ -88,7 +88,7 @@ export const mockEpic2 = { export const mockGroupIterationsResponse = { data: { - workspace: { + namespace: { id: '1', attributes: { nodes: [mockIteration1, mockIteration2], @@ -141,7 +141,7 @@ export const emptyGroupEpicsResponse = { export const mockCurrentIterationResponse1 = { data: { errors: [], - workspace: { + namespace: { id: '1', issuable: { id: mockIssueId, @@ -156,7 +156,7 @@ export const mockCurrentIterationResponse1 = { export const mockCurrentIterationResponse2 = { data: { errors: [], - workspace: { + namespace: { id: '1', issuable: { id: mockIssueId, diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/work_item_type_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/work_item_type_token_spec.js index 3fa6afda50ce7a..b0acb58ab55032 100644 --- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/work_item_type_token_spec.js +++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/work_item_type_token_spec.js @@ -177,7 +177,7 @@ describe('WorkItemTypeToken', () => { it('fetches work item types when fetch-suggestions is triggered', async () => { const mockFetch = jest.fn().mockResolvedValue({ data: { - workspace: { + namespace: { workItemTypes: { nodes: [{ name: 'Epic' }, { name: 'Key result' }], }, @@ -203,7 +203,7 @@ describe('WorkItemTypeToken', () => { it('transforms fetched work item types correctly', async () => { const mockFetch = jest.fn().mockResolvedValue({ data: { - workspace: { + namespace: { workItemTypes: { nodes: [{ name: 'Epic' }, { name: 'Key result' }, { name: 'Requirements' }], }, -- GitLab From 9f43573df0a5becb846cbbd16f668bc9a904e90d Mon Sep 17 00:00:00 2001 From: Coung Ngo Date: Tue, 16 Dec 2025 19:17:14 +0000 Subject: [PATCH 4/4] Fix test failures --- .../work_items/components/work_item_types_list.vue | 2 +- .../work_items/components/work_item_types_list_spec.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/work_items/components/work_item_types_list.vue b/app/assets/javascripts/work_items/components/work_item_types_list.vue index 6397ce351cf8f1..9727f8bd43ef67 100644 --- a/app/assets/javascripts/work_items/components/work_item_types_list.vue +++ b/app/assets/javascripts/work_items/components/work_item_types_list.vue @@ -37,7 +37,7 @@ export default { }; }, update(data) { - return data.workspace?.workItemTypes?.nodes || []; + return data.namespace?.workItemTypes?.nodes || []; }, error(error) { this.errorMessage = s__('WorkItem|Failed to fetch work item types.'); diff --git a/spec/frontend/work_items/components/work_item_types_list_spec.js b/spec/frontend/work_items/components/work_item_types_list_spec.js index e269749bc823c5..0da0ed256e9300 100644 --- a/spec/frontend/work_items/components/work_item_types_list_spec.js +++ b/spec/frontend/work_items/components/work_item_types_list_spec.js @@ -18,7 +18,7 @@ describe('WorkItemTypesList', () => { const mockEmptyResponse = { data: { - workspace: { + namespace: { workItemTypes: { nodes: [], __typename: 'WorkItemTypeConnection', @@ -29,7 +29,7 @@ describe('WorkItemTypesList', () => { }; const getMockWorkItemTypes = () => - namespaceWorkItemTypesQueryResponse.data.workspace.workItemTypes.nodes; + namespaceWorkItemTypesQueryResponse.data.namespace.workItemTypes.nodes; const mockWorkItemTypes = getMockWorkItemTypes(); const namespaceQueryHandler = jest.fn().mockResolvedValue(namespaceWorkItemTypesQueryResponse); const mockEmptyResponseHandler = jest.fn().mockResolvedValue(mockEmptyResponse); -- GitLab