diff --git a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue index 3e5c02bbf19e63cb837c3adc89235d27bac0c45d..c37b4cc643af8c911420914acc77a474aaa0a0a3 100644 --- a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue +++ b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue @@ -41,6 +41,8 @@ export default { featureFlagsHelpText: s__( 'ProjectSettings|Roll out new features without redeploying with feature flags.', ), + infrastructureLabel: s__('ProjectSettings|Infrastructure'), + infrastructureHelpText: s__('ProjectSettings|Configure your infrastructure.'), monitorLabel: s__('ProjectSettings|Monitor'), packagesHelpText: s__( 'ProjectSettings|Every project can have its own space to store its packages. Note: The Package Registry is always visible when a project is public.', @@ -157,6 +159,11 @@ export default { required: false, default: '', }, + infrastructureHelpPath: { + type: String, + required: false, + default: '', + }, releasesHelpPath: { type: String, required: false, @@ -245,6 +252,7 @@ export default { operationsAccessLevel: featureAccessLevel.EVERYONE, environmentsAccessLevel: featureAccessLevel.EVERYONE, featureFlagsAccessLevel: featureAccessLevel.PROJECT_MEMBERS, + infrastructureAccessLevel: featureAccessLevel.PROJECT_MEMBERS, releasesAccessLevel: featureAccessLevel.EVERYONE, monitorAccessLevel: featureAccessLevel.EVERYONE, containerRegistryAccessLevel: featureAccessLevel.EVERYONE, @@ -433,6 +441,10 @@ export default { featureAccessLevel.PROJECT_MEMBERS, this.featureFlagsAccessLevel, ); + this.infrastructureAccessLevel = Math.min( + featureAccessLevel.PROJECT_MEMBERS, + this.infrastructureAccessLevel, + ); this.releasesAccessLevel = Math.min( featureAccessLevel.PROJECT_MEMBERS, this.releasesAccessLevel, @@ -981,6 +993,19 @@ export default { name="project[project_feature_attributes][feature_flags_access_level]" /> + + + { const findConfirmDangerButton = () => wrapper.findComponent(ConfirmDanger); const findEnvironmentsSettings = () => wrapper.findComponent({ ref: 'environments-settings' }); const findFeatureFlagsSettings = () => wrapper.findComponent({ ref: 'feature-flags-settings' }); + const findInfrastructureSettings = () => + wrapper.findComponent({ ref: 'infrastructure-settings' }); const findReleasesSettings = () => wrapper.findComponent({ ref: 'environments-settings' }); const findMonitorSettings = () => wrapper.findComponent({ ref: 'monitor-settings' }); @@ -841,6 +843,24 @@ describe('Settings Panel', () => { }); }); }); + describe('Infrastructure', () => { + describe('with feature flag', () => { + it('should show the infrastructure toggle', () => { + wrapper = mountComponent({ + glFeatures: { splitOperationsVisibilityPermissions: true }, + }); + + expect(findInfrastructureSettings().exists()).toBe(true); + }); + }); + describe('without feature flag', () => { + it('should not show the infrastructure toggle', () => { + wrapper = mountComponent({}); + + expect(findInfrastructureSettings().exists()).toBe(false); + }); + }); + }); describe('Releases', () => { describe('with feature flag', () => { it('should show the releases toggle', () => { diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 07c2d50f70a592cfbe23d8f149f867b5db5ef5a5..39b8b55267202a9d192beeb484a5a766a4e383b0 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -969,7 +969,8 @@ def license_name containerRegistryAccessLevel: project.project_feature.container_registry_access_level, environmentsAccessLevel: project.project_feature.environments_access_level, featureFlagsAccessLevel: project.project_feature.feature_flags_access_level, - releasesAccessLevel: project.project_feature.releases_access_level + releasesAccessLevel: project.project_feature.releases_access_level, + infrastructureAccessLevel: project.project_feature.infrastructure_access_level ) end