diff options
Diffstat (limited to 'spec/frontend/pipelines/components')
16 files changed, 50 insertions, 235 deletions
diff --git a/spec/frontend/pipelines/components/dag/dag_annotations_spec.js b/spec/frontend/pipelines/components/dag/dag_annotations_spec.js index 28a08b6da0f..124f02bcec7 100644 --- a/spec/frontend/pipelines/components/dag/dag_annotations_spec.js +++ b/spec/frontend/pipelines/components/dag/dag_annotations_spec.js @@ -14,10 +14,6 @@ describe('The DAG annotations', () => { const getToggleButton = () => wrapper.findComponent(GlButton); const createComponent = (propsData = {}, method = shallowMount) => { - if (wrapper?.destroy) { - wrapper.destroy(); - } - wrapper = method(DagAnnotations, { propsData, data() { @@ -28,11 +24,6 @@ describe('The DAG annotations', () => { }); }; - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - describe('when there is one annotation', () => { const currentNote = singleNote['dag-link103']; diff --git a/spec/frontend/pipelines/components/dag/dag_graph_spec.js b/spec/frontend/pipelines/components/dag/dag_graph_spec.js index 4619548d1bb..6b46be3dd49 100644 --- a/spec/frontend/pipelines/components/dag/dag_graph_spec.js +++ b/spec/frontend/pipelines/components/dag/dag_graph_spec.js @@ -36,11 +36,6 @@ describe('The DAG graph', () => { createComponent({ graphData: parsedData }); }); - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - describe('in the basic case', () => { beforeEach(() => { /* diff --git a/spec/frontend/pipelines/components/dag/dag_spec.js b/spec/frontend/pipelines/components/dag/dag_spec.js index b0c26976c85..53719065611 100644 --- a/spec/frontend/pipelines/components/dag/dag_spec.js +++ b/spec/frontend/pipelines/components/dag/dag_spec.js @@ -30,10 +30,6 @@ describe('Pipeline DAG graph wrapper', () => { provideOverride = {}, method = shallowMount, } = {}) => { - if (wrapper?.destroy) { - wrapper.destroy(); - } - wrapper = method(Dag, { provide: { pipelineProjectPath: 'root/abc-dag', @@ -51,11 +47,6 @@ describe('Pipeline DAG graph wrapper', () => { }); }; - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - describe('when a query argument is undefined', () => { beforeEach(() => { createComponent({ @@ -64,7 +55,7 @@ describe('Pipeline DAG graph wrapper', () => { }); }); - it('does not render the graph', async () => { + it('does not render the graph', () => { expect(getGraph().exists()).toBe(false); }); @@ -75,7 +66,7 @@ describe('Pipeline DAG graph wrapper', () => { describe('when all query variables are defined', () => { describe('but the parse fails', () => { - beforeEach(async () => { + beforeEach(() => { createComponent({ graphData: unparseableGraph, }); @@ -93,7 +84,7 @@ describe('Pipeline DAG graph wrapper', () => { }); describe('parse succeeds', () => { - beforeEach(async () => { + beforeEach(() => { createComponent({ method: mount }); }); @@ -107,7 +98,7 @@ describe('Pipeline DAG graph wrapper', () => { }); describe('parse succeeds, but the resulting graph is too small', () => { - beforeEach(async () => { + beforeEach(() => { createComponent({ graphData: tooSmallGraph, }); @@ -125,7 +116,7 @@ describe('Pipeline DAG graph wrapper', () => { }); describe('the returned data is empty', () => { - beforeEach(async () => { + beforeEach(() => { createComponent({ method: mount, graphData: graphWithoutDependencies, @@ -144,7 +135,7 @@ describe('Pipeline DAG graph wrapper', () => { }); describe('annotations', () => { - beforeEach(async () => { + beforeEach(() => { createComponent(); }); diff --git a/spec/frontend/pipelines/components/jobs/failed_jobs_app_spec.js b/spec/frontend/pipelines/components/jobs/failed_jobs_app_spec.js index d1da7cb3acf..6a2453704db 100644 --- a/spec/frontend/pipelines/components/jobs/failed_jobs_app_spec.js +++ b/spec/frontend/pipelines/components/jobs/failed_jobs_app_spec.js @@ -4,15 +4,15 @@ import Vue from 'vue'; import VueApollo from 'vue-apollo'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; -import { createAlert } from '~/flash'; +import { createAlert } from '~/alert'; import FailedJobsApp from '~/pipelines/components/jobs/failed_jobs_app.vue'; import FailedJobsTable from '~/pipelines/components/jobs/failed_jobs_table.vue'; import GetFailedJobsQuery from '~/pipelines/graphql/queries/get_failed_jobs.query.graphql'; -import { mockFailedJobsQueryResponse, mockFailedJobsSummaryData } from '../../mock_data'; +import { mockFailedJobsQueryResponse } from '../../mock_data'; Vue.use(VueApollo); -jest.mock('~/flash'); +jest.mock('~/alert'); describe('Failed Jobs App', () => { let wrapper; @@ -27,15 +27,12 @@ describe('Failed Jobs App', () => { return createMockApollo(requestHandlers); }; - const createComponent = (resolver, failedJobsSummaryData = mockFailedJobsSummaryData) => { + const createComponent = (resolver) => { wrapper = shallowMount(FailedJobsApp, { provide: { fullPath: 'root/ci-project', pipelineIid: 1, }, - propsData: { - failedJobsSummary: failedJobsSummaryData, - }, apolloProvider: createMockApolloProvider(resolver), }); }; @@ -44,10 +41,6 @@ describe('Failed Jobs App', () => { resolverSpy = jest.fn().mockResolvedValue(mockFailedJobsQueryResponse); }); - afterEach(() => { - wrapper.destroy(); - }); - describe('loading spinner', () => { it('displays loading spinner when fetching failed jobs', () => { createComponent(resolverSpy); diff --git a/spec/frontend/pipelines/components/jobs/failed_jobs_table_spec.js b/spec/frontend/pipelines/components/jobs/failed_jobs_table_spec.js index 0df15afd70d..d5307b87a11 100644 --- a/spec/frontend/pipelines/components/jobs/failed_jobs_table_spec.js +++ b/spec/frontend/pipelines/components/jobs/failed_jobs_table_spec.js @@ -4,18 +4,18 @@ import VueApollo from 'vue-apollo'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; import { mountExtended } from 'helpers/vue_test_utils_helper'; -import { createAlert } from '~/flash'; -import { redirectTo } from '~/lib/utils/url_utility'; +import { createAlert } from '~/alert'; +import { redirectTo } from '~/lib/utils/url_utility'; // eslint-disable-line import/no-deprecated import FailedJobsTable from '~/pipelines/components/jobs/failed_jobs_table.vue'; import RetryFailedJobMutation from '~/pipelines/graphql/mutations/retry_failed_job.mutation.graphql'; import { successRetryMutationResponse, failedRetryMutationResponse, - mockPreparedFailedJobsData, - mockPreparedFailedJobsDataNoPermission, + mockFailedJobsData, + mockFailedJobsDataNoPermission, } from '../../mock_data'; -jest.mock('~/flash'); +jest.mock('~/alert'); jest.mock('~/lib/utils/url_utility'); Vue.use(VueApollo); @@ -30,13 +30,15 @@ describe('Failed Jobs Table', () => { const findRetryButton = () => wrapper.findComponent(GlButton); const findJobLink = () => wrapper.findComponent(GlLink); const findJobLog = () => wrapper.findByTestId('job-log'); + const findSummary = (index) => wrapper.findAllByTestId('job-trace-summary').at(index); + const findFirstFailureMessage = () => wrapper.findAllByTestId('job-failure-message').at(0); const createMockApolloProvider = (resolver) => { const requestHandlers = [[RetryFailedJobMutation, resolver]]; return createMockApollo(requestHandlers); }; - const createComponent = (resolver, failedJobsData = mockPreparedFailedJobsData) => { + const createComponent = (resolver, failedJobsData = mockFailedJobsData) => { wrapper = mountExtended(FailedJobsTable, { propsData: { failedJobs: failedJobsData, @@ -45,23 +47,37 @@ describe('Failed Jobs Table', () => { }); }; - afterEach(() => { - wrapper.destroy(); - }); - it('displays the failed jobs table', () => { createComponent(); expect(findJobsTable().exists()).toBe(true); }); + it('displays failed job summary', () => { + createComponent(); + + expect(findSummary(0).text()).toBe('Html Summary'); + }); + + it('displays no job log when no trace', () => { + createComponent(); + + expect(findSummary(1).text()).toBe('No job log'); + }); + + it('displays failure reason', () => { + createComponent(); + + expect(findFirstFailureMessage().text()).toBe('Job failed'); + }); + it('calls the retry failed job mutation correctly', () => { createComponent(successRetryMutationHandler); findRetryButton().trigger('click'); expect(successRetryMutationHandler).toHaveBeenCalledWith({ - id: mockPreparedFailedJobsData[0].id, + id: mockFailedJobsData[0].id, }); }); @@ -78,7 +94,7 @@ describe('Failed Jobs Table', () => { await waitForPromises(); - expect(redirectTo).toHaveBeenCalledWith(job.detailedStatus.detailsPath); + expect(redirectTo).toHaveBeenCalledWith(job.detailedStatus.detailsPath); // eslint-disable-line import/no-deprecated }); it('shows error message if the retry failed job mutation fails', async () => { @@ -94,7 +110,7 @@ describe('Failed Jobs Table', () => { }); it('hides the job log and retry button if a user does not have permission', () => { - createComponent([[]], mockPreparedFailedJobsDataNoPermission); + createComponent([[]], mockFailedJobsDataNoPermission); expect(findJobLog().exists()).toBe(false); expect(findRetryButton().exists()).toBe(false); @@ -110,8 +126,6 @@ describe('Failed Jobs Table', () => { it('job name links to the correct job', () => { createComponent(); - expect(findJobLink().attributes('href')).toBe( - mockPreparedFailedJobsData[0].detailedStatus.detailsPath, - ); + expect(findJobLink().attributes('href')).toBe(mockFailedJobsData[0].detailedStatus.detailsPath); }); }); diff --git a/spec/frontend/pipelines/components/jobs/jobs_app_spec.js b/spec/frontend/pipelines/components/jobs/jobs_app_spec.js index 9bc14266593..39475788fe2 100644 --- a/spec/frontend/pipelines/components/jobs/jobs_app_spec.js +++ b/spec/frontend/pipelines/components/jobs/jobs_app_spec.js @@ -4,7 +4,7 @@ import Vue from 'vue'; import VueApollo from 'vue-apollo'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; -import { createAlert } from '~/flash'; +import { createAlert } from '~/alert'; import JobsApp from '~/pipelines/components/jobs/jobs_app.vue'; import JobsTable from '~/jobs/components/table/jobs_table.vue'; import getPipelineJobsQuery from '~/pipelines/graphql/queries/get_pipeline_jobs.query.graphql'; @@ -12,7 +12,7 @@ import { mockPipelineJobsQueryResponse } from '../../mock_data'; Vue.use(VueApollo); -jest.mock('~/flash'); +jest.mock('~/alert'); describe('Jobs app', () => { let wrapper; @@ -34,7 +34,7 @@ describe('Jobs app', () => { const createComponent = (resolver) => { wrapper = shallowMount(JobsApp, { provide: { - fullPath: 'root/ci-project', + projectPath: 'root/ci-project', pipelineIid: 1, }, apolloProvider: createMockApolloProvider(resolver), @@ -45,10 +45,6 @@ describe('Jobs app', () => { resolverSpy = jest.fn().mockResolvedValue(mockPipelineJobsQueryResponse); }); - afterEach(() => { - wrapper.destroy(); - }); - describe('loading spinner', () => { const setup = async () => { createComponent(resolverSpy); diff --git a/spec/frontend/pipelines/components/jobs/utils_spec.js b/spec/frontend/pipelines/components/jobs/utils_spec.js deleted file mode 100644 index 720446cfda3..00000000000 --- a/spec/frontend/pipelines/components/jobs/utils_spec.js +++ /dev/null @@ -1,14 +0,0 @@ -import { prepareFailedJobs } from '~/pipelines/components/jobs/utils'; -import { - mockFailedJobsData, - mockFailedJobsSummaryData, - mockPreparedFailedJobsData, -} from '../../mock_data'; - -describe('Utils', () => { - it('prepares failed jobs data correctly', () => { - expect(prepareFailedJobs(mockFailedJobsData, mockFailedJobsSummaryData)).toEqual( - mockPreparedFailedJobsData, - ); - }); -}); diff --git a/spec/frontend/pipelines/components/pipeline_mini_graph/linked_pipelines_mini_list_spec.js b/spec/frontend/pipelines/components/pipeline_mini_graph/linked_pipelines_mini_list_spec.js index 5ea57c51e70..a4ecb9041c9 100644 --- a/spec/frontend/pipelines/components/pipeline_mini_graph/linked_pipelines_mini_list_spec.js +++ b/spec/frontend/pipelines/components/pipeline_mini_graph/linked_pipelines_mini_list_spec.js @@ -19,7 +19,7 @@ describe('Linked pipeline mini list', () => { const createComponent = (props = {}) => { wrapper = mount(LinkedPipelinesMiniList, { directives: { - GlTooltip: createMockDirective(), + GlTooltip: createMockDirective('gl-tooltip'), }, propsData: { ...props, @@ -34,11 +34,6 @@ describe('Linked pipeline mini list', () => { }); }); - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - it('should render one linked pipeline item', () => { expect(findLinkedPipelineMiniItem().exists()).toBe(true); }); @@ -102,11 +97,6 @@ describe('Linked pipeline mini list', () => { }); }); - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - it('should render three linked pipeline items', () => { expect(findLinkedPipelineMiniItems().exists()).toBe(true); expect(findLinkedPipelineMiniItems().length).toBe(3); diff --git a/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_mini_graph_spec.js b/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_mini_graph_spec.js index 036b82530d5..e7415a6c596 100644 --- a/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_mini_graph_spec.js +++ b/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_mini_graph_spec.js @@ -33,11 +33,6 @@ describe('Pipeline Mini Graph', () => { createComponent(); }); - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - it('should render the pipeline stages', () => { expect(findPipelineStages().exists()).toBe(true); }); @@ -71,11 +66,6 @@ describe('Pipeline Mini Graph', () => { }); }); - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - it('should have the correct props', () => { expect(findPipelineMiniGraph().props()).toMatchObject({ downstreamPipelines: [], @@ -118,11 +108,6 @@ describe('Pipeline Mini Graph', () => { }); }); - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - it('should render the downstream linked pipelines mini list only', () => { expect(findLinkedPipelineDownstream().exists()).toBe(true); expect(findLinkedPipelineUpstream().exists()).toBe(false); diff --git a/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_stage_spec.js b/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_stage_spec.js index ab2056b4035..21d92fec9bf 100644 --- a/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_stage_spec.js +++ b/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_stage_spec.js @@ -45,11 +45,10 @@ describe('Pipelines stage component', () => { }); afterEach(() => { - wrapper.destroy(); - wrapper = null; - eventHub.$emit.mockRestore(); mock.restore(); + // eslint-disable-next-line @gitlab/vtu-no-explicit-wrapper-destroy + wrapper.destroy(); }); const findCiActionBtn = () => wrapper.find('.js-ci-action'); @@ -130,7 +129,7 @@ describe('Pipelines stage component', () => { await axios.waitForAll(); }); - it('renders the received data and emits the correct events', async () => { + it('renders the received data and emits the correct events', () => { expect(findDropdownMenu().text()).toContain(stageReply.latest_statuses[0].name); expect(findDropdownMenuTitle().text()).toContain(stageReply.name); expect(eventHub.$emit).toHaveBeenCalledWith('clickedDropdown'); diff --git a/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_stages_spec.js b/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_stages_spec.js index c123f53886e..73e810bde99 100644 --- a/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_stages_spec.js +++ b/spec/frontend/pipelines/components/pipeline_mini_graph/pipeline_stages_spec.js @@ -60,9 +60,4 @@ describe('Pipeline Stages', () => { expect(findPipelineStagesAt(0).props('isMergeTrain')).toBe(true); expect(findPipelineStagesAt(1).props('isMergeTrain')).toBe(true); }); - - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); }); diff --git a/spec/frontend/pipelines/components/pipeline_tabs_spec.js b/spec/frontend/pipelines/components/pipeline_tabs_spec.js index c2cb95d4320..fde13128662 100644 --- a/spec/frontend/pipelines/components/pipeline_tabs_spec.js +++ b/spec/frontend/pipelines/components/pipeline_tabs_spec.js @@ -19,7 +19,6 @@ describe('The Pipeline Tabs', () => { const defaultProvide = { defaultTabValue: '', failedJobsCount: 1, - failedJobsSummary: [], totalJobCount: 10, testsCount: 123, }; @@ -39,10 +38,6 @@ describe('The Pipeline Tabs', () => { ); }; - afterEach(() => { - wrapper.destroy(); - }); - describe('Tabs', () => { it.each` tabName | tabComponent diff --git a/spec/frontend/pipelines/components/pipelines_filtered_search_spec.js b/spec/frontend/pipelines/components/pipelines_filtered_search_spec.js index ba7262353f0..51a4487a3ef 100644 --- a/spec/frontend/pipelines/components/pipelines_filtered_search_spec.js +++ b/spec/frontend/pipelines/components/pipelines_filtered_search_spec.js @@ -51,8 +51,6 @@ describe('Pipelines filtered search', () => { afterEach(() => { mock.restore(); - wrapper.destroy(); - wrapper = null; }); it('displays UI elements', () => { diff --git a/spec/frontend/pipelines/components/pipelines_list/empty_state/ci_templates_spec.js b/spec/frontend/pipelines/components/pipelines_list/empty_state/ci_templates_spec.js index 6531a15ab8e..b560eea4882 100644 --- a/spec/frontend/pipelines/components/pipelines_list/empty_state/ci_templates_spec.js +++ b/spec/frontend/pipelines/components/pipelines_list/empty_state/ci_templates_spec.js @@ -29,11 +29,6 @@ describe('CI Templates', () => { const findTemplateName = () => wrapper.findByTestId('template-name'); const findTemplateLogo = () => wrapper.findByTestId('template-logo'); - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - describe('renders template list', () => { beforeEach(() => { createWrapper(); diff --git a/spec/frontend/pipelines/components/pipelines_list/empty_state/ios_templates_spec.js b/spec/frontend/pipelines/components/pipelines_list/empty_state/ios_templates_spec.js index 0c2938921d6..700be076e0c 100644 --- a/spec/frontend/pipelines/components/pipelines_list/empty_state/ios_templates_spec.js +++ b/spec/frontend/pipelines/components/pipelines_list/empty_state/ios_templates_spec.js @@ -37,11 +37,6 @@ describe('iOS Templates', () => { const findSetupRunnerLink = () => wrapper.findByText('Set up a runner'); const configurePipelineLink = () => wrapper.findByTestId('configure-pipeline-link'); - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - describe('when ios runners are not available', () => { beforeEach(() => { wrapper = createWrapper({ iosRunnersAvailable: false }); diff --git a/spec/frontend/pipelines/components/pipelines_list/empty_state/pipelines_ci_templates_spec.js b/spec/frontend/pipelines/components/pipelines_list/empty_state/pipelines_ci_templates_spec.js index f255e0d857f..4bf4257f462 100644 --- a/spec/frontend/pipelines/components/pipelines_list/empty_state/pipelines_ci_templates_spec.js +++ b/spec/frontend/pipelines/components/pipelines_list/empty_state/pipelines_ci_templates_spec.js @@ -1,24 +1,10 @@ import '~/commons'; -import { GlButton, GlSprintf } from '@gitlab/ui'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import { mockTracking, unmockTracking } from 'helpers/tracking_helper'; -import { stubExperiments } from 'helpers/experimentation_helper'; -import GitlabExperiment from '~/experimentation/components/gitlab_experiment.vue'; -import ExperimentTracking from '~/experimentation/experiment_tracking'; import PipelinesCiTemplates from '~/pipelines/components/pipelines_list/empty_state/pipelines_ci_templates.vue'; import CiTemplates from '~/pipelines/components/pipelines_list/empty_state/ci_templates.vue'; -import { - RUNNERS_AVAILABILITY_SECTION_EXPERIMENT_NAME, - RUNNERS_SETTINGS_LINK_CLICKED_EVENT, - RUNNERS_DOCUMENTATION_LINK_CLICKED_EVENT, - RUNNERS_SETTINGS_BUTTON_CLICKED_EVENT, - I18N, -} from '~/ci/pipeline_editor/constants'; const pipelineEditorPath = '/-/ci/editor'; -const ciRunnerSettingsPath = '/-/settings/ci_cd'; - -jest.mock('~/experimentation/experiment_tracking'); describe('Pipelines CI Templates', () => { let wrapper; @@ -28,8 +14,6 @@ describe('Pipelines CI Templates', () => { return shallowMountExtended(PipelinesCiTemplates, { provide: { pipelineEditorPath, - ciRunnerSettingsPath, - anyRunnersAvailable: true, ...propsData, }, stubs, @@ -38,24 +22,17 @@ describe('Pipelines CI Templates', () => { const findTestTemplateLink = () => wrapper.findByTestId('test-template-link'); const findCiTemplates = () => wrapper.findComponent(CiTemplates); - const findSettingsLink = () => wrapper.findByTestId('settings-link'); - const findDocumentationLink = () => wrapper.findByTestId('documentation-link'); - const findSettingsButton = () => wrapper.findByTestId('settings-button'); - - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - describe('renders test template', () => { + describe('templates', () => { beforeEach(() => { wrapper = createWrapper(); }); - it('links to the getting started template', () => { + it('renders test template and Ci templates', () => { expect(findTestTemplateLink().attributes('href')).toBe( pipelineEditorPath.concat('?template=Getting-Started'), ); + expect(findCiTemplates().exists()).toBe(true); }); }); @@ -78,84 +55,4 @@ describe('Pipelines CI Templates', () => { }); }); }); - - describe('when the runners_availability_section experiment is active', () => { - beforeEach(() => { - stubExperiments({ runners_availability_section: 'candidate' }); - }); - - describe('when runners are available', () => { - beforeEach(() => { - wrapper = createWrapper({ anyRunnersAvailable: true }, { GitlabExperiment, GlSprintf }); - }); - - it('show the runners available section', () => { - expect(wrapper.text()).toContain(I18N.runners.title); - }); - - it('tracks an event when clicking the settings link', () => { - findSettingsLink().vm.$emit('click'); - - expect(ExperimentTracking).toHaveBeenCalledWith( - RUNNERS_AVAILABILITY_SECTION_EXPERIMENT_NAME, - ); - expect(ExperimentTracking.prototype.event).toHaveBeenCalledWith( - RUNNERS_SETTINGS_LINK_CLICKED_EVENT, - ); - }); - - it('tracks an event when clicking the documentation link', () => { - findDocumentationLink().vm.$emit('click'); - - expect(ExperimentTracking).toHaveBeenCalledWith( - RUNNERS_AVAILABILITY_SECTION_EXPERIMENT_NAME, - ); - expect(ExperimentTracking.prototype.event).toHaveBeenCalledWith( - RUNNERS_DOCUMENTATION_LINK_CLICKED_EVENT, - ); - }); - }); - - describe('when runners are not available', () => { - beforeEach(() => { - wrapper = createWrapper({ anyRunnersAvailable: false }, { GitlabExperiment, GlButton }); - }); - - it('show the no runners available section', () => { - expect(wrapper.text()).toContain(I18N.noRunners.title); - }); - - it('tracks an event when clicking the settings button', () => { - findSettingsButton().trigger('click'); - - expect(ExperimentTracking).toHaveBeenCalledWith( - RUNNERS_AVAILABILITY_SECTION_EXPERIMENT_NAME, - ); - expect(ExperimentTracking.prototype.event).toHaveBeenCalledWith( - RUNNERS_SETTINGS_BUTTON_CLICKED_EVENT, - ); - }); - }); - }); - - describe.each` - experimentVariant | anyRunnersAvailable | templatesRendered - ${'control'} | ${true} | ${true} - ${'control'} | ${false} | ${true} - ${'candidate'} | ${true} | ${true} - ${'candidate'} | ${false} | ${false} - `( - 'when the runners_availability_section experiment variant is $experimentVariant and runners are available: $anyRunnersAvailable', - ({ experimentVariant, anyRunnersAvailable, templatesRendered }) => { - beforeEach(() => { - stubExperiments({ runners_availability_section: experimentVariant }); - wrapper = createWrapper({ anyRunnersAvailable }); - }); - - it(`renders the templates: ${templatesRendered}`, () => { - expect(findTestTemplateLink().exists()).toBe(templatesRendered); - expect(findCiTemplates().exists()).toBe(templatesRendered); - }); - }, - ); }); |