]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11676 Fix Bulk Apply Permission Template
authorJeremy Davis <jeremy.davis@sonarsource.com>
Mon, 27 May 2019 09:33:34 +0000 (11:33 +0200)
committerSonarTech <sonartech@sonarsource.com>
Wed, 29 May 2019 18:21:14 +0000 (20:21 +0200)
server/sonar-web/src/main/js/apps/create/components/__tests__/ProjectKeyInput-test.tsx
server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/BulkApplyTemplateModal-test.tsx
server/sonar-web/src/main/js/components/SourceViewer/SourceViewerHeader.tsx

index 4b47eaef94389771385d984fc1b0a9b0c3fd1405..14a4b9c33b03092abfdd369d049d3f9843159f13 100644 (file)
@@ -59,3 +59,29 @@ it('should have an error when the key already exists', async () => {
   await new Promise(setImmediate);
   expect(wrapper.find('ValidationInput').prop('isInvalid')).toBe(true);
 });
+
+it('should handle Change', async () => {
+  const onChange = jest.fn();
+  const wrapper = shallow(<ProjectKeyInput onChange={onChange} value="" />);
+  await waitAndUpdate(wrapper);
+
+  wrapper.find('input').simulate('change', { currentTarget: { value: 'key' } });
+
+  expect(wrapper.state('touched')).toBe(true);
+  expect(onChange).toBeCalledWith('key');
+});
+
+it('should ignore promise return if value has been changed in the meantime', async () => {
+  const onChange = (value: string) => wrapper.setProps({ value });
+  const wrapper = shallow(<ProjectKeyInput onChange={onChange} value="" />);
+  await waitAndUpdate(wrapper);
+
+  wrapper.find('input').simulate('change', { currentTarget: { value: 'exists' } });
+  wrapper.find('input').simulate('change', { currentTarget: { value: 'exists%' } });
+
+  jest.runAllTimers();
+  await new Promise(setImmediate);
+
+  expect(wrapper.state('touched')).toBe(true);
+  expect(wrapper.state('error')).toBe('onboarding.create_project.project_key.error');
+});
index 495fe5e077d0bc0d07ca0914ce3a2bf24ef607dc..e3c32aa20e46920b0d76159bb69b10e18f908195 100644 (file)
@@ -88,6 +88,7 @@ export default class BulkApplyTemplateModal extends React.PureComponent<Props, S
         ? {
             organization: this.props.organization,
             projects: this.props.selection.join(),
+            qualifiers: this.props.qualifier,
             templateId: permissionTemplate
           }
         : {
index b4670b1788536bf11af6fc7c9f52a1c136323a24..0cfec7a9349ef63c4f506c400d0bbdb153c3cfc0 100644 (file)
@@ -71,7 +71,7 @@ it('bulk applies template to all results', async () => {
 });
 
 it('bulk applies template to selected results', async () => {
-  const wrapper = shallow(render({ selection: ['proj1', 'proj2'] }));
+  const wrapper = shallow(render({ qualifier: 'VW', selection: ['proj1', 'proj2'] }));
   (wrapper.instance() as BulkApplyTemplateModal).mounted = true;
   expect(wrapper).toMatchSnapshot();
 
@@ -88,6 +88,7 @@ it('bulk applies template to selected results', async () => {
   expect(bulkApplyTemplate).toBeCalledWith({
     organization: 'org',
     projects: 'proj1,proj2',
+    qualifiers: 'VW',
     templateId: 'foo'
   });
 
index 9a8a57bf77d37b05c8249418494972757af6dfae..3b3eb4786da9e90653851d9e543c2c2a1f691f89 100644 (file)
@@ -73,8 +73,9 @@ export default class SourceViewerHeader extends React.PureComponent<Props, State
 
   renderIssueMeasures = () => {
     const { branchLike, issues, sourceViewerFile } = this.props;
-    if (issues && issues.length > 0) {
-      return (
+    return (
+      issues &&
+      issues.length > 0 && (
         <>
           <div className="source-viewer-header-measure-separator" />
 
@@ -101,8 +102,8 @@ export default class SourceViewerHeader extends React.PureComponent<Props, State
             );
           })}
         </>
-      );
-    }
+      )
+    );
   };
 
   render() {