diff options
author | Wouter Admiraal <wouter.admiraal@sonarsource.com> | 2019-12-05 16:03:08 +0100 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2019-12-09 20:46:18 +0100 |
commit | 6bc6f772716da5677aebf976d27e39aa74143d8d (patch) | |
tree | 3fdb4279484068ba652669c7e575d90df8f438d7 /server/sonar-web | |
parent | 1e46ff31c0749103915596d5ebdd7d5080000d40 (diff) | |
download | sonarqube-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')
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[]; |