aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web
diff options
context:
space:
mode:
authorWouter Admiraal <wouter.admiraal@sonarsource.com>2019-12-05 16:03:08 +0100
committerSonarTech <sonartech@sonarsource.com>2019-12-09 20:46:18 +0100
commit6bc6f772716da5677aebf976d27e39aa74143d8d (patch)
tree3fdb4279484068ba652669c7e575d90df8f438d7 /server/sonar-web
parent1e46ff31c0749103915596d5ebdd7d5080000d40 (diff)
downloadsonarqube-6bc6f772716da5677aebf976d27e39aa74143d8d.tar.gz
sonarqube-6bc6f772716da5677aebf976d27e39aa74143d8d.zip
SONAR-12512 SONAR-12514 SONAR-12515 Limit binding to 1 if multi ALM is not enabled
Diffstat (limited to 'server/sonar-web')
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/AzureTabRenderer.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/BitbucketTabRenderer.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/GithubTabRenderer.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/TabHeader.tsx22
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/TabHeader-test.tsx27
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/AzureTabRenderer-test.tsx.snap9
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/BitbucketTabRenderer-test.tsx.snap9
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/GithubTabRenderer-test.tsx.snap9
-rw-r--r--server/sonar-web/src/main/js/types/types.d.ts1
9 files changed, 76 insertions, 19 deletions
diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/AzureTabRenderer.tsx b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/AzureTabRenderer.tsx
index 6d977223c61..db6a806d09d 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/AzureTabRenderer.tsx
+++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/AzureTabRenderer.tsx
@@ -40,7 +40,11 @@ export default function AzureTabRenderer(props: AzureTabRendererProps) {
const { definitions, editedDefinition, loading } = props;
return (
<>
- <TabHeader alm={ALM_KEYS.AZURE} onCreate={props.onCreate} />
+ <TabHeader
+ alm={ALM_KEYS.AZURE}
+ definitionCount={definitions.length}
+ onCreate={props.onCreate}
+ />
<DeferredSpinner loading={loading}>
<AlmPRDecorationTable
diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/BitbucketTabRenderer.tsx b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/BitbucketTabRenderer.tsx
index 10540fcf851..5b791d83461 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/BitbucketTabRenderer.tsx
+++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/BitbucketTabRenderer.tsx
@@ -41,7 +41,11 @@ export default function BitbucketTabRenderer(props: BitbucketTabRendererProps) {
const { definitions, editedDefinition, loading } = props;
return (
<>
- <TabHeader alm={ALM_KEYS.BITBUCKET} onCreate={props.onCreate} />
+ <TabHeader
+ alm={ALM_KEYS.BITBUCKET}
+ definitionCount={definitions.length}
+ onCreate={props.onCreate}
+ />
<DeferredSpinner loading={loading}>
<AlmPRDecorationTable
diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/GithubTabRenderer.tsx b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/GithubTabRenderer.tsx
index b33fe013bda..c03ec15d8b1 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/GithubTabRenderer.tsx
+++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/GithubTabRenderer.tsx
@@ -41,7 +41,11 @@ export default function GithubTabRenderer(props: GithubTabRendererProps) {
const { definitions, editedDefinition, loading } = props;
return (
<>
- <TabHeader alm={ALM_KEYS.GITHUB} onCreate={props.onCreate} />
+ <TabHeader
+ alm={ALM_KEYS.GITHUB}
+ definitionCount={definitions.length}
+ onCreate={props.onCreate}
+ />
<DeferredSpinner loading={loading}>
<AlmPRDecorationTable
diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/TabHeader.tsx b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/TabHeader.tsx
index 0ad31c0d701..c0afb6b7176 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/TabHeader.tsx
+++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/TabHeader.tsx
@@ -23,15 +23,23 @@ import { Link } from 'react-router';
import { Button } from 'sonar-ui-common/components/controls/buttons';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import { withAppState } from '../../../../components/hoc/withAppState';
import { ALM_KEYS } from '../../../../types/alm-settings';
export interface TabHeaderProps {
alm: ALM_KEYS;
+ appState: Pick<T.AppState, 'multipleAlmEnabled'>;
+ definitionCount: number;
onCreate: () => void;
}
-export default function TabHeader(props: TabHeaderProps) {
- const { alm } = props;
+export function TabHeader(props: TabHeaderProps) {
+ const {
+ alm,
+ appState: { multipleAlmEnabled },
+ definitionCount
+ } = props;
+ const showButton = multipleAlmEnabled || definitionCount === 0;
return (
<>
<Alert className="spacer-top huge-spacer-bottom" variant="info">
@@ -50,10 +58,14 @@ export default function TabHeader(props: TabHeaderProps) {
<div className="big-spacer-bottom display-flex-space-between">
<h4 className="display-inline">{translate('settings.pr_decoration.table.title')}</h4>
- <Button data-test="settings__alm-create" onClick={props.onCreate}>
- {translate('settings.pr_decoration.table.create')}
- </Button>
+ {showButton && (
+ <Button data-test="settings__alm-create" onClick={props.onCreate}>
+ {translate('settings.pr_decoration.table.create')}
+ </Button>
+ )}
</div>
</>
);
}
+
+export default withAppState(TabHeader);
diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/TabHeader-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/TabHeader-test.tsx
index 23d743d17cd..d97e88eee6c 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/TabHeader-test.tsx
+++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/TabHeader-test.tsx
@@ -19,14 +19,37 @@
*/
import { shallow } from 'enzyme';
import * as React from 'react';
+import { Button } from 'sonar-ui-common/components/controls/buttons';
import { ALM_KEYS } from '../../../../../types/alm-settings';
-import TabHeader, { TabHeaderProps } from '../TabHeader';
+import { TabHeader, TabHeaderProps } from '../TabHeader';
it('should render correctly', () => {
expect(shallowRender(ALM_KEYS.AZURE)).toMatchSnapshot();
expect(shallowRender(ALM_KEYS.GITHUB)).toMatchSnapshot();
});
+it('should only show the create button if certain conditions are met', () => {
+ expect(
+ shallowRender(ALM_KEYS.GITHUB, { appState: { multipleAlmEnabled: false }, definitionCount: 1 })
+ .find(Button)
+ .exists()
+ ).toBe(false);
+
+ expect(
+ shallowRender(ALM_KEYS.GITHUB, { appState: { multipleAlmEnabled: false }, definitionCount: 0 })
+ .find(Button)
+ .exists()
+ ).toBe(true);
+
+ expect(
+ shallowRender(ALM_KEYS.GITHUB, { appState: { multipleAlmEnabled: true }, definitionCount: 5 })
+ .find(Button)
+ .exists()
+ ).toBe(true);
+});
+
function shallowRender(alm: ALM_KEYS, props: Partial<TabHeaderProps> = {}) {
- return shallow(<TabHeader alm={alm} onCreate={jest.fn()} {...props} />);
+ return shallow(
+ <TabHeader alm={alm} appState={{}} definitionCount={0} onCreate={jest.fn()} {...props} />
+ );
}
diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/AzureTabRenderer-test.tsx.snap b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/AzureTabRenderer-test.tsx.snap
index 2318d371dac..0e6a491e86a 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/AzureTabRenderer-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/AzureTabRenderer-test.tsx.snap
@@ -2,8 +2,9 @@
exports[`should render correctly 1`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="azure"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
@@ -23,8 +24,9 @@ exports[`should render correctly 1`] = `
exports[`should render correctly 2`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="azure"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
@@ -44,8 +46,9 @@ exports[`should render correctly 2`] = `
exports[`should render correctly 3`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="azure"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/BitbucketTabRenderer-test.tsx.snap b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/BitbucketTabRenderer-test.tsx.snap
index 53fbc57bff4..65b1f534c8a 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/BitbucketTabRenderer-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/BitbucketTabRenderer-test.tsx.snap
@@ -2,8 +2,9 @@
exports[`should render correctly 1`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="bitbucket"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
@@ -27,8 +28,9 @@ exports[`should render correctly 1`] = `
exports[`should render correctly 2`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="bitbucket"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
@@ -52,8 +54,9 @@ exports[`should render correctly 2`] = `
exports[`should render correctly 3`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="bitbucket"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/GithubTabRenderer-test.tsx.snap b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/GithubTabRenderer-test.tsx.snap
index 2722fbecd81..50af2ec9f00 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/GithubTabRenderer-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecoration/__tests__/__snapshots__/GithubTabRenderer-test.tsx.snap
@@ -2,8 +2,9 @@
exports[`should render correctly 1`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="github"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
@@ -28,8 +29,9 @@ exports[`should render correctly 1`] = `
exports[`should render correctly 2`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="github"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
@@ -54,8 +56,9 @@ exports[`should render correctly 2`] = `
exports[`should render correctly 3`] = `
<Fragment>
- <TabHeader
+ <Connect(withAppState(TabHeader))
alm="github"
+ definitionCount={0}
onCreate={[MockFunction]}
/>
<DeferredSpinner
diff --git a/server/sonar-web/src/main/js/types/types.d.ts b/server/sonar-web/src/main/js/types/types.d.ts
index bf1e9254dcd..38c972c182d 100644
--- a/server/sonar-web/src/main/js/types/types.d.ts
+++ b/server/sonar-web/src/main/js/types/types.d.ts
@@ -99,6 +99,7 @@ declare namespace T {
defaultOrganization: string;
edition: 'community' | 'developer' | 'enterprise' | 'datacenter' | undefined;
globalPages?: Extension[];
+ multipleAlmEnabled?: boolean;
organizationsEnabled?: boolean;
productionDatabase: boolean;
qualifiers: string[];