summaryrefslogtreecommitdiff
path: root/spec/frontend
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-04-24 18:17:30 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2023-04-24 18:17:30 +0000
commit0bf82aa5cb3b1ed826dd5c0d46331e17aa60d9e9 (patch)
treeee5a760877cce0189cc8e765a912a06942f3e4de /spec/frontend
parentefbf661c4224d481c57d0346e26983a805e5ec93 (diff)
downloadgitlab-ce-0bf82aa5cb3b1ed826dd5c0d46331e17aa60d9e9.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/__snapshots__/total_time_spec.js.snap (renamed from spec/frontend/analytics/cycle_analytics/__snapshots__/total_time_spec.js.snap)0
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/base_spec.js (renamed from spec/frontend/analytics/cycle_analytics/base_spec.js)2
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/filter_bar_spec.js (renamed from spec/frontend/analytics/cycle_analytics/filter_bar_spec.js)0
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/formatted_stage_count_spec.js (renamed from spec/frontend/analytics/cycle_analytics/formatted_stage_count_spec.js)0
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/path_navigation_spec.js (renamed from spec/frontend/analytics/cycle_analytics/path_navigation_spec.js)2
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/stage_table_spec.js (renamed from spec/frontend/analytics/cycle_analytics/stage_table_spec.js)2
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/total_time_spec.js (renamed from spec/frontend/analytics/cycle_analytics/total_time_spec.js)0
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/value_stream_filters_spec.js (renamed from spec/frontend/analytics/cycle_analytics/value_stream_filters_spec.js)2
-rw-r--r--spec/frontend/analytics/cycle_analytics/components/value_stream_metrics_spec.js (renamed from spec/frontend/analytics/cycle_analytics/value_stream_metrics_spec.js)2
-rw-r--r--spec/frontend/analytics/product_analytics/components/activity_chart_spec.js (renamed from spec/frontend/analytics/components/activity_chart_spec.js)0
-rw-r--r--spec/frontend/ci/runner/components/runner_projects_spec.js6
-rw-r--r--spec/frontend/fixtures/jobs.rb5
-rw-r--r--spec/frontend/fixtures/prometheus_integration.rb1
-rw-r--r--spec/frontend/jobs/components/table/jobs_table_tabs_spec.js19
-rw-r--r--spec/frontend/jobs/mock_data.js2
-rw-r--r--spec/frontend/milestones/index_spec.js38
-rw-r--r--spec/frontend/pages/admin/jobs/components/table/admin_job_table_app_spec.js39
-rw-r--r--spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap1
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"