]> source.dussan.org Git - sonarqube.git/commitdiff
SONARCLOUD-517 Hide organization binding link for non admin users
authorSiegfried Ehret <49895321+siegfried-ehret-sonarsource@users.noreply.github.com>
Thu, 2 May 2019 06:46:39 +0000 (08:46 +0200)
committersonartech <sonartech@sonarsource.com>
Mon, 6 May 2019 09:01:13 +0000 (11:01 +0200)
* SONARCLOUD-517 Hide organization binding link for non admin users

* SONARCLOUD-517 Update tests

server/sonar-web/src/main/js/apps/organizations/navigation/OrganizationNavigationHeader.tsx
server/sonar-web/src/main/js/apps/organizations/navigation/__tests__/OrganizationNavigationHeader-test.tsx
server/sonar-web/src/main/js/apps/organizations/navigation/__tests__/__snapshots__/OrganizationNavigationHeader-test.tsx.snap

index 28b8d1cb6d9b7848a85f1debce02864ac56eb9c3..9de2144b635a67b0b877c39661b31996ab7dc074 100644 (file)
@@ -45,6 +45,7 @@ export default function OrganizationNavigationHeader({
   organizations
 }: Props) {
   const other = organizations.filter(o => o.key !== organization.key);
+  const isAdmin = organization.actions && organization.actions.admin;
 
   let almKey;
   let tooltipContent;
@@ -66,10 +67,14 @@ export default function OrganizationNavigationHeader({
     tooltipContent = (
       <>
         <p>{translateWithParameters('organization.not_bound_to_x', translate(almKey))}</p>
-        <hr className="spacer-top spacer-bottom" />
-        <Link to={`/organizations/${organization.key}/edit`}>
-          {translate('organization.go_to_settings_to_bind')}
-        </Link>
+        {isAdmin && (
+          <>
+            <hr className="spacer-top spacer-bottom" />
+            <Link to={`/organizations/${organization.key}/edit`}>
+              {translate('organization.go_to_settings_to_bind')}
+            </Link>
+          </>
+        )}
       </>
     );
     tooltipIconSrc = `${getBaseUrl()}/images/sonarcloud/${almKey}-unbound.svg`;
index abd265629e3f4ce8e5dad96f5597759310324e58..ab3816953c8866932cba5fe3d426e81421ccb334 100644 (file)
@@ -42,6 +42,38 @@ it('renders for external user w/o alm integration', () => {
   ).toMatchSnapshot();
 });
 
+it('renders with the organization tooltip for an admin user of an organization', () => {
+  expect(
+    shallowRender({
+      currentUser: mockLoggedInUser({
+        externalProvider: 'github'
+      }),
+      organization: {
+        actions: { admin: true },
+        key: 'org1',
+        name: 'org1',
+        projectVisibility: 'public'
+      }
+    }).find('Tooltip')
+  ).toMatchSnapshot();
+});
+
+it('renders without the organization tooltip for a non-admin user of an organization', () => {
+  expect(
+    shallowRender({
+      currentUser: mockLoggedInUser({
+        externalProvider: 'github'
+      }),
+      organization: {
+        actions: { admin: false },
+        key: 'org1',
+        name: 'org1',
+        projectVisibility: 'public'
+      }
+    }).find('Tooltip')
+  ).toMatchSnapshot();
+});
+
 it('renders dropdown', () => {
   const organizations: T.Organization[] = [
     { actions: { admin: true }, key: 'org1', name: 'org1', projectVisibility: 'public' },
index c580daad4e27aabee12fc844270768720f5118be..828f54920e8c90d9d3b9bbd266af7094e0c2cc05 100644 (file)
@@ -92,16 +92,6 @@ exports[`renders for external user w/o alm integration 1`] = `
         <p>
           organization.not_bound_to_x.github
         </p>
-        <hr
-          className="spacer-top spacer-bottom"
-        />
-        <Link
-          onlyActiveOnIndex={false}
-          style={Object {}}
-          to="/organizations/foo/edit"
-        >
-          organization.go_to_settings_to_bind
-        </Link>
       </React.Fragment>
     }
   >
@@ -169,3 +159,57 @@ exports[`renders with alm integration 1`] = `
   </Tooltip>
 </header>
 `;
+
+exports[`renders with the organization tooltip for an admin user of an organization 1`] = `
+<Tooltip
+  mouseLeaveDelay={0.25}
+  overlay={
+    <React.Fragment>
+      <p>
+        organization.not_bound_to_x.github
+      </p>
+      <React.Fragment>
+        <hr
+          className="spacer-top spacer-bottom"
+        />
+        <Link
+          onlyActiveOnIndex={false}
+          style={Object {}}
+          to="/organizations/org1/edit"
+        >
+          organization.go_to_settings_to_bind
+        </Link>
+      </React.Fragment>
+    </React.Fragment>
+  }
+>
+  <img
+    alt="github"
+    className="text-middle spacer-left"
+    height={16}
+    src="/images/sonarcloud/github-unbound.svg"
+    width={16}
+  />
+</Tooltip>
+`;
+
+exports[`renders without the organization tooltip for a non-admin user of an organization 1`] = `
+<Tooltip
+  mouseLeaveDelay={0.25}
+  overlay={
+    <React.Fragment>
+      <p>
+        organization.not_bound_to_x.github
+      </p>
+    </React.Fragment>
+  }
+>
+  <img
+    alt="github"
+    className="text-middle spacer-left"
+    height={16}
+    src="/images/sonarcloud/github-unbound.svg"
+    width={16}
+  />
+</Tooltip>
+`;