]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10088 Prevent deleting default quality gate
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>
Tue, 28 Nov 2017 12:55:57 +0000 (13:55 +0100)
committerEric Hartmann <hartmann.eric@gmail.Com>
Mon, 4 Dec 2017 12:44:55 +0000 (13:44 +0100)
server/sonar-web/src/main/js/api/quality-gates.ts
server/sonar-web/src/main/js/apps/overview/qualityGate/ApplicationQualityGate.js
server/sonar-web/src/main/js/apps/quality-gates/components/DetailsContent.js
server/sonar-web/src/main/js/apps/quality-gates/components/DetailsHeader.js
server/sonar-web/src/main/js/apps/quality-gates/components/ListHeader.js
server/sonar-web/src/main/js/apps/quality-gates/components/QualityGatesApp.js

index 10bc60cea6c3456751a6ef47ba9ae83c0003a394..d2402fcdb466e8f4020a528db5dcfaebdda61b42 100644 (file)
@@ -33,7 +33,9 @@ export interface QualityGate {
   actions?: {
     associateProjects: boolean;
     copy: boolean;
-    edit: boolean;
+    delete: boolean;
+    manageConditions: boolean;
+    rename: boolean;
     setAsDefault: boolean;
   };
   conditions?: Condition[];
index ba4e5e1a32c7f0cd86b541f07ef0f044829c5984..8149f8963f46a9cdca5ec67c628e3d63ed2da659 100644 (file)
@@ -69,16 +69,23 @@ export default class ApplicationQualityGate extends React.PureComponent {
 
   fetchDetails = () => {
     this.setState({ loading: true });
-    getApplicationQualityGate(this.props.component.key).then(({ status, projects, metrics }) => {
-      if (this.mounted) {
-        this.setState({
-          loading: false,
-          metrics: keyBy(metrics, 'key'),
-          status,
-          projects
-        });
+    getApplicationQualityGate(this.props.component.key).then(
+      ({ status, projects, metrics }) => {
+        if (this.mounted) {
+          this.setState({
+            loading: false,
+            metrics: keyBy(metrics, 'key'),
+            status,
+            projects
+          });
+        }
+      },
+      () => {
+        if (this.mounted) {
+          this.setState({ loading: false });
+        }
       }
-    });
+    );
   };
 
   render() {
index e7021d78f0c063ecc420f9ed1c09b34ffd017611..0489459a58c95266522024b243800c043443f34d 100644 (file)
@@ -39,7 +39,7 @@ export default class DetailsContent extends React.PureComponent {
           qualityGate={gate}
           conditions={conditions}
           metrics={metrics}
-          edit={actions.edit}
+          edit={actions.manageConditions}
           onAddCondition={onAddCondition}
           onSaveCondition={onSaveCondition}
           onDeleteCondition={onDeleteCondition}
index b86e89a41b8b05841389951da17afda1c7c84043..71ce93cf1c5df2bb36748e66133ebd1dae0cd920 100644 (file)
@@ -55,7 +55,7 @@ export default class DetailsHeader extends React.PureComponent {
             </h2>
 
             <div className="pull-right">
-              {actions.edit && (
+              {actions.rename && (
                 <button id="quality-gate-rename" onClick={this.handleRenameClick}>
                   {translate('rename')}
                 </button>
@@ -76,7 +76,7 @@ export default class DetailsHeader extends React.PureComponent {
                   {translate('set_as_default')}
                 </button>
               )}
-              {actions.edit && (
+              {actions.delete && (
                 <button
                   id="quality-gate-delete"
                   className="little-spacer-left button-red"
index 5e9d68b432cab7e26890b7919cbd18c48c0b86e9..2801cd954bb2a2fe34047e20f4a47f90f1adc8b6 100644 (file)
@@ -21,7 +21,7 @@ import React from 'react';
 import CreateView from '../views/create-view';
 import { translate } from '../../../helpers/l10n';
 
-export default function ListHeader({ canEdit, onAdd }) {
+export default function ListHeader({ canCreate, onAdd }) {
   function handleAddClick(e) {
     e.preventDefault();
     new CreateView({ onAdd }).render();
@@ -30,7 +30,7 @@ export default function ListHeader({ canEdit, onAdd }) {
   return (
     <header className="page-header">
       <h1 className="page-title">{translate('quality_gates.page')}</h1>
-      {canEdit && (
+      {canCreate && (
         <div className="page-actions">
           <button id="quality-gate-add" onClick={handleAddClick}>
             {translate('create')}
index a8b0b97d490ed2b40431357c071bb8d7fd4e699d..8d13fbae35e031b0fe6cc87c4be215cffc52d5b5 100644 (file)
@@ -81,7 +81,7 @@ export default class QualityGatesApp extends Component {
             <div className="layout-page-side" style={{ top }}>
               <div className="layout-page-side-inner">
                 <div className="layout-page-filters">
-                  <ListHeader canEdit={actions && actions.create} onAdd={this.handleAdd} />
+                  <ListHeader canCreate={actions && actions.create} onAdd={this.handleAdd} />
                   {qualityGates && <List organization={organization} qualityGates={qualityGates} />}
                 </div>
               </div>