]> source.dussan.org Git - sonarqube.git/commitdiff
SONARCLOUD-568 Update label in admin panel
authorSiegfried Ehret <49895321+siegfried-ehret-sonarsource@users.noreply.github.com>
Thu, 2 May 2019 06:48:29 +0000 (08:48 +0200)
committersonartech <sonartech@sonarsource.com>
Mon, 6 May 2019 09:01:13 +0000 (11:01 +0200)
* SONARCLOUD-568 Update label in admin panel

* Fix react error about missing key

* SONARCLOUD-568 Rename parameter

* fixup! SONARCLOUD-568 Update label in admin panel

* fixup! SONARCLOUD-568 Rename parameter

server/sonar-web/src/main/js/apps/permissions/__tests__/utils-test.ts [new file with mode: 0644]
server/sonar-web/src/main/js/apps/permissions/shared/components/PermissionHeader.tsx
server/sonar-web/src/main/js/apps/permissions/utils.ts
sonar-core/src/main/resources/org/sonar/l10n/core.properties

diff --git a/server/sonar-web/src/main/js/apps/permissions/__tests__/utils-test.ts b/server/sonar-web/src/main/js/apps/permissions/__tests__/utils-test.ts
new file mode 100644 (file)
index 0000000..ddfbf54
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+import { convertToPermissionDefinitions } from '../utils';
+import { isSonarCloud } from '../../../helpers/system';
+import { resetBundle } from '../../../helpers/l10n';
+
+jest.mock('../../../helpers/system', () => ({ isSonarCloud: jest.fn() }));
+
+afterEach(() => {
+  resetBundle({});
+});
+
+describe('convertToPermissionDefinitions', () => {
+  it('should convert and translate a permission definition', () => {
+    (isSonarCloud as jest.Mock).mockImplementation(() => false);
+
+    resetBundle({
+      'global_permissions.admin': 'Administer System'
+    });
+
+    const data = convertToPermissionDefinitions(['admin'], 'global_permissions');
+    const expected = [
+      { description: 'global_permissions.admin.desc', key: 'admin', name: 'Administer System' }
+    ];
+
+    expect(data).toEqual(expected);
+  });
+
+  it('should convert and translate a permission definition for SonarCloud', () => {
+    (isSonarCloud as jest.Mock).mockImplementation(() => true);
+
+    resetBundle({
+      'global_permissions.admin': 'Administer System',
+      'global_permissions.admin.sonarcloud': 'Administer Organization'
+    });
+
+    const data = convertToPermissionDefinitions(['admin'], 'global_permissions');
+    const expected = [
+      {
+        description: 'global_permissions.admin.desc',
+        key: 'admin',
+        name: 'Administer Organization'
+      }
+    ];
+
+    expect(data).toEqual(expected);
+  });
+
+  it('should fallback to basic message when SonarCloud version does not exist', () => {
+    (isSonarCloud as jest.Mock).mockImplementation(() => true);
+
+    resetBundle({
+      'global_permissions.admin': 'Administer System'
+    });
+
+    const data = convertToPermissionDefinitions(['admin'], 'global_permissions');
+    const expected = [
+      { description: 'global_permissions.admin.desc', key: 'admin', name: 'Administer System' }
+    ];
+
+    expect(data).toEqual(expected);
+  });
+});
index dbfc178113a930f3da379f2c00d91f800d174079..ca399cef646a7c091770a8331aba24154064e5fd 100644 (file)
@@ -48,11 +48,11 @@ export default class PermissionHeader extends React.PureComponent<Props> {
 
     if (isPermissionDefinitionGroup(permission)) {
       return permission.permissions.map(permission => (
-        <>
+        <React.Fragment key={permission.key}>
           <b className="little-spacer-right">{permission.name}:</b>
           <InstanceMessage key={permission.key} message={permission.description} />
           <br />
-        </>
+        </React.Fragment>
       ));
     } else {
       if (this.props.showPublicProjectsWarning && ['user', 'codeviewer'].includes(permission.key)) {
index 4f44cdb3f2598fee3ccb78c8ba91de391a7c998a..5334441715c65e341f1696bf70bcec7ed12e12f1 100644 (file)
@@ -17,7 +17,8 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { translate } from '../../helpers/l10n';
+import { hasMessage, translate } from '../../helpers/l10n';
+import { isSonarCloud } from '../../helpers/system';
 
 export const PERMISSIONS_ORDER_FOR_PROJECT_TEMPLATE = [
   'user',
@@ -55,10 +56,20 @@ export const PERMISSIONS_ORDER_BY_QUALIFIER: T.Dict<string[]> = {
 };
 
 function convertToPermissionDefinition(permission: string, l10nPrefix: string) {
+  const getMessage = (messageKey: string) => {
+    const cloudMessageKey = `${messageKey}.sonarcloud`;
+    return isSonarCloud() && hasMessage(cloudMessageKey)
+      ? translate(cloudMessageKey)
+      : translate(messageKey);
+  };
+
+  const name = getMessage(`${l10nPrefix}.${permission}`);
+  const description = getMessage(`${l10nPrefix}.${permission}.desc`);
+
   return {
     key: permission,
-    name: translate(l10nPrefix, permission),
-    description: translate(l10nPrefix, permission, 'desc')
+    name,
+    description
   };
 }
 
index 11bb38d2367286332a71b7f5146eb91bebe52739..d2839e1f4b50adab751b493a956867f5ac862e1b 100644 (file)
@@ -2048,7 +2048,9 @@ global_permissions.groups=Groups
 global_permissions.administer=Administer
 global_permissions.creator=Create
 global_permissions.admin=Administer System
+global_permissions.admin.sonarcloud=Administer Organization
 global_permissions.admin.desc=Ability to perform all administration functions for the instance.
+global_permissions.admin.desc.sonarcloud=Ability to perform all administration functions for the organization.
 global_permissions.profileadmin=Quality Profiles
 global_permissions.profileadmin.desc=Ability to perform any action on quality profiles.
 global_permissions.gateadmin=Quality Gates