diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-09 03:13:20 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-09 03:13:20 +0300 |
commit | 3f8e9ba69efda3ef8f3989c5c4d56e422367200a (patch) | |
tree | 2d9595bc11eac94c7ff11aa1c2497dd269f81054 /spec | |
parent | 5b5ff31460fc5572abbd8b7ee35f303a6f1df196 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
9 files changed, 80 insertions, 91 deletions
diff --git a/spec/controllers/import/bulk_imports_controller_spec.rb b/spec/controllers/import/bulk_imports_controller_spec.rb index 9b41089f4b8..54192f010ed 100644 --- a/spec/controllers/import/bulk_imports_controller_spec.rb +++ b/spec/controllers/import/bulk_imports_controller_spec.rb @@ -303,27 +303,11 @@ RSpec.describe Import::BulkImportsController, feature_category: :importers do describe 'GET details' do subject(:request) { get :details } - context 'when bulk_import_details_page feature flag is enabled' do - before do - stub_feature_flags(bulk_import_details_page: true) - request - end - - it 'responds with a 200 and shows the template', :aggregate_failures do - expect(response).to have_gitlab_http_status(:ok) - expect(response).to render_template(:details) - end - end + it 'responds with a 200 and shows the template', :aggregate_failures do + request - context 'when bulk_import_details_page feature flag is disabled' do - before do - stub_feature_flags(bulk_import_details_page: false) - request - end - - it 'responds with a 404' do - expect(response).to have_gitlab_http_status(:not_found) - end + expect(response).to have_gitlab_http_status(:ok) + expect(response).to render_template(:details) end end diff --git a/spec/controllers/projects/packages/infrastructure_registry_controller_spec.rb b/spec/controllers/projects/packages/infrastructure_registry_controller_spec.rb index fc741d0f3f6..292c4017d8e 100644 --- a/spec/controllers/projects/packages/infrastructure_registry_controller_spec.rb +++ b/spec/controllers/projects/packages/infrastructure_registry_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Projects::Packages::InfrastructureRegistryController do +RSpec.describe Projects::Packages::InfrastructureRegistryController, feature_category: :package_registry do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :private) } diff --git a/spec/controllers/projects/packages/packages_controller_spec.rb b/spec/controllers/projects/packages/packages_controller_spec.rb index da9cae47c62..8570af075ad 100644 --- a/spec/controllers/projects/packages/packages_controller_spec.rb +++ b/spec/controllers/projects/packages/packages_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Projects::Packages::PackagesController do +RSpec.describe Projects::Packages::PackagesController, feature_category: :package_registry do let_it_be(:project) { create(:project, :public) } let(:page) { :index } diff --git a/spec/frontend/import_entities/import_groups/components/import_status_spec.js b/spec/frontend/import_entities/import_groups/components/import_status_spec.js index 8d055d45dd8..e0cabb86dcf 100644 --- a/spec/frontend/import_entities/import_groups/components/import_status_spec.js +++ b/spec/frontend/import_entities/import_groups/components/import_status_spec.js @@ -88,7 +88,6 @@ describe('Group import status component', () => { id: 2, entityId: 11, hasFailures: true, - showDetailsLink: true, status: STATUSES.FINISHED, }, }); diff --git a/spec/frontend/pages/import/bulk_imports/history/components/bulk_imports_history_app_spec.js b/spec/frontend/pages/import/bulk_imports/history/components/bulk_imports_history_app_spec.js index 3db77469d6b..1c9d8f17210 100644 --- a/spec/frontend/pages/import/bulk_imports/history/components/bulk_imports_history_app_spec.js +++ b/spec/frontend/pages/import/bulk_imports/history/components/bulk_imports_history_app_spec.js @@ -1,13 +1,13 @@ import { GlEmptyState, GlLoadingIcon, GlTableLite } from '@gitlab/ui'; import { mount, shallowMount } from '@vue/test-utils'; import MockAdapter from 'axios-mock-adapter'; -import { extendedWrapper } from 'helpers/vue_test_utils_helper'; import axios from '~/lib/utils/axios_utils'; import waitForPromises from 'helpers/wait_for_promises'; import { HTTP_STATUS_OK } from '~/lib/utils/http_status'; import { getParameterValues } from '~/lib/utils/url_utility'; import BulkImportsHistoryApp from '~/pages/import/bulk_imports/history/components/bulk_imports_history_app.vue'; +import ImportStatus from '~/import_entities/import_groups/components/import_status.vue'; import PaginationBar from '~/vue_shared/components/pagination_bar/pagination_bar.vue'; import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue'; @@ -39,6 +39,7 @@ describe('BulkImportsHistoryApp', () => { destination_slug: 'top-level-group-12', destination_namespace: 'h5bp', created_at: '2021-07-08T10:03:44.743Z', + has_failures: false, failures: [], }, { @@ -56,6 +57,7 @@ describe('BulkImportsHistoryApp', () => { project_id: null, created_at: '2021-07-13T12:52:26.664Z', updated_at: '2021-07-13T13:34:49.403Z', + has_failures: true, failures: [ { pipeline_class: 'BulkImports::Groups::Pipelines::GroupPipeline', @@ -72,15 +74,19 @@ describe('BulkImportsHistoryApp', () => { let mock; const mockRealtimeChangesPath = '/import/realtime_changes.json'; - function createComponent({ shallow = true } = {}) { + function createComponent({ shallow = true, provide } = {}) { const mountFn = shallow ? shallowMount : mount; wrapper = mountFn(BulkImportsHistoryApp, { - provide: { realtimeChangesPath: mockRealtimeChangesPath }, + provide: { + realtimeChangesPath: mockRealtimeChangesPath, + ...provide, + }, }); } const findLocalStorageSync = () => wrapper.findComponent(LocalStorageSync); const findPaginationBar = () => wrapper.findComponent(PaginationBar); + const findImportStatusAt = (index) => wrapper.findAllComponents(ImportStatus).at(index); beforeEach(() => { gon.api_version = 'v4'; @@ -201,77 +207,59 @@ describe('BulkImportsHistoryApp', () => { expect(findLocalStorageSync().props('value')).toBe(NEW_PAGE_SIZE); }); - it('renders link to destination_full_path for destination group', async () => { - createComponent({ shallow: false }); - await waitForPromises(); - - expect(wrapper.find('tbody tr a').attributes().href).toBe( - `/${DUMMY_RESPONSE[0].destination_full_path}`, - ); - }); - - it('renders destination as text when destination_full_path is not defined', async () => { - const RESPONSE = [{ ...DUMMY_RESPONSE[0], destination_full_path: null }]; - - mock.onGet(BULK_IMPORTS_API_URL).reply(HTTP_STATUS_OK, RESPONSE, DEFAULT_HEADERS); - createComponent({ shallow: false }); - await waitForPromises(); - - expect(wrapper.find('tbody tr a').exists()).toBe(false); - expect(wrapper.find('tbody tr span').text()).toBe( - `${DUMMY_RESPONSE[0].destination_namespace}/${DUMMY_RESPONSE[0].destination_slug}/`, - ); - }); - - it('adds slash to group urls', async () => { - createComponent({ shallow: false }); - await waitForPromises(); - - expect(wrapper.find('tbody tr a').text()).toBe(`${DUMMY_RESPONSE[0].destination_full_path}/`); - }); + describe('table rendering', () => { + beforeEach(async () => { + createComponent({ shallow: false }); + await waitForPromises(); + }); - it('does not prefixes project urls with slash', async () => { - createComponent({ shallow: false }); - await waitForPromises(); + it('renders link to destination_full_path for destination group', () => { + expect(wrapper.find('tbody tr a').attributes().href).toBe( + `/${DUMMY_RESPONSE[0].destination_full_path}`, + ); + }); - expect(wrapper.findAll('tbody tr a').at(1).text()).toBe( - DUMMY_RESPONSE[1].destination_full_path, - ); - }); + it('renders destination as text when destination_full_path is not defined', async () => { + const RESPONSE = [{ ...DUMMY_RESPONSE[0], destination_full_path: null }]; - describe('details button', () => { - beforeEach(() => { - mock.onGet(BULK_IMPORTS_API_URL).reply(HTTP_STATUS_OK, DUMMY_RESPONSE, DEFAULT_HEADERS); + mock.onGet(BULK_IMPORTS_API_URL).reply(HTTP_STATUS_OK, RESPONSE, DEFAULT_HEADERS); createComponent({ shallow: false }); - return waitForPromises(); + await waitForPromises(); + + expect(wrapper.find('tbody tr a').exists()).toBe(false); + expect(wrapper.find('tbody tr span').text()).toBe( + `${DUMMY_RESPONSE[0].destination_namespace}/${DUMMY_RESPONSE[0].destination_slug}/`, + ); }); - it('renders details button if relevant item has failures', () => { - expect( - extendedWrapper(wrapper.find('tbody').findAll('tr').at(1)).findByText('Details').exists(), - ).toBe(true); + it('adds slash to group urls', () => { + expect(wrapper.find('tbody tr a').text()).toBe(`${DUMMY_RESPONSE[0].destination_full_path}/`); }); - it('does not render details button if relevant item has no failures', () => { - expect( - extendedWrapper(wrapper.find('tbody').findAll('tr').at(0)).findByText('Details').exists(), - ).toBe(false); + it('does not prefix project urls with slash', () => { + expect(wrapper.findAll('tbody tr a').at(1).text()).toBe( + DUMMY_RESPONSE[1].destination_full_path, + ); }); - it('expands details when details button is clicked', async () => { - const ORIGINAL_ROW_INDEX = 1; - await extendedWrapper(wrapper.find('tbody').findAll('tr').at(ORIGINAL_ROW_INDEX)) - .findByText('Details') - .trigger('click'); + it('renders finished import status', () => { + expect(findImportStatusAt(0).text()).toBe('Complete'); + }); - const detailsRowContent = wrapper - .find('tbody') - .findAll('tr') - .at(ORIGINAL_ROW_INDEX + 1) - .find('pre'); + it('renders failed import status with details link', async () => { + createComponent({ + shallow: false, + provide: { + detailsPath: '/mock-details', + }, + }); + await waitForPromises(); - expect(detailsRowContent.exists()).toBe(true); - expect(JSON.parse(detailsRowContent.text())).toStrictEqual(DUMMY_RESPONSE[1].failures); + const failedImportStatus = findImportStatusAt(1); + const failedImportStatusLink = failedImportStatus.find('a'); + expect(failedImportStatus.text()).toContain('Failed'); + expect(failedImportStatusLink.text()).toBe('See failures'); + expect(failedImportStatusLink.attributes('href')).toContain('/mock-details'); }); }); diff --git a/spec/frontend/performance_bar/components/performance_bar_app_spec.js b/spec/frontend/performance_bar/components/performance_bar_app_spec.js index 7a018236314..1ccb56a0697 100644 --- a/spec/frontend/performance_bar/components/performance_bar_app_spec.js +++ b/spec/frontend/performance_bar/components/performance_bar_app_spec.js @@ -17,6 +17,9 @@ describe('performance bar app', () => { statsUrl: 'https://log.gprd.gitlab.net/app/dashboards#/view/', peekUrl: '/-/peek/results', }, + stubs: { + GlEmoji: { template: '<div/>' }, + }, }); }; diff --git a/spec/frontend/performance_bar/components/request_warning_spec.js b/spec/frontend/performance_bar/components/request_warning_spec.js index a4f0d388e33..a85f83e9da7 100644 --- a/spec/frontend/performance_bar/components/request_warning_spec.js +++ b/spec/frontend/performance_bar/components/request_warning_spec.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import { shallowMount } from '@vue/test-utils'; +import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import RequestWarning from '~/performance_bar/components/request_warning.vue'; Vue.config.ignoredElements = ['gl-emoji']; @@ -8,9 +8,20 @@ describe('request warning', () => { let wrapper; const htmlId = 'request-123'; + const createComponent = ({ propsData = {} } = {}) => { + wrapper = shallowMountExtended(RequestWarning, { + propsData, + stubs: { + GlEmoji: { template: `<div id="${htmlId}" />` }, + }, + }); + }; + + const findEmoji = () => wrapper.findByTestId('warning'); + describe('when the request has warnings', () => { beforeEach(() => { - wrapper = shallowMount(RequestWarning, { + createComponent({ propsData: { htmlId, warnings: ['gitaly calls: 30 over 10', 'gitaly duration: 1500 over 1000'], @@ -19,14 +30,14 @@ describe('request warning', () => { }); it('adds a warning emoji with the correct ID', () => { - expect(wrapper.find('span gl-emoji[id]').attributes('id')).toEqual(htmlId); - expect(wrapper.find('span gl-emoji[id]').element.dataset.name).toEqual('warning'); + expect(findEmoji().attributes('id')).toEqual(htmlId); + expect(findEmoji().element.dataset.name).toEqual('warning'); }); }); describe('when the request does not have warnings', () => { beforeEach(() => { - wrapper = shallowMount(RequestWarning, { + createComponent({ propsData: { htmlId, warnings: [], @@ -35,7 +46,7 @@ describe('request warning', () => { }); it('does nothing', () => { - expect(wrapper.html()).toBe(''); + expect(findEmoji().exists()).toBe(false); }); }); }); diff --git a/spec/frontend/super_sidebar/components/create_menu_spec.js b/spec/frontend/super_sidebar/components/create_menu_spec.js index ffbc789d220..c2f608b4f52 100644 --- a/spec/frontend/super_sidebar/components/create_menu_spec.js +++ b/spec/frontend/super_sidebar/components/create_menu_spec.js @@ -31,6 +31,7 @@ describe('CreateMenu component', () => { stubs: { InviteMembersTrigger, GlDisclosureDropdown, + GlEmoji: { template: '<div/>' }, }, directives: { GlTooltip: createMockDirective('gl-tooltip'), diff --git a/spec/frontend/work_items/components/work_item_assignees_spec.js b/spec/frontend/work_items/components/work_item_assignees_spec.js index 196e19791df..6c0042bdad7 100644 --- a/spec/frontend/work_items/components/work_item_assignees_spec.js +++ b/spec/frontend/work_items/components/work_item_assignees_spec.js @@ -103,6 +103,9 @@ describe('WorkItemAssignees component', () => { }, attachTo: document.body, apolloProvider, + stubs: { + GlEmoji: { template: '<div/>' }, + }, }); }; |