]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-12727 Fix initial filtering
authorJeremy Davis <jeremy.davis@sonarsource.com>
Tue, 7 Jan 2020 16:44:20 +0000 (17:44 +0100)
committerSonarTech <sonartech@sonarsource.com>
Mon, 13 Jan 2020 19:46:36 +0000 (20:46 +0100)
server/sonar-web/src/main/js/apps/securityHotspots/SecurityHotspotsApp.tsx
server/sonar-web/src/main/js/apps/securityHotspots/__tests__/SecurityHotspotsApp-test.tsx
server/sonar-web/src/main/js/apps/securityHotspots/__tests__/SecurityHotspotsAppRenderer-test.tsx
server/sonar-web/src/main/js/apps/securityHotspots/__tests__/__snapshots__/SecurityHotspotsApp-test.tsx.snap
server/sonar-web/src/main/js/apps/securityHotspots/__tests__/__snapshots__/SecurityHotspotsAppRenderer-test.tsx.snap
server/sonar-web/src/main/js/apps/securityHotspots/components/FilterBar.tsx
server/sonar-web/src/main/js/apps/securityHotspots/components/__tests__/FilterBar-test.tsx
server/sonar-web/src/main/js/types/security-hotspots.ts

index 1e8f7221f4ad530faab23fcf8b1e9328217a0db6..8af095d3ca75bbf7df261d06c3f3419a72f176ae 100644 (file)
@@ -99,7 +99,7 @@ export class SecurityHotspotsApp extends React.PureComponent<Props, State> {
       !isSameBranchLike(this.props.branchLike, previous.branchLike) ||
       isLoggedIn(this.props.currentUser) !== isLoggedIn(previous.currentUser) ||
       this.props.location.query.assignedToMe !== previous.location.query.assignedToMe ||
-      this.props.location.query.newCode !== previous.location.query.newCode
+      this.props.location.query.sinceLeakPeriod !== previous.location.query.sinceLeakPeriod
     ) {
       this.setState(({ filters }) => ({
         filters: { ...this.constructFiltersFromProps, ...filters }
@@ -112,13 +112,13 @@ export class SecurityHotspotsApp extends React.PureComponent<Props, State> {
     this.mounted = false;
   }
 
-  constructFiltersFromProps(props: Props): Pick<HotspotFilters, 'assignedToMe' | 'newCode'> {
+  constructFiltersFromProps(
+    props: Props
+  ): Pick<HotspotFilters, 'assignedToMe' | 'sinceLeakPeriod'> {
     return {
-      assignedToMe:
-        props.location.query.assignedToMe !== undefined
-          ? props.location.query.assignedToMe === 'true'
-          : isLoggedIn(props.currentUser),
-      newCode: isPullRequest(props.branchLike) || props.location.query.newCode === 'true'
+      assignedToMe: props.location.query.assignedToMe === 'true' && isLoggedIn(props.currentUser),
+      sinceLeakPeriod:
+        isPullRequest(props.branchLike) || props.location.query.sinceLeakPeriod === 'true'
     };
   }
 
@@ -180,7 +180,7 @@ export class SecurityHotspotsApp extends React.PureComponent<Props, State> {
       status,
       resolution,
       onlyMine: filters.assignedToMe,
-      sinceLeakPeriod: filters.newCode,
+      sinceLeakPeriod: filters.sinceLeakPeriod,
       ...getBranchLikeQuery(branchLike)
     });
   }
index 15315cd7c8fa18dbcd2d12baf5d9769d112803b3..8d42b5b6748e89081e2e04b5a132958271212494 100644 (file)
@@ -29,6 +29,7 @@ import {
   mockComponent,
   mockCurrentUser,
   mockLocation,
+  mockLoggedInUser,
   mockRouter
 } from '../../../helpers/testMocks';
 import {
@@ -143,11 +144,30 @@ it('should load data correctly when hotspot key list is forced', async () => {
 });
 
 it('should set "leakperiod" filter according to context (branchlike & location query)', () => {
-  expect(shallowRender().state().filters.newCode).toBe(false);
-  expect(shallowRender({ branchLike: mockPullRequest() }).state().filters.newCode).toBe(true);
+  expect(shallowRender().state().filters.sinceLeakPeriod).toBe(false);
+  expect(shallowRender({ branchLike: mockPullRequest() }).state().filters.sinceLeakPeriod).toBe(
+    true
+  );
+  expect(
+    shallowRender({ location: mockLocation({ query: { sinceLeakPeriod: 'true' } }) }).state()
+      .filters.sinceLeakPeriod
+  ).toBe(true);
+});
+
+it('should set "assigned to me" filter according to context (logged in & explicit location query)', () => {
+  expect(shallowRender().state().filters.assignedToMe).toBe(false);
+  expect(
+    shallowRender({ location: mockLocation({ query: { assignedToMe: 'true' } }) }).state().filters
+      .assignedToMe
+  ).toBe(false);
+  expect(shallowRender({ currentUser: mockLoggedInUser() }).state().filters.assignedToMe).toBe(
+    false
+  );
   expect(
-    shallowRender({ location: mockLocation({ query: { newCode: 'true' } }) }).state().filters
-      .newCode
+    shallowRender({
+      location: mockLocation({ query: { assignedToMe: 'true' } }),
+      currentUser: mockLoggedInUser()
+    }).state().filters.assignedToMe
   ).toBe(true);
 });
 
index 4be898d2b22e59ab13d69bb873aa5f0f00c13798..f970783dc170926c299c2d0c277013697e50328e 100644 (file)
@@ -67,7 +67,7 @@ function shallowRender(props: Partial<SecurityHotspotsAppRendererProps> = {}) {
     <SecurityHotspotsAppRenderer
       filters={{
         assignedToMe: false,
-        newCode: false,
+        sinceLeakPeriod: false,
         status: HotspotStatusFilter.TO_REVIEW
       }}
       hotspots={[]}
index 04a9a9b4fd58c8f18b079a232e2bc702d1fda721..2cda8bd69a67e33bb9b2f6cff2c74c1eb6fd3219 100644 (file)
@@ -13,7 +13,7 @@ exports[`should render correctly 1`] = `
   filters={
     Object {
       "assignedToMe": false,
-      "newCode": false,
+      "sinceLeakPeriod": false,
       "status": "TO_REVIEW",
     }
   }
index 01dc28affce5596cfa711e60bc0b3fae58b0c61b..faabd3defb8d77bce28f183aee5983000fa96078 100644 (file)
@@ -8,7 +8,7 @@ exports[`should render correctly 1`] = `
     filters={
       Object {
         "assignedToMe": false,
-        "newCode": false,
+        "sinceLeakPeriod": false,
         "status": "TO_REVIEW",
       }
     }
index 2a44cac2d275eef30a2815f34be182ddad6bf7dd..b108b52b4904feb7fe1cbec0977b8e7a5d8f4a67 100644 (file)
@@ -97,11 +97,11 @@ export function FilterBar(props: FilterBarProps) {
               className="input-medium big-spacer-right"
               clearable={false}
               onChange={(option: { value: boolean }) =>
-                props.onChangeFilters({ newCode: option.value })
+                props.onChangeFilters({ sinceLeakPeriod: option.value })
               }
               options={periodOptions}
               searchable={false}
-              value={filters.newCode}
+              value={filters.sinceLeakPeriod}
             />
           )}
         </>
index 88363cc7d03f57269287f8b062ab5534689f63a8..8a7a32c18779b14e86700e3a73498224e5d64342 100644 (file)
@@ -86,7 +86,7 @@ it('should trigger onChange for leak period', () => {
     return fail("Select's onChange should be defined");
   }
   onChange({ value: true });
-  expect(onChangeFilters).toBeCalledWith({ newCode: true });
+  expect(onChangeFilters).toBeCalledWith({ sinceLeakPeriod: true });
 });
 
 function shallowRender(props: Partial<FilterBarProps> = {}) {
@@ -95,7 +95,7 @@ function shallowRender(props: Partial<FilterBarProps> = {}) {
       currentUser={mockCurrentUser()}
       filters={{
         assignedToMe: false,
-        newCode: false,
+        sinceLeakPeriod: false,
         status: HotspotStatusFilter.TO_REVIEW
       }}
       isStaticListOfHotspots={false}
index 1c3cebe18870aacb72dec60d3bce6c4c6ba090e5..db11ef566b9e67952abd92c27950c8d3da67154c 100644 (file)
@@ -47,7 +47,7 @@ export enum HotspotStatusOption {
 
 export interface HotspotFilters {
   assignedToMe: boolean;
-  newCode: boolean;
+  sinceLeakPeriod: boolean;
   status: HotspotStatusFilter;
 }