]> source.dussan.org Git - sonarqube.git/commitdiff
fix quality gates deletion/renaming
authorStas Vilchik <stas.vilchik@sonarsource.com>
Tue, 3 Oct 2017 09:11:36 +0000 (11:11 +0200)
committerStas Vilchik <stas.vilchik@sonarsource.com>
Wed, 4 Oct 2017 08:35:13 +0000 (10:35 +0200)
server/sonar-web/src/main/js/api/quality-gates.ts
server/sonar-web/src/main/js/apps/projectQualityGate/App.tsx
server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx
server/sonar-web/src/main/js/apps/projectQualityGate/__tests__/Form-test.tsx
server/sonar-web/src/main/js/apps/projectQualityGate/__tests__/__snapshots__/Form-test.tsx.snap

index c4142d3958dff201e51cbbc747543e00707a1722..9857a9c2b2a2c58257f784dcc9f5f60808ea2ccc 100644 (file)
@@ -26,7 +26,7 @@ export function fetchQualityGatesAppDetails(): Promise<any> {
 
 export interface QualityGate {
   isDefault?: boolean;
-  id: string;
+  id: number;
   name: string;
 }
 
@@ -36,7 +36,7 @@ export function fetchQualityGates(): Promise<QualityGate[]> {
       r.qualitygates.map((qualityGate: any) => {
         return {
           ...qualityGate,
-          id: String(qualityGate.id),
+          id: qualityGate.id,
           isDefault: qualityGate.id === r.default
         };
       }),
@@ -96,14 +96,14 @@ export function getGateForProject(project: string): Promise<QualityGate | undefi
 }
 
 export function associateGateWithProject(
-  gateId: string,
+  gateId: number,
   projectKey: string
 ): Promise<void | Response> {
   return post('/api/qualitygates/select', { gateId, projectKey }).catch(throwGlobalError);
 }
 
 export function dissociateGateWithProject(
-  gateId: string,
+  gateId: number,
   projectKey: string
 ): Promise<void | Response> {
   return post('/api/qualitygates/deselect', { gateId, projectKey }).catch(throwGlobalError);
index 4d254a5689271fa99b5e8eb493027056cc22e588..0a4f20f304b083e5b92f3cc35c842f6a9309a4ea 100644 (file)
@@ -82,7 +82,7 @@ export default class App extends React.PureComponent<Props> {
     );
   }
 
-  handleChangeGate = (oldId: string | undefined, newId: string | undefined) => {
+  handleChangeGate = (oldId: number | undefined, newId: number | undefined) => {
     const { allGates } = this.state;
 
     if ((!oldId && !newId) || !allGates) {
index 7c1d7a21ed5b9dbdb191b2eb610275ba039d5aa6..b5a034ccd684188bbb3c2918d5fdd2b97fdf542b 100644 (file)
@@ -26,7 +26,7 @@ import { translate } from '../../helpers/l10n';
 interface Props {
   allGates: QualityGate[];
   gate?: QualityGate;
-  onChange: (oldGate: string | undefined, newGate: string) => Promise<void>;
+  onChange: (oldGate: number | undefined, newGate: number) => Promise<void>;
 }
 
 interface State {
@@ -62,12 +62,14 @@ export default class Form extends React.PureComponent<Props, State> {
 
     const isSet = gate == null && option.value != null;
     const isUnset = gate != null && option.value == null;
-    const isChanged = gate != null && gate.id !== option.value;
+    const isChanged = gate != null && gate.id !== Number(option.value);
     const hasChanged = isSet || isUnset || isChanged;
 
     if (hasChanged) {
       this.setState({ loading: true });
-      this.props.onChange(gate && gate.id, option.value).then(this.stopLoading, this.stopLoading);
+      this.props
+        .onChange(gate && gate.id, Number(option.value))
+        .then(this.stopLoading, this.stopLoading);
     }
   };
 
@@ -89,7 +91,7 @@ export default class Form extends React.PureComponent<Props, State> {
     const { gate, allGates } = this.props;
 
     const options: Option[] = allGates.map(gate => ({
-      value: gate.id,
+      value: String(gate.id),
       label: gate.name,
       isDefault: gate.isDefault
     }));
@@ -108,7 +110,7 @@ export default class Form extends React.PureComponent<Props, State> {
         options={options}
         placeholder={translate('none')}
         style={{ width: 300 }}
-        value={gate && gate.id}
+        value={gate && String(gate.id)}
         valueRenderer={this.renderGateName}
       />
     );
index f06a73eea6d0bba53dfba39cc5a215a98ded91d4..054a7cf6111b4439659dd37e0d4866b8c1fdd1fa 100644 (file)
@@ -22,27 +22,27 @@ import { shallow } from 'enzyme';
 import Form from '../Form';
 
 it('renders', () => {
-  const foo = randomGate('foo');
-  const allGates = [foo, randomGate('bar')];
+  const foo = randomGate(1);
+  const allGates = [foo, randomGate(2)];
   expect(shallow(<Form allGates={allGates} gate={foo} onChange={jest.fn()} />)).toMatchSnapshot();
 });
 
 it('changes quality gate', () => {
-  const allGates = [randomGate('foo'), randomGate('bar')];
+  const allGates = [randomGate(1), randomGate(2)];
   const onChange = jest.fn(() => Promise.resolve());
   const wrapper = shallow(<Form allGates={allGates} onChange={onChange} />);
 
-  wrapper.find('Select').prop<Function>('onChange')({ value: 'bar' });
-  expect(onChange).lastCalledWith(undefined, 'bar');
+  wrapper.find('Select').prop<Function>('onChange')({ value: 2 });
+  expect(onChange).lastCalledWith(undefined, 2);
 
-  wrapper.setProps({ gate: randomGate('foo') });
-  wrapper.find('Select').prop<Function>('onChange')({ value: 'bar' });
-  expect(onChange).lastCalledWith('foo', 'bar');
+  wrapper.setProps({ gate: randomGate(1) });
+  wrapper.find('Select').prop<Function>('onChange')({ value: 2 });
+  expect(onChange).lastCalledWith(1, 2);
 });
 
-function randomGate(id: string) {
+function randomGate(id: number) {
   return {
     id,
-    name: id
+    name: `name-${id}`
   };
 }
index fcbb0ecfff8e6247fcb5b3de2a65432f7bbb80dd..afa45f5e3bacf6c6ede59f83a23f3d1fa5426554 100644 (file)
@@ -42,13 +42,13 @@ exports[`renders 1`] = `
         },
         Object {
           "isDefault": undefined,
-          "label": "foo",
-          "value": "foo",
+          "label": "name-1",
+          "value": "1",
         },
         Object {
           "isDefault": undefined,
-          "label": "bar",
-          "value": "bar",
+          "label": "name-2",
+          "value": "2",
         },
       ]
     }
@@ -64,7 +64,7 @@ exports[`renders 1`] = `
       }
     }
     tabSelectsValue={true}
-    value="foo"
+    value="1"
     valueComponent={[Function]}
     valueKey="value"
     valueRenderer={[Function]}