diff options
Diffstat (limited to 'spec/frontend/pages/projects')
8 files changed, 91 insertions, 54 deletions
diff --git a/spec/frontend/pages/projects/edit/mount_search_settings_spec.js b/spec/frontend/pages/projects/edit/mount_search_settings_spec.js new file mode 100644 index 00000000000..b48809b3d00 --- /dev/null +++ b/spec/frontend/pages/projects/edit/mount_search_settings_spec.js @@ -0,0 +1,25 @@ +import { setHTMLFixture, resetHTMLFixture } from 'helpers/fixtures'; +import initSearch from '~/search_settings'; +import mountSearchSettings from '~/pages/projects/edit/mount_search_settings'; + +jest.mock('~/search_settings'); + +describe('pages/projects/edit/mount_search_settings', () => { + afterEach(() => { + resetHTMLFixture(); + }); + + it('initializes search settings when js-search-settings-app is available', async () => { + setHTMLFixture('<div class="js-search-settings-app"></div>'); + + await mountSearchSettings(); + + expect(initSearch).toHaveBeenCalled(); + }); + + it('does not initialize search settings when js-search-settings-app is unavailable', async () => { + await mountSearchSettings(); + + expect(initSearch).not.toHaveBeenCalled(); + }); +}); diff --git a/spec/frontend/pages/projects/forks/new/components/fork_groups_list_item_spec.js b/spec/frontend/pages/projects/forks/new/components/fork_groups_list_item_spec.js index 73e3c385d33..b90c07a335b 100644 --- a/spec/frontend/pages/projects/forks/new/components/fork_groups_list_item_spec.js +++ b/spec/frontend/pages/projects/forks/new/components/fork_groups_list_item_spec.js @@ -30,7 +30,7 @@ describe('Fork groups list item component', () => { const DUMMY_PATH = '/dummy/path'; - const createWrapper = propsData => { + const createWrapper = (propsData) => { wrapper = shallowMount(ForkGroupsListItem, { propsData: { ...DEFAULT_PROPS, @@ -70,7 +70,7 @@ describe('Fork groups list item component', () => { expect( wrapper .findAll(GlLink) - .filter(w => w.text() === DUMMY_FULL_NAME) + .filter((w) => w.text() === DUMMY_FULL_NAME) .at(0) .attributes().href, ).toBe(DUMMY_PATH); diff --git a/spec/frontend/pages/projects/forks/new/components/fork_groups_list_spec.js b/spec/frontend/pages/projects/forks/new/components/fork_groups_list_spec.js index 9993e4da980..91740c7ce3b 100644 --- a/spec/frontend/pages/projects/forks/new/components/fork_groups_list_spec.js +++ b/spec/frontend/pages/projects/forks/new/components/fork_groups_list_spec.js @@ -21,7 +21,7 @@ describe('Fork groups list component', () => { const replyWith = (...args) => axiosMock.onGet(DEFAULT_PROPS.endpoint).reply(...args); - const createWrapper = propsData => { + const createWrapper = (propsData) => { wrapper = shallowMount(ForkGroupsList, { propsData: { ...DEFAULT_PROPS, @@ -104,12 +104,10 @@ describe('Fork groups list component', () => { expect(wrapper.findAll(ForkGroupsListItem)).toHaveLength(namespaces.length); namespaces.forEach((namespace, idx) => { - expect( - wrapper - .findAll(ForkGroupsListItem) - .at(idx) - .props(), - ).toStrictEqual({ group: namespace, hasReachedProjectLimit }); + expect(wrapper.findAll(ForkGroupsListItem).at(idx).props()).toStrictEqual({ + group: namespace, + hasReachedProjectLimit, + }); }); }); @@ -123,11 +121,6 @@ describe('Fork groups list component', () => { await nextTick(); expect(wrapper.findAll(ForkGroupsListItem)).toHaveLength(1); - expect( - wrapper - .findAll(ForkGroupsListItem) - .at(0) - .props().group.name, - ).toBe('otherdummy'); + expect(wrapper.findAll(ForkGroupsListItem).at(0).props().group.name).toBe('otherdummy'); }); }); diff --git a/spec/frontend/pages/projects/graphs/__snapshots__/code_coverage_spec.js.snap b/spec/frontend/pages/projects/graphs/__snapshots__/code_coverage_spec.js.snap index 324c9788309..c4c48ea7517 100644 --- a/spec/frontend/pages/projects/graphs/__snapshots__/code_coverage_spec.js.snap +++ b/spec/frontend/pages/projects/graphs/__snapshots__/code_coverage_spec.js.snap @@ -12,6 +12,7 @@ exports[`Code Coverage when fetching data is successful matches the snapshot 1`] <gl-dropdown-stub category="primary" headertext="" + hideheaderborder="true" size="medium" text="rspec" variant="default" diff --git a/spec/frontend/pages/projects/pipeline_schedules/shared/components/interval_pattern_input_spec.js b/spec/frontend/pages/projects/pipeline_schedules/shared/components/interval_pattern_input_spec.js index 9a119377542..27cd0fe34bf 100644 --- a/spec/frontend/pages/projects/pipeline_schedules/shared/components/interval_pattern_input_spec.js +++ b/spec/frontend/pages/projects/pipeline_schedules/shared/components/interval_pattern_input_spec.js @@ -26,7 +26,7 @@ describe('Interval Pattern Input Component', () => { const findCustomInput = () => wrapper.find('#schedule_cron'); const findAllLabels = () => wrapper.findAll('label'); const findSelectedRadio = () => - wrapper.findAll('input[type="radio"]').wrappers.find(x => x.element.checked); + wrapper.findAll('input[type="radio"]').wrappers.find((x) => x.element.checked); const findSelectedRadioKey = () => findSelectedRadio()?.attributes('data-testid'); const selectEveryDayRadio = () => findEveryDayRadio().trigger('click'); const selectEveryWeekRadio = () => findEveryWeekRadio().trigger('click'); @@ -129,7 +129,7 @@ describe('Interval Pattern Input Component', () => { }); it('renders each label for radio options properly', () => { - const labels = findAllLabels().wrappers.map(el => trimText(el.text())); + const labels = findAllLabels().wrappers.map((el) => trimText(el.text())); expect(labels).toEqual([ 'Every day (at 4:00am)', diff --git a/spec/frontend/pages/projects/pipeline_schedules/shared/components/timezone_dropdown_spec.js b/spec/frontend/pages/projects/pipeline_schedules/shared/components/timezone_dropdown_spec.js index 5efcedf678b..de63409b181 100644 --- a/spec/frontend/pages/projects/pipeline_schedules/shared/components/timezone_dropdown_spec.js +++ b/spec/frontend/pages/projects/pipeline_schedules/shared/components/timezone_dropdown_spec.js @@ -47,7 +47,7 @@ describe('Timezone Dropdown', () => { const data = $dropdownEl.data('data'); const formatted = $wrapper.find(tzListSel).text(); - data.forEach(item => { + data.forEach((item) => { expect(formatted).toContain(formatTimezone(item)); }); }); @@ -88,10 +88,7 @@ describe('Timezone Dropdown', () => { onSelectTimezone, }); - $wrapper - .find(tzListSel) - .first() - .trigger('click'); + $wrapper.find(tzListSel).first().trigger('click'); expect(onSelectTimezone).toHaveBeenCalled(); }); @@ -103,7 +100,7 @@ describe('Timezone Dropdown', () => { new TimezoneDropdown({ $inputEl, $dropdownEl, - displayFormat: selectedItem => formatTimezone(selectedItem), + displayFormat: (selectedItem) => formatTimezone(selectedItem), }); expect($wrapper.find(tzDropdownToggleText).html()).toEqual('[UTC - 2.5] Newfoundland'); @@ -118,10 +115,7 @@ describe('Timezone Dropdown', () => { displayFormat, }); - $wrapper - .find(tzListSel) - .first() - .trigger('click'); + $wrapper.find(tzListSel).first().trigger('click'); expect(displayFormat).toHaveBeenCalled(); }); diff --git a/spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js b/spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js index 1fd9d285610..c90ebd47b08 100644 --- a/spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js +++ b/spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js @@ -6,13 +6,20 @@ import projectFeatureToggle from '~/vue_shared/components/toggle_button.vue'; describe('Project Feature Settings', () => { const defaultProps = { name: 'Test', - options: [[1, 1], [2, 2], [3, 3], [4, 4], [5, 5]], + options: [ + [1, 1], + [2, 2], + [3, 3], + [4, 4], + [5, 5], + ], value: 1, disabledInput: false, + showToggle: true, }; let wrapper; - const mountComponent = customProps => { + const mountComponent = (customProps) => { const propsData = { ...defaultProps, ...customProps }; return shallowMount(projectFeatureSetting, { propsData }); }; @@ -40,6 +47,14 @@ describe('Project Feature Settings', () => { }); describe('Feature toggle', () => { + it('should be hidden if "showToggle" is passed false', async () => { + wrapper.setProps({ showToggle: false }); + + await wrapper.vm.$nextTick(); + + expect(wrapper.find(projectFeatureToggle).element).toBeUndefined(); + }); + it('should enable the feature toggle if the value is not 0', () => { expect(wrapper.find(projectFeatureToggle).props().value).toBe(true); }); @@ -73,10 +88,7 @@ describe('Project Feature Settings', () => { wrapper = mount(projectFeatureSetting, { propsData: defaultProps }); expect(wrapper.emitted().change).toBeUndefined(); - wrapper - .find(projectFeatureToggle) - .find('button') - .trigger('click'); + wrapper.find(projectFeatureToggle).find('button').trigger('click'); return wrapper.vm.$nextTick().then(() => { expect(wrapper.emitted().change.length).toBe(1); @@ -110,10 +122,7 @@ describe('Project Feature Settings', () => { it('should emit the change when a new option is selected', () => { expect(wrapper.emitted().change).toBeUndefined(); - wrapper - .findAll('option') - .at(1) - .trigger('change'); + wrapper.findAll('option').at(1).trigger('change'); return wrapper.vm.$nextTick().then(() => { expect(wrapper.emitted().change.length).toBe(1); diff --git a/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js b/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js index 0b58260ed1c..9aee6ec7ace 100644 --- a/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js +++ b/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js @@ -20,6 +20,7 @@ const defaultProps = { buildsAccessLevel: 20, wikiAccessLevel: 20, snippetsAccessLevel: 20, + operationsAccessLevel: 20, pagesAccessLevel: 10, analyticsAccessLevel: 20, containerRegistryEnabled: true, @@ -68,8 +69,12 @@ describe('Settings Panel', () => { }); }; - const overrideCurrentSettings = (currentSettingsProps, extraProps = {}) => { - return mountComponent({ ...extraProps, currentSettings: currentSettingsProps }); + const overrideCurrentSettings = ( + currentSettingsProps, + extraProps = {}, + mountFn = shallowMount, + ) => { + return mountComponent({ ...extraProps, currentSettings: currentSettingsProps }, mountFn); }; const findLFSSettingsRow = () => wrapper.find({ ref: 'git-lfs-settings' }); @@ -362,7 +367,7 @@ describe('Settings Panel', () => { const repositoryFeatureToggleButton = findRepositoryFeatureSetting().find('button'); const lfsFeatureToggleButton = findLFSFeatureToggle().find('button'); - const isToggleButtonChecked = toggleButton => toggleButton.classes('is-checked'); + const isToggleButtonChecked = (toggleButton) => toggleButton.classes('is-checked'); // assert the initial state expect(isToggleButtonChecked(lfsFeatureToggleButton)).toBe(true); @@ -523,28 +528,30 @@ describe('Settings Panel', () => { }); }); - it('should set the visibility level description based upon the selected visibility level', () => { - wrapper - .find('[name="project[project_feature_attributes][metrics_dashboard_access_level]"]') - .setValue(visibilityOptions.PUBLIC); - - expect(wrapper.vm.metricsDashboardAccessLevel).toBe(visibilityOptions.PUBLIC); - }); - it('should contain help text', () => { expect(wrapper.find({ ref: 'metrics-visibility-settings' }).props().helpText).toBe( 'With Metrics Dashboard you can visualize this project performance metrics', ); }); - it('should disable the metrics visibility dropdown when the project visibility level changes to private', () => { - wrapper = overrideCurrentSettings({ visibilityLevel: visibilityOptions.PRIVATE }); + it.each` + scenario | selectedOption | selectedOptionLabel + ${{ visibilityLevel: visibilityOptions.PRIVATE }} | ${String(featureAccessLevel.PROJECT_MEMBERS)} | ${'Only Project Members'} + ${{ operationsAccessLevel: featureAccessLevel.NOT_ENABLED }} | ${String(featureAccessLevel.NOT_ENABLED)} | ${'Enable feature to choose access level'} + `( + 'should disable the metrics visibility dropdown when #scenario', + ({ scenario, selectedOption, selectedOptionLabel }) => { + wrapper = overrideCurrentSettings(scenario, {}, mount); - const metricsSettingsRow = wrapper.find({ ref: 'metrics-visibility-settings' }); + const select = wrapper.find({ ref: 'metrics-visibility-settings' }).find('select'); + const option = select.find('option'); - expect(wrapper.vm.metricsOptionsDropdownEnabled).toBe(true); - expect(metricsSettingsRow.find('select').attributes('disabled')).toBe('disabled'); - }); + expect(select.attributes('disabled')).toBe('disabled'); + expect(select.element.value).toBe(selectedOption); + expect(option.attributes('value')).toBe(selectedOption); + expect(option.text()).toBe(selectedOptionLabel); + }, + ); }); describe('Settings panel with feature flags', () => { @@ -568,4 +575,12 @@ describe('Settings Panel', () => { expect(findAnalyticsRow().exists()).toBe(true); }); }); + + describe('Operations', () => { + it('should show the operations toggle', async () => { + await wrapper.vm.$nextTick(); + + expect(wrapper.find({ ref: 'operations-settings' }).exists()).toBe(true); + }); + }); }); |