diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-04-24 18:17:30 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-04-24 18:17:30 +0000 |
commit | 0bf82aa5cb3b1ed826dd5c0d46331e17aa60d9e9 (patch) | |
tree | ee5a760877cce0189cc8e765a912a06942f3e4de /spec/frontend | |
parent | efbf661c4224d481c57d0346e26983a805e5ec93 (diff) | |
download | gitlab-ce-0bf82aa5cb3b1ed826dd5c0d46331e17aa60d9e9.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
18 files changed, 109 insertions, 12 deletions
diff --git a/spec/frontend/analytics/cycle_analytics/__snapshots__/total_time_spec.js.snap b/spec/frontend/analytics/cycle_analytics/components/__snapshots__/total_time_spec.js.snap index 92927ef16ec..92927ef16ec 100644 --- a/spec/frontend/analytics/cycle_analytics/__snapshots__/total_time_spec.js.snap +++ b/spec/frontend/analytics/cycle_analytics/components/__snapshots__/total_time_spec.js.snap diff --git a/spec/frontend/analytics/cycle_analytics/base_spec.js b/spec/frontend/analytics/cycle_analytics/components/base_spec.js index 1a1d22626ea..5efb823535e 100644 --- a/spec/frontend/analytics/cycle_analytics/base_spec.js +++ b/spec/frontend/analytics/cycle_analytics/components/base_spec.js @@ -19,7 +19,7 @@ import { currentGroup, stageCounts, initialPaginationState as pagination, -} from './mock_data'; +} from '../mock_data'; const selectedStageEvents = issueEvents.events; const noDataSvgPath = 'path/to/no/data'; diff --git a/spec/frontend/analytics/cycle_analytics/filter_bar_spec.js b/spec/frontend/analytics/cycle_analytics/components/filter_bar_spec.js index f1b3af39199..f1b3af39199 100644 --- a/spec/frontend/analytics/cycle_analytics/filter_bar_spec.js +++ b/spec/frontend/analytics/cycle_analytics/components/filter_bar_spec.js diff --git a/spec/frontend/analytics/cycle_analytics/formatted_stage_count_spec.js b/spec/frontend/analytics/cycle_analytics/components/formatted_stage_count_spec.js index 6dd7e2e6223..6dd7e2e6223 100644 --- a/spec/frontend/analytics/cycle_analytics/formatted_stage_count_spec.js +++ b/spec/frontend/analytics/cycle_analytics/components/formatted_stage_count_spec.js diff --git a/spec/frontend/analytics/cycle_analytics/path_navigation_spec.js b/spec/frontend/analytics/cycle_analytics/components/path_navigation_spec.js index 9a598ee0ad1..9084cec1c53 100644 --- a/spec/frontend/analytics/cycle_analytics/path_navigation_spec.js +++ b/spec/frontend/analytics/cycle_analytics/components/path_navigation_spec.js @@ -3,7 +3,7 @@ import { mount } from '@vue/test-utils'; import { mockTracking, unmockTracking } from 'helpers/tracking_helper'; import { extendedWrapper } from 'helpers/vue_test_utils_helper'; import Component from '~/analytics/cycle_analytics/components/path_navigation.vue'; -import { transformedProjectStagePathData, selectedStage } from './mock_data'; +import { transformedProjectStagePathData, selectedStage } from '../mock_data'; describe('Project PathNavigation', () => { let wrapper = null; diff --git a/spec/frontend/analytics/cycle_analytics/stage_table_spec.js b/spec/frontend/analytics/cycle_analytics/components/stage_table_spec.js index fbc63a80de8..e92cb6f73d6 100644 --- a/spec/frontend/analytics/cycle_analytics/stage_table_spec.js +++ b/spec/frontend/analytics/cycle_analytics/components/stage_table_spec.js @@ -5,7 +5,7 @@ import { mockTracking, unmockTracking } from 'helpers/tracking_helper'; import { extendedWrapper } from 'helpers/vue_test_utils_helper'; import StageTable from '~/analytics/cycle_analytics/components/stage_table.vue'; import { PAGINATION_SORT_FIELD_DURATION } from '~/analytics/cycle_analytics/constants'; -import { issueEvents, issueStage, reviewStage, reviewEvents } from './mock_data'; +import { issueEvents, issueStage, reviewStage, reviewEvents } from '../mock_data'; let wrapper = null; let trackingSpy = null; diff --git a/spec/frontend/analytics/cycle_analytics/total_time_spec.js b/spec/frontend/analytics/cycle_analytics/components/total_time_spec.js index 6597b6fa3d5..6597b6fa3d5 100644 --- a/spec/frontend/analytics/cycle_analytics/total_time_spec.js +++ b/spec/frontend/analytics/cycle_analytics/components/total_time_spec.js diff --git a/spec/frontend/analytics/cycle_analytics/value_stream_filters_spec.js b/spec/frontend/analytics/cycle_analytics/components/value_stream_filters_spec.js index c6915c9054c..e3bcb0ab557 100644 --- a/spec/frontend/analytics/cycle_analytics/value_stream_filters_spec.js +++ b/spec/frontend/analytics/cycle_analytics/components/value_stream_filters_spec.js @@ -8,7 +8,7 @@ import { createdBefore as endDate, currentGroup, selectedProjects, -} from './mock_data'; +} from '../mock_data'; const { path } = currentGroup; const groupPath = `groups/${path}`; diff --git a/spec/frontend/analytics/cycle_analytics/value_stream_metrics_spec.js b/spec/frontend/analytics/cycle_analytics/components/value_stream_metrics_spec.js index 6a64737bc80..c918d020c81 100644 --- a/spec/frontend/analytics/cycle_analytics/value_stream_metrics_spec.js +++ b/spec/frontend/analytics/cycle_analytics/components/value_stream_metrics_spec.js @@ -10,7 +10,7 @@ import { prepareTimeMetricsData } from '~/analytics/shared/utils'; import MetricTile from '~/analytics/shared/components/metric_tile.vue'; import ValueStreamsDashboardLink from '~/analytics/shared/components/value_streams_dashboard_link.vue'; import { createAlert } from '~/alert'; -import { group } from './mock_data'; +import { group } from '../mock_data'; jest.mock('~/alert'); diff --git a/spec/frontend/analytics/components/activity_chart_spec.js b/spec/frontend/analytics/product_analytics/components/activity_chart_spec.js index 4f8126aaacf..4f8126aaacf 100644 --- a/spec/frontend/analytics/components/activity_chart_spec.js +++ b/spec/frontend/analytics/product_analytics/components/activity_chart_spec.js diff --git a/spec/frontend/ci/runner/components/runner_projects_spec.js b/spec/frontend/ci/runner/components/runner_projects_spec.js index afdc54d8ebc..7d49874bfbc 100644 --- a/spec/frontend/ci/runner/components/runner_projects_spec.js +++ b/spec/frontend/ci/runner/components/runner_projects_spec.js @@ -67,6 +67,7 @@ describe('RunnerProjects', () => { expect(mockRunnerProjectsQuery).toHaveBeenCalledWith({ id: mockRunner.id, search: '', + sort: 'ID_ASC', first: RUNNER_DETAILS_PROJECTS_PAGE_SIZE, }); }); @@ -108,7 +109,6 @@ describe('RunnerProjects', () => { name, fullName: nameWithNamespace, avatarUrl, - isOwner: true, // first project is always owner }); }); @@ -124,6 +124,7 @@ describe('RunnerProjects', () => { expect(mockRunnerProjectsQuery).toHaveBeenLastCalledWith({ id: mockRunner.id, search: '', + sort: 'ID_ASC', first: RUNNER_DETAILS_PROJECTS_PAGE_SIZE, after: 'AFTER_CURSOR', }); @@ -138,6 +139,7 @@ describe('RunnerProjects', () => { expect(mockRunnerProjectsQuery).toHaveBeenLastCalledWith({ id: mockRunner.id, search: '', + sort: 'ID_ASC', last: RUNNER_DETAILS_PROJECTS_PAGE_SIZE, before: 'BEFORE_CURSOR', }); @@ -151,6 +153,7 @@ describe('RunnerProjects', () => { expect(mockRunnerProjectsQuery).toHaveBeenLastCalledWith({ id: mockRunner.id, search: 'my search', + sort: 'ID_ASC', first: RUNNER_DETAILS_PROJECTS_PAGE_SIZE, }); }); @@ -167,6 +170,7 @@ describe('RunnerProjects', () => { expect(mockRunnerProjectsQuery).toHaveBeenLastCalledWith({ id: mockRunner.id, search: 'my search', + sort: 'ID_ASC', first: RUNNER_DETAILS_PROJECTS_PAGE_SIZE, }); }); diff --git a/spec/frontend/fixtures/jobs.rb b/spec/frontend/fixtures/jobs.rb index 376c04cd629..043d6a9db29 100644 --- a/spec/frontend/fixtures/jobs.rb +++ b/spec/frontend/fixtures/jobs.rb @@ -92,6 +92,11 @@ RSpec.describe 'Jobs (JavaScript fixtures)' do it_behaves_like 'graphql queries', 'pages/admin/jobs/components/table/graphql/queries', 'get_all_jobs.query.graphql' do let(:user) { create(:admin) } end + + it_behaves_like 'graphql queries', 'pages/admin/jobs/components/table/graphql/queries', 'get_cancelable_jobs_count.query.graphql' do + let(:variables) { { statuses: %w[PENDING RUNNING] } } + let(:user) { create(:admin) } + end end describe 'get_jobs_count.query.graphql', type: :request do diff --git a/spec/frontend/fixtures/prometheus_integration.rb b/spec/frontend/fixtures/prometheus_integration.rb index 13130c00118..fcba8b596a8 100644 --- a/spec/frontend/fixtures/prometheus_integration.rb +++ b/spec/frontend/fixtures/prometheus_integration.rb @@ -14,6 +14,7 @@ RSpec.describe Projects::Settings::IntegrationsController, '(JavaScript fixtures before do sign_in(user) + stub_feature_flags(remove_monitor_metrics: false) end after do diff --git a/spec/frontend/jobs/components/table/jobs_table_tabs_spec.js b/spec/frontend/jobs/components/table/jobs_table_tabs_spec.js index 70bcac82a3f..d20a732508a 100644 --- a/spec/frontend/jobs/components/table/jobs_table_tabs_spec.js +++ b/spec/frontend/jobs/components/table/jobs_table_tabs_spec.js @@ -3,6 +3,7 @@ import { mount } from '@vue/test-utils'; import { trimText } from 'helpers/text_helper'; import { extendedWrapper } from 'helpers/vue_test_utils_helper'; import JobsTableTabs from '~/jobs/components/table/jobs_table_tabs.vue'; +import CancelJobs from '~/pages/admin/jobs/components/cancel_jobs.vue'; describe('Jobs Table Tabs', () => { let wrapper; @@ -12,6 +13,11 @@ describe('Jobs Table Tabs', () => { loading: false, }; + const adminProps = { + ...defaultProps, + showCancelAllJobsButton: true, + }; + const statuses = { success: 'SUCCESS', failed: 'FAILED', @@ -20,6 +26,7 @@ describe('Jobs Table Tabs', () => { const findAllTab = () => wrapper.findByTestId('jobs-all-tab'); const findFinishedTab = () => wrapper.findByTestId('jobs-finished-tab'); + const findCancelJobsButton = () => wrapper.findAllComponents(CancelJobs); const triggerTabChange = (index) => wrapper.findAllComponents(GlTab).at(index).vm.$emit('click'); @@ -59,4 +66,16 @@ describe('Jobs Table Tabs', () => { expect(wrapper.emitted()).toEqual({ fetchJobsByStatus: [[expectedScope]] }); }); + + it('does not displays cancel all jobs button', () => { + expect(findCancelJobsButton().exists()).toBe(false); + }); + + describe('admin mode', () => { + it('displays cancel all jobs button', () => { + createComponent(adminProps); + + expect(findCancelJobsButton().exists()).toBe(true); + }); + }); }); diff --git a/spec/frontend/jobs/mock_data.js b/spec/frontend/jobs/mock_data.js index fb1ded7b4ef..ed89221d062 100644 --- a/spec/frontend/jobs/mock_data.js +++ b/spec/frontend/jobs/mock_data.js @@ -5,6 +5,7 @@ import mockAllJobsPaginated from 'test_fixtures/graphql/jobs/get_all_jobs.query. import mockJobs from 'test_fixtures/graphql/jobs/get_jobs.query.graphql.json'; import mockAllJobs from 'test_fixtures/graphql/jobs/get_all_jobs.query.graphql.json'; import mockJobsAsGuest from 'test_fixtures/graphql/jobs/get_jobs.query.graphql.as_guest.json'; +import mockCancelableJobsCount from 'test_fixtures/graphql/jobs/get_cancelable_jobs_count.query.graphql.json'; import { TEST_HOST } from 'spec/test_constants'; import { TOKEN_TYPE_STATUS } from '~/vue_shared/components/filtered_search_bar/constants'; @@ -19,6 +20,7 @@ export const mockJobsNodes = mockJobs.data.project.jobs.nodes; export const mockAllJobsNodes = mockAllJobs.data.jobs.nodes; export const mockJobsNodesAsGuest = mockJobsAsGuest.data.project.jobs.nodes; export const mockJobsCountResponse = mockJobsCount; +export const mockCancelableJobsCountResponse = mockCancelableJobsCount; export const stages = [ { diff --git a/spec/frontend/milestones/index_spec.js b/spec/frontend/milestones/index_spec.js new file mode 100644 index 00000000000..477217fc10f --- /dev/null +++ b/spec/frontend/milestones/index_spec.js @@ -0,0 +1,38 @@ +import { setHTMLFixture, resetHTMLFixture } from 'helpers/fixtures'; +import { initShow, MILESTONE_DESCRIPTION_ELEMENT } from '~/milestones/index'; +import { renderGFM } from '~/behaviors/markdown/render_gfm'; + +jest.mock('~/behaviors/markdown/render_gfm'); +jest.mock('~/milestones/milestone'); +jest.mock('~/right_sidebar'); +jest.mock('~/sidebar/mount_milestone_sidebar'); + +describe('#initShow', () => { + beforeEach(() => { + setHTMLFixture(` + <div class="detail-page-description milestone-detail"> + <div class="description"> + <div class="markdown-code-block"> + <pre class="js-render-mermaid"> + graph TD; + A-- > B; + A-- > C; + B-- > D; + C-- > D; + </pre> + </div> + </div> + </div> + `); + }); + + afterEach(() => { + resetHTMLFixture(); + }); + + it('calls `renderGFM` to ensure that all gitlab-flavoured markdown is rendered on the milestone details page', () => { + initShow(); + + expect(renderGFM).toHaveBeenCalledWith(document.querySelector(MILESTONE_DESCRIPTION_ELEMENT)); + }); +}); diff --git a/spec/frontend/pages/admin/jobs/components/table/admin_job_table_app_spec.js b/spec/frontend/pages/admin/jobs/components/table/admin_job_table_app_spec.js index 686c818f45a..1341949439b 100644 --- a/spec/frontend/pages/admin/jobs/components/table/admin_job_table_app_spec.js +++ b/spec/frontend/pages/admin/jobs/components/table/admin_job_table_app_spec.js @@ -4,15 +4,18 @@ import Vue from 'vue'; import VueApollo from 'vue-apollo'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; -import JobsTable from '~/jobs/components/table/jobs_table.vue'; import JobsTableTabs from '~/jobs/components/table/jobs_table_tabs.vue'; -import getJobsQuery from '~/pages/admin/jobs/components/table/graphql/queries/get_all_jobs.query.graphql'; -import AdminJobsTableApp from '~/pages/admin/jobs/components/table/admin_jobs_table_app.vue'; import JobsSkeletonLoader from '~/pages/admin/jobs/components/jobs_skeleton_loader.vue'; +import getAllJobsQuery from '~/pages/admin/jobs/components/table/graphql/queries/get_all_jobs.query.graphql'; +import getCancelableJobsQuery from '~/pages/admin/jobs/components/table/graphql/queries/get_cancelable_jobs_count.query.graphql'; +import AdminJobsTableApp from '~/pages/admin/jobs/components/table/admin_jobs_table_app.vue'; +import CancelJobs from '~/pages/admin/jobs/components/cancel_jobs.vue'; +import JobsTable from '~/jobs/components/table/jobs_table.vue'; import { mockAllJobsResponsePaginated, mockJobsResponseEmpty, + mockCancelableJobsCountResponse, statuses, } from '../../../../../jobs/mock_data'; @@ -24,6 +27,7 @@ describe('Job table app', () => { const successHandler = jest.fn().mockResolvedValue(mockAllJobsResponsePaginated); const emptyHandler = jest.fn().mockResolvedValue(mockJobsResponseEmpty); const failedHandler = jest.fn().mockRejectedValue(new Error('GraphQL error')); + const cancelHandler = jest.fn().mockResolvedValue(mockCancelableJobsCountResponse); const findSkeletonLoader = () => wrapper.findComponent(JobsSkeletonLoader); const findLoadingSpinner = () => wrapper.findComponent(GlLoadingIcon); @@ -31,15 +35,20 @@ describe('Job table app', () => { const findEmptyState = () => wrapper.findComponent(GlEmptyState); const findAlert = () => wrapper.findComponent(GlAlert); const findTabs = () => wrapper.findComponent(JobsTableTabs); + const findCancelJobsButton = () => wrapper.findComponent(CancelJobs); - const createMockApolloProvider = (handler) => { - const requestHandlers = [[getJobsQuery, handler]]; + const createMockApolloProvider = (handler, cancelableHandler) => { + const requestHandlers = [ + [getAllJobsQuery, handler], + [getCancelableJobsQuery, cancelableHandler], + ]; return createMockApollo(requestHandlers); }; const createComponent = ({ handler = successHandler, + cancelableHandler = cancelHandler, mountFn = shallowMount, data = {}, } = {}) => { @@ -52,7 +61,7 @@ describe('Job table app', () => { provide: { jobStatuses: statuses, }, - apolloProvider: createMockApolloProvider(handler), + apolloProvider: createMockApolloProvider(handler, cancelableHandler), }); }; @@ -129,4 +138,22 @@ describe('Job table app', () => { expect(findTable().exists()).toBe(false); }); }); + + describe('cancel jobs button', () => { + it('should display cancel all jobs button', async () => { + createComponent({ cancelableHandler: cancelHandler, mountFn: mount }); + + await waitForPromises(); + + expect(findCancelJobsButton().exists()).toBe(true); + }); + + it('should not display cancel all jobs button', async () => { + createComponent(); + + await waitForPromises(); + + expect(findCancelJobsButton().exists()).toBe(false); + }); + }); }); diff --git a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap index 6fe60f3c2e6..a0b545add27 100644 --- a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap +++ b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap @@ -8,6 +8,7 @@ exports[`Repository last commit component renders commit widget 1`] = ` class="gl-my-2 gl-mr-4" imgalt="" imgcssclasses="" + imgcsswrapperclasses="" imgsize="32" imgsrc="https://test.com" linkhref="/test" |