From b5938da48e95d277c3c99bcdeca28f4713442c9f Mon Sep 17 00:00:00 2001 From: Siegfried Ehret <49895321+siegfried-ehret-sonarsource@users.noreply.github.com> Date: Thu, 2 May 2019 08:48:29 +0200 Subject: [PATCH] SONARCLOUD-568 Update label in admin panel * 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 --- .../apps/permissions/__tests__/utils-test.ts | 80 +++++++++++++++++++ .../shared/components/PermissionHeader.tsx | 4 +- .../src/main/js/apps/permissions/utils.ts | 17 +++- .../resources/org/sonar/l10n/core.properties | 2 + 4 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 server/sonar-web/src/main/js/apps/permissions/__tests__/utils-test.ts 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 index 00000000000..ddfbf54fc1b --- /dev/null +++ b/server/sonar-web/src/main/js/apps/permissions/__tests__/utils-test.ts @@ -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); + }); +}); diff --git a/server/sonar-web/src/main/js/apps/permissions/shared/components/PermissionHeader.tsx b/server/sonar-web/src/main/js/apps/permissions/shared/components/PermissionHeader.tsx index dbfc178113a..ca399cef646 100644 --- a/server/sonar-web/src/main/js/apps/permissions/shared/components/PermissionHeader.tsx +++ b/server/sonar-web/src/main/js/apps/permissions/shared/components/PermissionHeader.tsx @@ -48,11 +48,11 @@ export default class PermissionHeader extends React.PureComponent { if (isPermissionDefinitionGroup(permission)) { return permission.permissions.map(permission => ( - <> + {permission.name}:
- +
)); } else { if (this.props.showPublicProjectsWarning && ['user', 'codeviewer'].includes(permission.key)) { diff --git a/server/sonar-web/src/main/js/apps/permissions/utils.ts b/server/sonar-web/src/main/js/apps/permissions/utils.ts index 4f44cdb3f25..5334441715c 100644 --- a/server/sonar-web/src/main/js/apps/permissions/utils.ts +++ b/server/sonar-web/src/main/js/apps/permissions/utils.ts @@ -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 = { }; 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 }; } diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties index 11bb38d2367..d2839e1f4b5 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -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 -- 2.39.5