]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-14486 Fix security hotspot information refresh
authorPhilippe Perrin <philippe.perrin@sonarsource.com>
Mon, 22 Feb 2021 14:25:02 +0000 (15:25 +0100)
committersonartech <sonartech@sonarsource.com>
Tue, 23 Feb 2021 20:07:26 +0000 (20:07 +0000)
server/sonar-web/src/main/js/apps/security-hotspots/components/HotspotViewer.tsx
server/sonar-web/src/main/js/apps/security-hotspots/components/HotspotViewerRenderer.tsx
server/sonar-web/src/main/js/apps/security-hotspots/components/__tests__/HotspotViewer-test.tsx
server/sonar-web/src/main/js/apps/security-hotspots/components/__tests__/__snapshots__/HotspotViewerRenderer-test.tsx.snap

index 839db3bdcc5f10d88d40047b79ebf53fa8b62576..b538d2b21fbd02ceda3bddfe3d5dc325054652a3 100644 (file)
@@ -79,10 +79,14 @@ export default class HotspotViewer extends React.PureComponent<Props, State> {
       .catch(() => this.mounted && this.setState({ loading: false }));
   };
 
-  handleHotspotUpdate = async () => {
+  handleHotspotUpdate = async (statusUpdate = false) => {
     const { hotspotKey } = this.props;
 
-    await this.props.onUpdateHotspot(hotspotKey);
+    if (statusUpdate) {
+      await this.props.onUpdateHotspot(hotspotKey);
+    } else {
+      await this.fetchHotspot();
+    }
   };
 
   handleOpenComment = () => {
index 4947981b877c6a1324b952224fecd11b2363b410..fec84299eb57734988c730e1e4a4600b61eaf373 100644 (file)
@@ -49,7 +49,7 @@ export interface HotspotViewerRendererProps {
   commentTextRef: React.RefObject<HTMLTextAreaElement>;
   onOpenComment: () => void;
   onCloseComment: () => void;
-  onUpdateHotspot: () => Promise<void>;
+  onUpdateHotspot: (statusUpdate?: boolean) => Promise<void>;
   securityCategories: T.StandardSecurityCategories;
 }
 
@@ -128,7 +128,7 @@ export function HotspotViewerRenderer(props: HotspotViewerRendererProps) {
               </div>
             </div>
             <div className="huge-spacer-left">
-              <Status hotspot={hotspot} onStatusChange={props.onUpdateHotspot} />
+              <Status hotspot={hotspot} onStatusChange={() => props.onUpdateHotspot(true)} />
             </div>
           </div>
 
index 022a4764aef9d0f48e56671387c5e6ffe768067d..1839e8b419d91577acafb041d91ea3caaeb4058c 100644 (file)
@@ -51,13 +51,26 @@ it('should render correctly', async () => {
   expect(getSecurityHotspotDetails).toHaveBeenCalledWith(newHotspotKey);
 });
 
-it('should refresh hotspot on update', () => {
+it('should refresh hotspot list on status update', () => {
   const onUpdateHotspot = jest.fn();
   const wrapper = shallowRender({ onUpdateHotspot });
-  wrapper.find(HotspotViewerRenderer).simulate('updateHotspot');
+  wrapper
+    .find(HotspotViewerRenderer)
+    .props()
+    .onUpdateHotspot(true);
   expect(onUpdateHotspot).toHaveBeenCalled();
 });
 
+it('should NOT refresh hotspot list on assignee/comment updates', () => {
+  const onUpdateHotspot = jest.fn();
+  const wrapper = shallowRender({ onUpdateHotspot });
+  wrapper
+    .find(HotspotViewerRenderer)
+    .props()
+    .onUpdateHotspot();
+  expect(onUpdateHotspot).not.toHaveBeenCalled();
+});
+
 it('should open comment form when scroll to comment', () => {
   const wrapper = shallowRender();
   const mockTextRef = ({ current: { focus: jest.fn() } } as any) as React.RefObject<
index bc39771668fc7c4aa6c4f842f1cf2b16e05eec81..957c63b84ace5eb5301a2af44a8749a925dbbd1e 100644 (file)
@@ -296,7 +296,7 @@ exports[`should render correctly 1`] = `
               ],
             }
           }
-          onStatusChange={[MockFunction]}
+          onStatusChange={[Function]}
         />
       </div>
     </div>
@@ -941,7 +941,7 @@ exports[`should render correctly: anonymous user 1`] = `
               ],
             }
           }
-          onStatusChange={[MockFunction]}
+          onStatusChange={[Function]}
         />
       </div>
     </div>
@@ -1586,7 +1586,7 @@ exports[`should render correctly: assignee without name 1`] = `
               ],
             }
           }
-          onStatusChange={[MockFunction]}
+          onStatusChange={[Function]}
         />
       </div>
     </div>
@@ -2231,7 +2231,7 @@ exports[`should render correctly: deleted assignee 1`] = `
               ],
             }
           }
-          onStatusChange={[MockFunction]}
+          onStatusChange={[Function]}
         />
       </div>
     </div>
@@ -2883,7 +2883,7 @@ exports[`should render correctly: unassigned 1`] = `
               ],
             }
           }
-          onStatusChange={[MockFunction]}
+          onStatusChange={[Function]}
         />
       </div>
     </div>