928 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			928 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { GlFilteredSearchToken } from '@gitlab/ui';
 | |
| import { keyBy } from 'lodash';
 | |
| import { ListType } from '~/boards/constants';
 | |
| import { HTTP_STATUS_OK } from '~/lib/utils/http_status';
 | |
| import {
 | |
|   OPERATORS_IS,
 | |
|   OPERATORS_IS_NOT,
 | |
|   TOKEN_TITLE_ASSIGNEE,
 | |
|   TOKEN_TITLE_AUTHOR,
 | |
|   TOKEN_TITLE_CONFIDENTIAL,
 | |
|   TOKEN_TITLE_LABEL,
 | |
|   TOKEN_TITLE_MILESTONE,
 | |
|   TOKEN_TITLE_MY_REACTION,
 | |
|   TOKEN_TITLE_RELEASE,
 | |
|   TOKEN_TITLE_TYPE,
 | |
|   TOKEN_TYPE_ASSIGNEE,
 | |
|   TOKEN_TYPE_AUTHOR,
 | |
|   TOKEN_TYPE_CONFIDENTIAL,
 | |
|   TOKEN_TYPE_LABEL,
 | |
|   TOKEN_TYPE_MILESTONE,
 | |
|   TOKEN_TYPE_MY_REACTION,
 | |
|   TOKEN_TYPE_RELEASE,
 | |
|   TOKEN_TYPE_TYPE,
 | |
| } from '~/vue_shared/components/filtered_search_bar/constants';
 | |
| import UserToken from '~/vue_shared/components/filtered_search_bar/tokens/user_token.vue';
 | |
| import EmojiToken from '~/vue_shared/components/filtered_search_bar/tokens/emoji_token.vue';
 | |
| import LabelToken from '~/vue_shared/components/filtered_search_bar/tokens/label_token.vue';
 | |
| import MilestoneToken from '~/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue';
 | |
| import ReleaseToken from '~/vue_shared/components/filtered_search_bar/tokens/release_token.vue';
 | |
| 
 | |
| export const mockBoard = {
 | |
|   milestone: {
 | |
|     id: 'gid://gitlab/Milestone/114',
 | |
|     title: '14.9',
 | |
|   },
 | |
|   iteration: {
 | |
|     id: 'gid://gitlab/Iteration/124',
 | |
|     title: 'Iteration 9',
 | |
|   },
 | |
|   iterationCadence: {
 | |
|     id: 'gid://gitlab/Iteration::Cadence/134',
 | |
|     title: 'Cadence 3',
 | |
|   },
 | |
|   assignee: {
 | |
|     id: 'gid://gitlab/User/1',
 | |
|     username: 'admin',
 | |
|   },
 | |
|   labels: {
 | |
|     nodes: [{ id: 'gid://gitlab/Label/32', title: 'Deliverable' }],
 | |
|   },
 | |
|   weight: 2,
 | |
| };
 | |
| 
 | |
| export const mockProjectBoardResponse = {
 | |
|   data: {
 | |
|     workspace: {
 | |
|       id: 'gid://gitlab/Project/114',
 | |
|       board: mockBoard,
 | |
|       __typename: 'Project',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockGroupBoardResponse = {
 | |
|   data: {
 | |
|     workspace: {
 | |
|       id: 'gid://gitlab/Group/114',
 | |
|       board: mockBoard,
 | |
|       __typename: 'Group',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockBoardConfig = {
 | |
|   milestoneId: 'gid://gitlab/Milestone/114',
 | |
|   milestoneTitle: '14.9',
 | |
|   iterationId: 'gid://gitlab/Iteration/124',
 | |
|   iterationTitle: 'Iteration 9',
 | |
|   iterationCadenceId: 'gid://gitlab/Iteration::Cadence/134',
 | |
|   assigneeId: 'gid://gitlab/User/1',
 | |
|   assigneeUsername: 'admin',
 | |
|   labels: [{ id: 'gid://gitlab/Label/32', title: 'Deliverable' }],
 | |
|   labelIds: ['gid://gitlab/Label/32'],
 | |
|   weight: 2,
 | |
| };
 | |
| 
 | |
| export const boardObj = {
 | |
|   id: 1,
 | |
|   name: 'test',
 | |
|   milestone_id: null,
 | |
|   labels: [],
 | |
| };
 | |
| 
 | |
| export const listObj = {
 | |
|   id: 300,
 | |
|   position: 0,
 | |
|   title: 'Test',
 | |
|   list_type: 'label',
 | |
|   label: {
 | |
|     id: 5000,
 | |
|     title: 'Test',
 | |
|     color: '#ff0000',
 | |
|     description: 'testing;',
 | |
|     textColor: 'white',
 | |
|   },
 | |
| };
 | |
| 
 | |
| function boardGenerator(n) {
 | |
|   return new Array(n).fill().map((board, index) => {
 | |
|     const id = `${index}`;
 | |
|     const name = `board${id}`;
 | |
| 
 | |
|     return {
 | |
|       node: {
 | |
|         id,
 | |
|         name,
 | |
|         weight: 0,
 | |
|         __typename: 'Board',
 | |
|       },
 | |
|     };
 | |
|   });
 | |
| }
 | |
| 
 | |
| export const boards = boardGenerator(20);
 | |
| export const recentIssueBoards = boardGenerator(5);
 | |
| 
 | |
| export const mockSmallProjectAllBoardsResponse = {
 | |
|   data: {
 | |
|     project: {
 | |
|       id: 'gid://gitlab/Project/114',
 | |
|       boards: { edges: boardGenerator(3) },
 | |
|       __typename: 'Project',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockEmptyProjectRecentBoardsResponse = {
 | |
|   data: {
 | |
|     project: {
 | |
|       id: 'gid://gitlab/Project/114',
 | |
|       recentIssueBoards: { edges: [] },
 | |
|       __typename: 'Project',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockGroupAllBoardsResponse = {
 | |
|   data: {
 | |
|     group: {
 | |
|       id: 'gid://gitlab/Group/114',
 | |
|       boards: { edges: boards },
 | |
|       __typename: 'Group',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockProjectAllBoardsResponse = {
 | |
|   data: {
 | |
|     project: {
 | |
|       id: 'gid://gitlab/Project/1',
 | |
|       boards: { edges: boards },
 | |
|       __typename: 'Project',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockGroupRecentBoardsResponse = {
 | |
|   data: {
 | |
|     group: {
 | |
|       id: 'gid://gitlab/Group/114',
 | |
|       recentIssueBoards: { edges: recentIssueBoards },
 | |
|       __typename: 'Group',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockProjectRecentBoardsResponse = {
 | |
|   data: {
 | |
|     project: {
 | |
|       id: 'gid://gitlab/Project/1',
 | |
|       recentIssueBoards: { edges: recentIssueBoards },
 | |
|       __typename: 'Project',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockAssigneesList = [
 | |
|   {
 | |
|     id: 2,
 | |
|     name: 'Terrell Graham',
 | |
|     username: 'monserrate.gleichner',
 | |
|     state: 'active',
 | |
|     avatar_url: 'https://www.gravatar.com/avatar/598fd02741ac58b88854a99d16704309?s=80&d=identicon',
 | |
|     web_url: 'http://127.0.0.1:3001/monserrate.gleichner',
 | |
|     path: '/monserrate.gleichner',
 | |
|   },
 | |
|   {
 | |
|     id: 12,
 | |
|     name: 'Susy Johnson',
 | |
|     username: 'tana_harvey',
 | |
|     state: 'active',
 | |
|     avatar_url: 'https://www.gravatar.com/avatar/e021a7b0f3e4ae53b5068d487e68c031?s=80&d=identicon',
 | |
|     web_url: 'http://127.0.0.1:3001/tana_harvey',
 | |
|     path: '/tana_harvey',
 | |
|   },
 | |
|   {
 | |
|     id: 20,
 | |
|     name: 'Conchita Eichmann',
 | |
|     username: 'juliana_gulgowski',
 | |
|     state: 'active',
 | |
|     avatar_url: 'https://www.gravatar.com/avatar/c43c506cb6fd7b37017d3b54b94aa937?s=80&d=identicon',
 | |
|     web_url: 'http://127.0.0.1:3001/juliana_gulgowski',
 | |
|     path: '/juliana_gulgowski',
 | |
|   },
 | |
|   {
 | |
|     id: 6,
 | |
|     name: 'Bryce Turcotte',
 | |
|     username: 'melynda',
 | |
|     state: 'active',
 | |
|     avatar_url: 'https://www.gravatar.com/avatar/cc2518f2c6f19f8fac49e1a5ee092a9b?s=80&d=identicon',
 | |
|     web_url: 'http://127.0.0.1:3001/melynda',
 | |
|     path: '/melynda',
 | |
|   },
 | |
|   {
 | |
|     id: 1,
 | |
|     name: 'Administrator',
 | |
|     username: 'root',
 | |
|     state: 'active',
 | |
|     avatar_url: 'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
 | |
|     web_url: 'http://127.0.0.1:3001/root',
 | |
|     path: '/root',
 | |
|   },
 | |
| ];
 | |
| 
 | |
| export const mockMilestone = {
 | |
|   id: 1,
 | |
|   state: 'active',
 | |
|   title: 'Milestone title',
 | |
|   description: 'Harum corporis aut consequatur quae dolorem error sequi quia.',
 | |
|   start_date: '2018-01-01',
 | |
|   due_date: '2019-12-31',
 | |
| };
 | |
| 
 | |
| export const mockMilestones = [
 | |
|   {
 | |
|     id: 'gid://gitlab/Milestone/1',
 | |
|     title: 'Milestone 1',
 | |
|   },
 | |
|   {
 | |
|     id: 'gid://gitlab/Milestone/2',
 | |
|     title: 'Milestone 2',
 | |
|   },
 | |
| ];
 | |
| 
 | |
| export const assignees = [
 | |
|   {
 | |
|     id: 'gid://gitlab/User/2',
 | |
|     username: 'angelina.herman',
 | |
|     name: 'Bernardina Bosco',
 | |
|     avatar: 'https://www.gravatar.com/avatar/eb7b664b13a30ad9f9ba4b61d7075470?s=80&d=identicon',
 | |
|     webUrl: 'http://127.0.0.1:3000/angelina.herman',
 | |
|   },
 | |
| ];
 | |
| 
 | |
| export const labels = [
 | |
|   {
 | |
|     id: 'gid://gitlab/GroupLabel/5',
 | |
|     title: 'Cosync',
 | |
|     color: '#34ebec',
 | |
|     description: null,
 | |
|   },
 | |
|   {
 | |
|     id: 'gid://gitlab/GroupLabel/6',
 | |
|     title: 'Brock',
 | |
|     color: '#e082b6',
 | |
|     description: null,
 | |
|   },
 | |
| ];
 | |
| 
 | |
| export const rawIssue = {
 | |
|   title: 'Issue 1',
 | |
|   id: 'gid://gitlab/Issue/436',
 | |
|   iid: '27',
 | |
|   dueDate: null,
 | |
|   timeEstimate: 0,
 | |
|   confidential: false,
 | |
|   referencePath: 'gitlab-org/test-subgroup/gitlab-test#27',
 | |
|   path: '/gitlab-org/test-subgroup/gitlab-test/-/issues/27',
 | |
|   labels: {
 | |
|     nodes: [
 | |
|       {
 | |
|         id: 1,
 | |
|         title: 'test',
 | |
|         color: '#F0AD4E',
 | |
|         description: 'testing',
 | |
|       },
 | |
|     ],
 | |
|   },
 | |
|   assignees: {
 | |
|     nodes: assignees,
 | |
|   },
 | |
|   epic: {
 | |
|     id: 'gid://gitlab/Epic/41',
 | |
|   },
 | |
|   type: 'ISSUE',
 | |
| };
 | |
| 
 | |
| export const mockIssueFullPath = 'gitlab-org/test-subgroup/gitlab-test';
 | |
| export const mockEpicFullPath = 'gitlab-org/test-subgroup';
 | |
| 
 | |
| export const mockIssue = {
 | |
|   id: 'gid://gitlab/Issue/436',
 | |
|   iid: '27',
 | |
|   title: 'Issue 1',
 | |
|   dueDate: null,
 | |
|   timeEstimate: 0,
 | |
|   confidential: false,
 | |
|   referencePath: `${mockIssueFullPath}#27`,
 | |
|   path: `/${mockIssueFullPath}/-/issues/27`,
 | |
|   assignees,
 | |
|   labels: [
 | |
|     {
 | |
|       id: 1,
 | |
|       title: 'test',
 | |
|       color: '#F0AD4E',
 | |
|       description: 'testing',
 | |
|     },
 | |
|   ],
 | |
|   epic: {
 | |
|     id: 'gid://gitlab/Epic/41',
 | |
|   },
 | |
|   type: 'ISSUE',
 | |
| };
 | |
| 
 | |
| export const mockEpic = {
 | |
|   id: 'gid://gitlab/Epic/26',
 | |
|   iid: '1',
 | |
|   group: {
 | |
|     id: 'gid://gitlab/Group/33',
 | |
|     fullPath: 'twitter',
 | |
|     __typename: 'Group',
 | |
|   },
 | |
|   title: 'Eum animi debitis occaecati ad non odio repellat voluptatem similique.',
 | |
|   state: 'opened',
 | |
|   reference: '&1',
 | |
|   referencePath: `${mockEpicFullPath}&1`,
 | |
|   webPath: `/groups/${mockEpicFullPath}/-/epics/1`,
 | |
|   webUrl: `${mockEpicFullPath}/-/epics/1`,
 | |
|   createdAt: '2022-01-18T05:15:15Z',
 | |
|   closedAt: null,
 | |
|   __typename: 'Epic',
 | |
|   relativePosition: null,
 | |
|   confidential: false,
 | |
|   subscribed: true,
 | |
|   blocked: true,
 | |
|   blockedByCount: 1,
 | |
|   labels: {
 | |
|     nodes: [],
 | |
|     __typename: 'LabelConnection',
 | |
|   },
 | |
|   hasIssues: true,
 | |
|   descendantCounts: {
 | |
|     closedEpics: 0,
 | |
|     closedIssues: 0,
 | |
|     openedEpics: 0,
 | |
|     openedIssues: 2,
 | |
|     __typename: 'EpicDescendantCount',
 | |
|   },
 | |
|   descendantWeightSum: {
 | |
|     closedIssues: 0,
 | |
|     openedIssues: 0,
 | |
|     __typename: 'EpicDescendantWeights',
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockActiveIssue = {
 | |
|   ...mockIssue,
 | |
|   id: 'gid://gitlab/Issue/436',
 | |
|   iid: '27',
 | |
|   subscribed: false,
 | |
|   emailsDisabled: false,
 | |
| };
 | |
| 
 | |
| export const mockIssue2 = {
 | |
|   id: 'gid://gitlab/Issue/437',
 | |
|   iid: 28,
 | |
|   title: 'Issue 2',
 | |
|   dueDate: null,
 | |
|   timeEstimate: 0,
 | |
|   confidential: false,
 | |
|   referencePath: 'gitlab-org/test-subgroup/gitlab-test#28',
 | |
|   path: '/gitlab-org/test-subgroup/gitlab-test/-/issues/28',
 | |
|   assignees,
 | |
|   labels,
 | |
|   epic: {
 | |
|     id: 'gid://gitlab/Epic/40',
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockIssue3 = {
 | |
|   id: 'gid://gitlab/Issue/438',
 | |
|   iid: 29,
 | |
|   title: 'Issue 3',
 | |
|   referencePath: '#29',
 | |
|   dueDate: null,
 | |
|   timeEstimate: 0,
 | |
|   confidential: false,
 | |
|   path: '/gitlab-org/gitlab-test/-/issues/28',
 | |
|   assignees,
 | |
|   labels,
 | |
|   epic: null,
 | |
| };
 | |
| 
 | |
| export const mockIssue4 = {
 | |
|   id: 'gid://gitlab/Issue/439',
 | |
|   iid: 30,
 | |
|   title: 'Issue 4',
 | |
|   referencePath: '#30',
 | |
|   dueDate: null,
 | |
|   timeEstimate: 0,
 | |
|   confidential: false,
 | |
|   path: '/gitlab-org/gitlab-test/-/issues/28',
 | |
|   assignees,
 | |
|   labels,
 | |
|   epic: null,
 | |
| };
 | |
| 
 | |
| export const mockIssues = [mockIssue, mockIssue2];
 | |
| 
 | |
| export const BoardsMockData = {
 | |
|   GET: {
 | |
|     '/test/-/boards/1/lists/300/issues?id=300&page=1': {
 | |
|       issues: [
 | |
|         {
 | |
|           title: 'Testing',
 | |
|           id: 1,
 | |
|           iid: 1,
 | |
|           confidential: false,
 | |
|           labels: [],
 | |
|           assignees: [],
 | |
|         },
 | |
|       ],
 | |
|     },
 | |
|     '/test/issue-boards/-/milestones.json': [
 | |
|       {
 | |
|         id: 1,
 | |
|         title: 'test',
 | |
|       },
 | |
|     ],
 | |
|   },
 | |
|   POST: {
 | |
|     '/test/-/boards/1/lists': listObj,
 | |
|   },
 | |
|   PUT: {
 | |
|     '/test/issue-boards/-/board/1/lists{/id}': {},
 | |
|   },
 | |
|   DELETE: {
 | |
|     '/test/issue-boards/-/board/1/lists{/id}': {},
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const boardsMockInterceptor = (config) => {
 | |
|   const body = BoardsMockData[config.method.toUpperCase()][config.url];
 | |
|   return [HTTP_STATUS_OK, body];
 | |
| };
 | |
| 
 | |
| export const mockList = {
 | |
|   id: 'gid://gitlab/List/1',
 | |
|   title: 'Open',
 | |
|   position: -Infinity,
 | |
|   listType: 'backlog',
 | |
|   collapsed: false,
 | |
|   label: null,
 | |
|   assignee: null,
 | |
|   milestone: null,
 | |
|   iteration: null,
 | |
|   loading: false,
 | |
|   issuesCount: 1,
 | |
|   maxIssueCount: 0,
 | |
|   metadata: {
 | |
|     epicsCount: 1,
 | |
|   },
 | |
|   __typename: 'BoardList',
 | |
| };
 | |
| 
 | |
| export const mockLabelList = {
 | |
|   id: 'gid://gitlab/List/2',
 | |
|   title: 'To Do',
 | |
|   position: 0,
 | |
|   listType: 'label',
 | |
|   collapsed: false,
 | |
|   label: {
 | |
|     id: 'gid://gitlab/GroupLabel/121',
 | |
|     title: 'To Do',
 | |
|     color: '#F0AD4E',
 | |
|     textColor: '#FFFFFF',
 | |
|     description: null,
 | |
|     descriptionHtml: null,
 | |
|   },
 | |
|   assignee: null,
 | |
|   milestone: null,
 | |
|   iteration: null,
 | |
|   loading: false,
 | |
|   issuesCount: 0,
 | |
|   maxIssueCount: 0,
 | |
|   __typename: 'BoardList',
 | |
| };
 | |
| 
 | |
| export const mockMilestoneList = {
 | |
|   id: 'gid://gitlab/List/3',
 | |
|   title: 'To Do',
 | |
|   position: 0,
 | |
|   listType: 'milestone',
 | |
|   collapsed: false,
 | |
|   label: null,
 | |
|   assignee: null,
 | |
|   milestone: {
 | |
|     webUrl: 'https://gitlab.com/h5bp/html5-boilerplate/-/milestones/1',
 | |
|     title: 'Backlog',
 | |
|   },
 | |
|   loading: false,
 | |
|   issuesCount: 0,
 | |
| };
 | |
| 
 | |
| export const mockLists = [mockList, mockLabelList];
 | |
| 
 | |
| export const mockListsById = keyBy(mockLists, 'id');
 | |
| 
 | |
| export const mockIssuesByListId = {
 | |
|   'gid://gitlab/List/1': [mockIssue.id, mockIssue3.id, mockIssue4.id],
 | |
|   'gid://gitlab/List/2': mockIssues.map(({ id }) => id),
 | |
| };
 | |
| 
 | |
| export const participants = [
 | |
|   {
 | |
|     id: '1',
 | |
|     username: 'test',
 | |
|     name: 'test',
 | |
|     avatar: '',
 | |
|     avatarUrl: '',
 | |
|   },
 | |
|   {
 | |
|     id: '2',
 | |
|     username: 'hello',
 | |
|     name: 'hello',
 | |
|     avatar: '',
 | |
|     avatarUrl: '',
 | |
|   },
 | |
| ];
 | |
| 
 | |
| export const issues = {
 | |
|   [mockIssue.id]: mockIssue,
 | |
|   [mockIssue2.id]: mockIssue2,
 | |
|   [mockIssue3.id]: mockIssue3,
 | |
|   [mockIssue4.id]: mockIssue4,
 | |
| };
 | |
| 
 | |
| // The response from group project REST API
 | |
| export const mockRawGroupProjects = [
 | |
|   {
 | |
|     id: 0,
 | |
|     name: 'Example Project',
 | |
|     name_with_namespace: 'Awesome Group / Example Project',
 | |
|     path_with_namespace: 'awesome-group/example-project',
 | |
|   },
 | |
|   {
 | |
|     id: 1,
 | |
|     name: 'Foobar Project',
 | |
|     name_with_namespace: 'Awesome Group / Foobar Project',
 | |
|     path_with_namespace: 'awesome-group/foobar-project',
 | |
|   },
 | |
| ];
 | |
| 
 | |
| // The response from GraphQL endpoint
 | |
| export const mockGroupProject1 = {
 | |
|   id: 0,
 | |
|   name: 'Example Project',
 | |
|   nameWithNamespace: 'Awesome Group / Example Project',
 | |
|   fullPath: 'awesome-group/example-project',
 | |
|   archived: false,
 | |
| };
 | |
| 
 | |
| export const mockGroupProject2 = {
 | |
|   id: 1,
 | |
|   name: 'Foobar Project',
 | |
|   nameWithNamespace: 'Awesome Group / Foobar Project',
 | |
|   fullPath: 'awesome-group/foobar-project',
 | |
|   archived: false,
 | |
| };
 | |
| 
 | |
| export const mockArchivedGroupProject = {
 | |
|   id: 2,
 | |
|   name: 'Archived Project',
 | |
|   nameWithNamespace: 'Awesome Group / Archived Project',
 | |
|   fullPath: 'awesome-group/archived-project',
 | |
|   archived: true,
 | |
| };
 | |
| 
 | |
| export const mockGroupProjects = [mockGroupProject1, mockGroupProject2];
 | |
| 
 | |
| export const mockActiveGroupProjects = [
 | |
|   { ...mockGroupProject1, archived: false },
 | |
|   { ...mockGroupProject2, archived: false },
 | |
| ];
 | |
| 
 | |
| export const mockIssueGroupPath = 'gitlab-org';
 | |
| export const mockIssueProjectPath = `${mockIssueGroupPath}/gitlab-test`;
 | |
| 
 | |
| export const mockBlockingIssue1 = {
 | |
|   id: 'gid://gitlab/Issue/525',
 | |
|   iid: '6',
 | |
|   title: 'blocking issue title 1',
 | |
|   reference: 'gitlab-org/my-project-1#6',
 | |
|   webUrl: 'http://gdk.test:3000/gitlab-org/my-project-1/-/issues/6',
 | |
|   __typename: 'Issue',
 | |
| };
 | |
| 
 | |
| export const mockBlockingEpic1 = {
 | |
|   id: 'gid://gitlab/Epic/29',
 | |
|   iid: '4',
 | |
|   title: 'Sint nihil exercitationem aspernatur unde molestiae rem accusantium.',
 | |
|   reference: 'twitter&4',
 | |
|   webUrl: 'http://gdk.test:3000/groups/gitlab-org/test-subgroup/-/epics/4',
 | |
|   __typename: 'Epic',
 | |
| };
 | |
| 
 | |
| export const mockBlockingIssue2 = {
 | |
|   id: 'gid://gitlab/Issue/524',
 | |
|   iid: '5',
 | |
|   title:
 | |
|     'blocking issue title 2 + blocking issue title 2 + blocking issue title 2 + blocking issue title 2',
 | |
|   reference: 'gitlab-org/my-project-1#5',
 | |
|   webUrl: 'http://gdk.test:3000/gitlab-org/my-project-1/-/issues/5',
 | |
|   __typename: 'Issue',
 | |
| };
 | |
| 
 | |
| export const mockBlockingIssue3 = {
 | |
|   id: 'gid://gitlab/Issue/523',
 | |
|   iid: '4',
 | |
|   title: 'blocking issue title 3',
 | |
|   reference: 'gitlab-org/my-project-1#4',
 | |
|   webUrl: 'http://gdk.test:3000/gitlab-org/my-project-1/-/issues/4',
 | |
|   __typename: 'Issue',
 | |
| };
 | |
| 
 | |
| export const mockBlockingIssue4 = {
 | |
|   id: 'gid://gitlab/Issue/522',
 | |
|   iid: '3',
 | |
|   title: 'blocking issue title 4',
 | |
|   reference: 'gitlab-org/my-project-1#3',
 | |
|   webUrl: 'http://gdk.test:3000/gitlab-org/my-project-1/-/issues/3',
 | |
|   __typename: 'Issue',
 | |
| };
 | |
| 
 | |
| export const mockBlockingIssuablesResponse1 = {
 | |
|   data: {
 | |
|     issuable: {
 | |
|       __typename: 'Issue',
 | |
|       id: 'gid://gitlab/Issue/527',
 | |
|       blockingIssuables: {
 | |
|         __typename: 'IssueConnection',
 | |
|         nodes: [mockBlockingIssue1],
 | |
|       },
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockBlockingEpicIssuablesResponse1 = {
 | |
|   data: {
 | |
|     group: {
 | |
|       __typename: 'Group',
 | |
|       id: 'gid://gitlab/Group/33',
 | |
|       issuable: {
 | |
|         __typename: 'Epic',
 | |
|         id: 'gid://gitlab/Epic/26',
 | |
|         blockingIssuables: {
 | |
|           __typename: 'EpicConnection',
 | |
|           nodes: [mockBlockingEpic1],
 | |
|         },
 | |
|       },
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockBlockingIssuablesResponse2 = {
 | |
|   data: {
 | |
|     issuable: {
 | |
|       __typename: 'Issue',
 | |
|       id: 'gid://gitlab/Issue/527',
 | |
|       blockingIssuables: {
 | |
|         __typename: 'IssueConnection',
 | |
|         nodes: [mockBlockingIssue2],
 | |
|       },
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockBlockingIssuablesResponse3 = {
 | |
|   data: {
 | |
|     issuable: {
 | |
|       __typename: 'Issue',
 | |
|       id: 'gid://gitlab/Issue/527',
 | |
|       blockingIssuables: {
 | |
|         __typename: 'IssueConnection',
 | |
|         nodes: [mockBlockingIssue1, mockBlockingIssue2, mockBlockingIssue3, mockBlockingIssue4],
 | |
|       },
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockBlockedIssue1 = {
 | |
|   id: '527',
 | |
|   blockedByCount: 1,
 | |
| };
 | |
| 
 | |
| export const mockBlockedIssue2 = {
 | |
|   id: '527',
 | |
|   blockedByCount: 4,
 | |
|   webUrl: 'http://gdk.test:3000/gitlab-org/my-project-1/-/issues/0',
 | |
| };
 | |
| 
 | |
| export const mockBlockedEpic1 = {
 | |
|   id: '26',
 | |
|   blockedByCount: 1,
 | |
|   webUrl: 'http://gdk.test:3000/gitlab-org/test-subgroup/-/epics/1',
 | |
| };
 | |
| 
 | |
| export const mockMoveIssueParams = {
 | |
|   itemId: 1,
 | |
|   fromListId: 'gid://gitlab/List/1',
 | |
|   toListId: 'gid://gitlab/List/2',
 | |
|   moveBeforeId: undefined,
 | |
|   moveAfterId: undefined,
 | |
| };
 | |
| 
 | |
| export const mockMoveState = {
 | |
|   boardLists: {
 | |
|     'gid://gitlab/List/1': {
 | |
|       listType: ListType.backlog,
 | |
|     },
 | |
|     'gid://gitlab/List/2': {
 | |
|       listType: ListType.closed,
 | |
|     },
 | |
|   },
 | |
|   boardItems: {
 | |
|     [mockMoveIssueParams.itemId]: { foo: 'bar' },
 | |
|   },
 | |
|   boardItemsByListId: {
 | |
|     [mockMoveIssueParams.fromListId]: [mockMoveIssueParams.itemId],
 | |
|     [mockMoveIssueParams.toListId]: [],
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockMoveData = {
 | |
|   reordering: false,
 | |
|   shouldClone: false,
 | |
|   itemNotInToList: true,
 | |
|   originalIndex: 0,
 | |
|   originalIssue: { foo: 'bar' },
 | |
|   ...mockMoveIssueParams,
 | |
| };
 | |
| 
 | |
| export const mockEmojiToken = {
 | |
|   type: TOKEN_TYPE_MY_REACTION,
 | |
|   icon: 'thumb-up',
 | |
|   title: TOKEN_TITLE_MY_REACTION,
 | |
|   unique: true,
 | |
|   token: EmojiToken,
 | |
|   fetchEmojis: expect.any(Function),
 | |
| };
 | |
| 
 | |
| export const mockConfidentialToken = {
 | |
|   type: TOKEN_TYPE_CONFIDENTIAL,
 | |
|   icon: 'eye-slash',
 | |
|   title: TOKEN_TITLE_CONFIDENTIAL,
 | |
|   unique: true,
 | |
|   token: GlFilteredSearchToken,
 | |
|   operators: OPERATORS_IS,
 | |
|   options: [
 | |
|     { icon: 'eye-slash', value: 'yes', title: 'Yes' },
 | |
|     { icon: 'eye', value: 'no', title: 'No' },
 | |
|   ],
 | |
| };
 | |
| 
 | |
| export const mockTokens = (fetchLabels, fetchUsers, fetchMilestones, isSignedIn) => [
 | |
|   {
 | |
|     icon: 'user',
 | |
|     title: TOKEN_TITLE_ASSIGNEE,
 | |
|     type: TOKEN_TYPE_ASSIGNEE,
 | |
|     operators: OPERATORS_IS_NOT,
 | |
|     token: UserToken,
 | |
|     unique: true,
 | |
|     fetchUsers,
 | |
|     preloadedUsers: [],
 | |
|   },
 | |
|   {
 | |
|     icon: 'pencil',
 | |
|     title: TOKEN_TITLE_AUTHOR,
 | |
|     type: TOKEN_TYPE_AUTHOR,
 | |
|     operators: OPERATORS_IS_NOT,
 | |
|     symbol: '@',
 | |
|     token: UserToken,
 | |
|     unique: true,
 | |
|     fetchUsers,
 | |
|     preloadedUsers: [],
 | |
|   },
 | |
|   {
 | |
|     icon: 'labels',
 | |
|     title: TOKEN_TITLE_LABEL,
 | |
|     type: TOKEN_TYPE_LABEL,
 | |
|     operators: OPERATORS_IS_NOT,
 | |
|     token: LabelToken,
 | |
|     unique: false,
 | |
|     symbol: '~',
 | |
|     fetchLabels,
 | |
|   },
 | |
|   ...(isSignedIn ? [mockEmojiToken, mockConfidentialToken] : []),
 | |
|   {
 | |
|     icon: 'clock',
 | |
|     title: TOKEN_TITLE_MILESTONE,
 | |
|     symbol: '%',
 | |
|     type: TOKEN_TYPE_MILESTONE,
 | |
|     shouldSkipSort: true,
 | |
|     token: MilestoneToken,
 | |
|     unique: true,
 | |
|     fetchMilestones,
 | |
|   },
 | |
|   {
 | |
|     icon: 'issues',
 | |
|     title: TOKEN_TITLE_TYPE,
 | |
|     type: TOKEN_TYPE_TYPE,
 | |
|     token: GlFilteredSearchToken,
 | |
|     unique: true,
 | |
|     options: [
 | |
|       { icon: 'issue-type-issue', value: 'ISSUE', title: 'Issue' },
 | |
|       { icon: 'issue-type-incident', value: 'INCIDENT', title: 'Incident' },
 | |
|     ],
 | |
|   },
 | |
|   {
 | |
|     type: TOKEN_TYPE_RELEASE,
 | |
|     title: TOKEN_TITLE_RELEASE,
 | |
|     icon: 'rocket',
 | |
|     token: ReleaseToken,
 | |
|     fetchReleases: expect.any(Function),
 | |
|   },
 | |
| ];
 | |
| 
 | |
| export const mockLabel1 = {
 | |
|   id: 'gid://gitlab/GroupLabel/121',
 | |
|   title: 'To Do',
 | |
|   color: '#F0AD4E',
 | |
|   textColor: '#FFFFFF',
 | |
|   description: null,
 | |
| };
 | |
| 
 | |
| export const mockLabel2 = {
 | |
|   id: 'gid://gitlab/GroupLabel/122',
 | |
|   title: 'Doing',
 | |
|   color: '#F0AD4E',
 | |
|   textColor: '#FFFFFF',
 | |
|   description: null,
 | |
| };
 | |
| 
 | |
| export const mockProjectLabelsResponse = {
 | |
|   data: {
 | |
|     workspace: {
 | |
|       id: 'gid://gitlab/Project/1',
 | |
|       labels: {
 | |
|         nodes: [mockLabel1, mockLabel2],
 | |
|       },
 | |
|       __typename: 'Project',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mockGroupLabelsResponse = {
 | |
|   data: {
 | |
|     workspace: {
 | |
|       id: 'gid://gitlab/Group/1',
 | |
|       labels: {
 | |
|         nodes: [mockLabel1, mockLabel2],
 | |
|       },
 | |
|       __typename: 'Group',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const boardListsQueryResponse = {
 | |
|   data: {
 | |
|     group: {
 | |
|       id: 'gid://gitlab/Group/1',
 | |
|       board: {
 | |
|         id: 'gid://gitlab/Board/1',
 | |
|         hideBacklogList: false,
 | |
|         lists: {
 | |
|           nodes: mockLists,
 | |
|         },
 | |
|       },
 | |
|       __typename: 'Group',
 | |
|     },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const boardListQueryResponse = (issuesCount = 20) => ({
 | |
|   data: {
 | |
|     boardList: {
 | |
|       __typename: 'BoardList',
 | |
|       id: 'gid://gitlab/BoardList/5',
 | |
|       totalWeight: 5,
 | |
|       issuesCount,
 | |
|     },
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const epicBoardListQueryResponse = (totalWeight = 5) => ({
 | |
|   data: {
 | |
|     epicBoardList: {
 | |
|       __typename: 'EpicList',
 | |
|       id: 'gid://gitlab/Boards::EpicList/3',
 | |
|       metadata: {
 | |
|         totalWeight,
 | |
|       },
 | |
|     },
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const DEFAULT_COLOR = '#1068bf';
 |