Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-12-05 12:18:51 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-12-05 12:18:51 +0300
commit01625f2465779254cfdd08697c4955cf3af05a1f (patch)
treec1610ee26e9ce2e2313f42103c9134f82d575e4e /spec/frontend/work_items
parent0e31e4396d76a8d723a26354278295fd0c51d9c7 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/work_items')
-rw-r--r--spec/frontend/work_items/components/notes/work_item_note_actions_spec.js1
-rw-r--r--spec/frontend/work_items/components/notes/work_item_note_awards_list_spec.js51
-rw-r--r--spec/frontend/work_items/components/work_item_notes_spec.js27
-rw-r--r--spec/frontend/work_items/notes/award_utils_spec.js18
4 files changed, 77 insertions, 20 deletions
diff --git a/spec/frontend/work_items/components/notes/work_item_note_actions_spec.js b/spec/frontend/work_items/components/notes/work_item_note_actions_spec.js
index 596283a9590..c820c60fe13 100644
--- a/spec/frontend/work_items/components/notes/work_item_note_actions_spec.js
+++ b/spec/frontend/work_items/components/notes/work_item_note_actions_spec.js
@@ -64,6 +64,7 @@ describe('Work Item Note Actions', () => {
projectName,
},
provide: {
+ isGroup: false,
glFeatures: {
workItemsMvc2: true,
},
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 ce915635946..939dd3e870b 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
@@ -9,6 +9,7 @@ import AwardsList from '~/vue_shared/components/awards_list.vue';
import WorkItemNoteAwardsList from '~/work_items/components/notes/work_item_note_awards_list.vue';
import addAwardEmojiMutation from '~/work_items/graphql/notes/work_item_note_add_award_emoji.mutation.graphql';
import removeAwardEmojiMutation from '~/work_items/graphql/notes/work_item_note_remove_award_emoji.mutation.graphql';
+import groupWorkItemNotesByIidQuery from '~/work_items/graphql/notes/group_work_item_notes_by_iid.query.graphql';
import workItemNotesByIidQuery from '~/work_items/graphql/notes/work_item_notes_by_iid.query.graphql';
import {
mockWorkItemNotesResponseWithComments,
@@ -45,6 +46,7 @@ describe('Work Item Note Awards List', () => {
const findAwardsList = () => wrapper.findComponent(AwardsList);
const createComponent = ({
+ isGroup = false,
note = firstNote,
addAwardEmojiMutationHandler = addAwardEmojiMutationSuccessHandler,
removeAwardEmojiMutationHandler = removeAwardEmojiMutationSuccessHandler,
@@ -55,12 +57,15 @@ describe('Work Item Note Awards List', () => {
]);
apolloProvider.clients.defaultClient.writeQuery({
- query: workItemNotesByIidQuery,
+ query: isGroup ? groupWorkItemNotesByIidQuery : workItemNotesByIidQuery,
variables: { fullPath, iid: workItemIid },
...mockWorkItemNotesResponseWithComments,
});
wrapper = shallowMount(WorkItemNoteAwardsList, {
+ provide: {
+ isGroup,
+ },
propsData: {
fullPath,
workItemIid,
@@ -89,17 +94,20 @@ describe('Work Item Note Awards List', () => {
expect(findAwardsList().props('canAwardEmoji')).toBe(hasAwardEmojiPermission);
});
- it('adds award if not already awarded', async () => {
- createComponent();
- await waitForPromises();
+ it.each([true, false])(
+ 'adds award if not already awarded in both group and project contexts',
+ async (isGroup) => {
+ createComponent({ isGroup });
+ await waitForPromises();
- findAwardsList().vm.$emit('award', EMOJI_THUMBSUP);
+ findAwardsList().vm.$emit('award', EMOJI_THUMBSUP);
- expect(addAwardEmojiMutationSuccessHandler).toHaveBeenCalledWith({
- awardableId: firstNote.id,
- name: EMOJI_THUMBSUP,
- });
- });
+ expect(addAwardEmojiMutationSuccessHandler).toHaveBeenCalledWith({
+ awardableId: firstNote.id,
+ name: EMOJI_THUMBSUP,
+ });
+ },
+ );
it('emits error if awarding emoji fails', async () => {
createComponent({
@@ -114,20 +122,23 @@ describe('Work Item Note Awards List', () => {
expect(wrapper.emitted('error')).toEqual([[__('Failed to add emoji. Please try again')]]);
});
- it('removes award if already awarded', async () => {
- const removeAwardEmojiMutationHandler = removeAwardEmojiMutationSuccessHandler;
+ it.each([true, false])(
+ 'removes award if already awarded in both group and project contexts',
+ async (isGroup) => {
+ const removeAwardEmojiMutationHandler = removeAwardEmojiMutationSuccessHandler;
- createComponent({ removeAwardEmojiMutationHandler });
+ createComponent({ isGroup, removeAwardEmojiMutationHandler });
- findAwardsList().vm.$emit('award', EMOJI_THUMBSDOWN);
+ findAwardsList().vm.$emit('award', EMOJI_THUMBSDOWN);
- await waitForPromises();
+ await waitForPromises();
- expect(removeAwardEmojiMutationHandler).toHaveBeenCalledWith({
- awardableId: firstNote.id,
- name: EMOJI_THUMBSDOWN,
- });
- });
+ expect(removeAwardEmojiMutationHandler).toHaveBeenCalledWith({
+ awardableId: firstNote.id,
+ name: EMOJI_THUMBSDOWN,
+ });
+ },
+ );
it('restores award if remove fails', async () => {
createComponent({
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 9e02e0708d4..2620242000e 100644
--- a/spec/frontend/work_items/components/work_item_notes_spec.js
+++ b/spec/frontend/work_items/components/work_item_notes_spec.js
@@ -10,6 +10,7 @@ import WorkItemNotes from '~/work_items/components/work_item_notes.vue';
import WorkItemDiscussion from '~/work_items/components/notes/work_item_discussion.vue';
import WorkItemAddNote from '~/work_items/components/notes/work_item_add_note.vue';
import WorkItemNotesActivityHeader from '~/work_items/components/notes/work_item_notes_activity_header.vue';
+import groupWorkItemNotesByIidQuery from '~/work_items/graphql/notes/group_work_item_notes_by_iid.query.graphql';
import workItemNotesByIidQuery from '~/work_items/graphql/notes/work_item_notes_by_iid.query.graphql';
import deleteWorkItemNoteMutation from '~/work_items/graphql/notes/delete_work_item_notes.mutation.graphql';
import workItemNoteCreatedSubscription from '~/work_items/graphql/notes/work_item_note_created.subscription.graphql';
@@ -63,6 +64,9 @@ describe('WorkItemNotes component', () => {
const findWorkItemCommentNoteAtIndex = (index) => findAllWorkItemCommentNotes().at(index);
const findDeleteNoteModal = () => wrapper.findComponent(GlModal);
+ const groupWorkItemNotesQueryHandler = jest
+ .fn()
+ .mockResolvedValue(mockWorkItemNotesByIidResponse);
const workItemNotesQueryHandler = jest.fn().mockResolvedValue(mockWorkItemNotesByIidResponse);
const workItemMoreNotesQueryHandler = jest.fn().mockResolvedValue(mockMoreWorkItemNotesResponse);
const workItemNotesWithCommentsQueryHandler = jest
@@ -87,17 +91,22 @@ describe('WorkItemNotes component', () => {
workItemIid = mockWorkItemIid,
defaultWorkItemNotesQueryHandler = workItemNotesQueryHandler,
deleteWINoteMutationHandler = deleteWorkItemNoteMutationSuccessHandler,
+ isGroup = false,
isModal = false,
isWorkItemConfidential = false,
} = {}) => {
wrapper = shallowMount(WorkItemNotes, {
apolloProvider: createMockApollo([
[workItemNotesByIidQuery, defaultWorkItemNotesQueryHandler],
+ [groupWorkItemNotesByIidQuery, groupWorkItemNotesQueryHandler],
[deleteWorkItemNoteMutation, deleteWINoteMutationHandler],
[workItemNoteCreatedSubscription, notesCreateSubscriptionHandler],
[workItemNoteUpdatedSubscription, notesUpdateSubscriptionHandler],
[workItemNoteDeletedSubscription, notesDeleteSubscriptionHandler],
]),
+ provide: {
+ isGroup,
+ },
propsData: {
fullPath: 'test-path',
workItemId,
@@ -354,4 +363,22 @@ describe('WorkItemNotes component', () => {
expect(findWorkItemCommentNoteAtIndex(0).props('isWorkItemConfidential')).toBe(true);
});
+
+ describe('when project context', () => {
+ it('calls the project work item query', async () => {
+ createComponent();
+ await waitForPromises();
+
+ expect(workItemNotesQueryHandler).toHaveBeenCalled();
+ });
+ });
+
+ describe('when group context', () => {
+ it('calls the group work item query', async () => {
+ createComponent({ isGroup: true });
+ await waitForPromises();
+
+ expect(groupWorkItemNotesQueryHandler).toHaveBeenCalled();
+ });
+ });
});
diff --git a/spec/frontend/work_items/notes/award_utils_spec.js b/spec/frontend/work_items/notes/award_utils_spec.js
index 8ae32ce5f40..43eceb13b67 100644
--- a/spec/frontend/work_items/notes/award_utils_spec.js
+++ b/spec/frontend/work_items/notes/award_utils_spec.js
@@ -2,6 +2,7 @@ import { getMutation, optimisticAwardUpdate } from '~/work_items/notes/award_uti
import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import mockApollo from 'helpers/mock_apollo_helper';
import { __ } from '~/locale';
+import groupWorkItemNotesByIidQuery from '~/work_items/graphql/notes/group_work_item_notes_by_iid.query.graphql';
import workItemNotesByIidQuery from '~/work_items/graphql/notes/work_item_notes_by_iid.query.graphql';
import addAwardEmojiMutation from '~/work_items/graphql/notes/work_item_note_add_award_emoji.mutation.graphql';
import removeAwardEmojiMutation from '~/work_items/graphql/notes/work_item_note_remove_award_emoji.mutation.graphql';
@@ -105,5 +106,22 @@ describe('Work item note award utils', () => {
expect(updatedNote.awardEmoji.nodes).toEqual([]);
});
+
+ it.each`
+ description | isGroup | query
+ ${'calls project query when in project context'} | ${false} | ${workItemNotesByIidQuery}
+ ${'calls group query when in group context'} | ${true} | ${groupWorkItemNotesByIidQuery}
+ `('$description', ({ isGroup, query }) => {
+ const note = firstNote;
+ const { name } = mockAwardEmojiThumbsUp;
+ const cacheSpy = { updateQuery: jest.fn() };
+
+ optimisticAwardUpdate({ note, name, fullPath, isGroup, workItemIid })(cacheSpy);
+
+ expect(cacheSpy.updateQuery).toHaveBeenCalledWith(
+ { query, variables: { fullPath, iid: workItemIid } },
+ expect.any(Function),
+ );
+ });
});
});