diff options
author | Wouter Admiraal <wouter.admiraal@sonarsource.com> | 2020-04-17 17:54:50 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2020-05-04 20:03:53 +0000 |
commit | 1d854eec0d3e223aee54412503fcccf50ee10f4a (patch) | |
tree | 1beb3ccad44ee3e1893199606aba28d3fe313c37 /server/sonar-web/src | |
parent | be46fdae92760199df04ba7d6f251e6a91026f84 (diff) | |
download | sonarqube-1d854eec0d3e223aee54412503fcccf50ee10f4a.tar.gz sonarqube-1d854eec0d3e223aee54412503fcccf50ee10f4a.zip |
SONAR-13296 Re-organize tutorial components and ALM-related types
Diffstat (limited to 'server/sonar-web/src')
64 files changed, 419 insertions, 185 deletions
diff --git a/server/sonar-web/src/main/js/api/alm-settings.ts b/server/sonar-web/src/main/js/api/alm-settings.ts index 6ac6b1c0963..5b70298a7c4 100644 --- a/server/sonar-web/src/main/js/api/alm-settings.ts +++ b/server/sonar-web/src/main/js/api/alm-settings.ts @@ -23,14 +23,14 @@ import { AlmSettingsBindingDefinitions, AlmSettingsInstance, AzureBindingDefinition, - AzureProjectAlmBinding, + AzureProjectAlmBindingParams, BitbucketBindingDefinition, - BitbucketProjectAlmBinding, + BitbucketProjectAlmBindingParams, GithubBindingDefinition, - GithubProjectAlmBinding, + GithubProjectAlmBindingParams, GitlabBindingDefinition, - GitlabProjectAlmBinding, - ProjectAlmBinding + GitlabProjectAlmBindingParams, + ProjectAlmBindingResponse } from '../types/alm-settings'; export function getAlmDefinitions(): Promise<AlmSettingsBindingDefinitions> { @@ -87,7 +87,7 @@ export function countBindedProjects(almSetting: string) { .catch(throwGlobalError); } -export function getProjectAlmBinding(project: string): Promise<ProjectAlmBinding> { +export function getProjectAlmBinding(project: string): Promise<ProjectAlmBindingResponse> { return getJSON('/api/alm_settings/get_binding', { project }); } @@ -95,18 +95,18 @@ export function deleteProjectAlmBinding(project: string): Promise<void> { return post('/api/alm_settings/delete_binding', { project }).catch(throwGlobalError); } -export function setProjectAzureBinding(data: AzureProjectAlmBinding) { +export function setProjectAzureBinding(data: AzureProjectAlmBindingParams) { return post('/api/alm_settings/set_azure_binding', data).catch(throwGlobalError); } -export function setProjectBitbucketBinding(data: BitbucketProjectAlmBinding) { +export function setProjectBitbucketBinding(data: BitbucketProjectAlmBindingParams) { return post('/api/alm_settings/set_bitbucket_binding', data).catch(throwGlobalError); } -export function setProjectGithubBinding(data: GithubProjectAlmBinding) { +export function setProjectGithubBinding(data: GithubProjectAlmBindingParams) { return post('/api/alm_settings/set_github_binding', data).catch(throwGlobalError); } -export function setProjectGitlabBinding(data: GitlabProjectAlmBinding) { +export function setProjectGitlabBinding(data: GitlabProjectAlmBindingParams) { return post('/api/alm_settings/set_gitlab_binding', data).catch(throwGlobalError); } diff --git a/server/sonar-web/src/main/js/apps/create/organization/CreateOrganization.tsx b/server/sonar-web/src/main/js/apps/create/organization/CreateOrganization.tsx index f074bde4aaa..ac6a60056f8 100644 --- a/server/sonar-web/src/main/js/apps/create/organization/CreateOrganization.tsx +++ b/server/sonar-web/src/main/js/apps/create/organization/CreateOrganization.tsx @@ -47,7 +47,6 @@ import { hasAdvancedALMIntegration, sanitizeAlmId } from '../../../helpers/almIn import { getOrganizationUrl } from '../../../helpers/urls'; import { skipOnboarding } from '../../../store/users'; import { deleteOrganization } from '../../organizations/actions'; -import '../../tutorials/styles.css'; // TODO remove me import { createOrganization } from './actions'; import AlmApplicationInstalling from './AlmApplicationInstalling'; import AutoOrganizationCreate from './AutoOrganizationCreate'; diff --git a/server/sonar-web/src/main/js/apps/create/organization/OrganizationDetailsStep.tsx b/server/sonar-web/src/main/js/apps/create/organization/OrganizationDetailsStep.tsx index bc1e5972dd7..91b45c1e44f 100644 --- a/server/sonar-web/src/main/js/apps/create/organization/OrganizationDetailsStep.tsx +++ b/server/sonar-web/src/main/js/apps/create/organization/OrganizationDetailsStep.tsx @@ -20,7 +20,7 @@ import * as React from 'react'; import AlertSuccessIcon from 'sonar-ui-common/components/icons/AlertSuccessIcon'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import Step from '../../tutorials/components/Step'; +import Step from '../../../components/tutorials/components/Step'; interface Props { children: React.ReactNode; diff --git a/server/sonar-web/src/main/js/apps/create/organization/PlanStep.tsx b/server/sonar-web/src/main/js/apps/create/organization/PlanStep.tsx index 8c15bee7ab5..042210cee1e 100644 --- a/server/sonar-web/src/main/js/apps/create/organization/PlanStep.tsx +++ b/server/sonar-web/src/main/js/apps/create/organization/PlanStep.tsx @@ -22,8 +22,8 @@ import { SubmitButton } from 'sonar-ui-common/components/controls/buttons'; import DeferredSpinner from 'sonar-ui-common/components/ui/DeferredSpinner'; import { translate } from 'sonar-ui-common/helpers/l10n'; import { withCurrentUser } from '../../../components/hoc/withCurrentUser'; +import Step from '../../../components/tutorials/components/Step'; import { getExtensionStart } from '../../../helpers/extensions'; -import Step from '../../tutorials/components/Step'; import BillingFormShim from '../components/BillingFormShim'; import PlanSelect, { Plan } from './PlanSelect'; diff --git a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationEmpty.tsx b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationEmpty.tsx index 1b7d6cc8994..ec09e6c5e31 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationEmpty.tsx +++ b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationEmpty.tsx @@ -22,7 +22,7 @@ import { Button } from 'sonar-ui-common/components/controls/buttons'; import OnboardingAddMembersIcon from 'sonar-ui-common/components/icons/OnboardingAddMembersIcon'; import { translate } from 'sonar-ui-common/helpers/l10n'; import { Router, withRouter } from '../../../components/hoc/withRouter'; -import '../../tutorials/styles.css'; +import '../../../components/tutorials/styles.css'; import './OrganizationEmpty.css'; interface Props { diff --git a/server/sonar-web/src/main/js/apps/overview/components/EmptyOverview.tsx b/server/sonar-web/src/main/js/apps/overview/components/EmptyOverview.tsx index 633b7587789..c60873f126c 100644 --- a/server/sonar-web/src/main/js/apps/overview/components/EmptyOverview.tsx +++ b/server/sonar-web/src/main/js/apps/overview/components/EmptyOverview.tsx @@ -22,12 +22,12 @@ import { FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; import { Alert } from 'sonar-ui-common/components/ui/Alert'; import { translate } from 'sonar-ui-common/helpers/l10n'; +import AnalyzeTutorial from '../../../components/tutorials/manual/AnalyzeTutorial'; import { getBranchLikeDisplayName, isBranch, isMainBranch } from '../../../helpers/branch-like'; import { isLoggedIn } from '../../../helpers/users'; import { getCurrentUser, Store } from '../../../store/rootReducer'; import { BranchLike } from '../../../types/branch-like'; import { ComponentQualifier } from '../../../types/component'; -import AnalyzeTutorial from '../../tutorials/analyzeProject/AnalyzeTutorial'; interface Props { branchLike?: BranchLike; diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmBindingDefinitionForm-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmBindingDefinitionForm-test.tsx index 0a2b19abd9a..e532eb67759 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmBindingDefinitionForm-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmBindingDefinitionForm-test.tsx @@ -20,7 +20,7 @@ import { shallow } from 'enzyme'; import * as React from 'react'; import { waitAndUpdate } from 'sonar-ui-common/helpers/testUtils'; -import { mockGithubDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockGithubBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import { GithubBindingDefinition } from '../../../../../types/alm-settings'; import AlmBindingDefinitionForm from '../AlmBindingDefinitionForm'; @@ -29,14 +29,14 @@ it('should render correctly', () => { }); it('should reset if the props change', () => { - const bindingDefinition = mockGithubDefinition(); + const bindingDefinition = mockGithubBindingDefinition(); const wrapper = shallowRender({ bindingDefinition }); wrapper.setState({ formData: { ...bindingDefinition, appId: 'newAppId' }, touched: true }); wrapper.setProps({ bindingDefinition: { ...bindingDefinition } }); expect(wrapper.state('touched')).toBe(true); - wrapper.setProps({ bindingDefinition: mockGithubDefinition({ key: 'diffKey' }) }); + wrapper.setProps({ bindingDefinition: mockGithubBindingDefinition({ key: 'diffKey' }) }); expect(wrapper.state('touched')).toBe(false); }); @@ -90,7 +90,7 @@ it('should handle cancelling', () => { onCancel }); - wrapper.setState({ formData: mockGithubDefinition() }); + wrapper.setState({ formData: mockGithubBindingDefinition() }); wrapper.instance().handleCancel(); expect(wrapper.state().formData).toBe(bindingDefinition); @@ -99,7 +99,7 @@ it('should handle cancelling', () => { it('should handle deleting', () => { const onDelete = jest.fn(); - const bindingDefinition = mockGithubDefinition(); + const bindingDefinition = mockGithubBindingDefinition(); const wrapper = shallowRender({ bindingDefinition, onDelete @@ -113,14 +113,14 @@ it('should (dis)allow submit by validating its state', () => { const wrapper = shallowRender(); expect(wrapper.instance().canSubmit()).toBe(false); - wrapper.setState({ formData: mockGithubDefinition(), touched: true }); + wrapper.setState({ formData: mockGithubBindingDefinition(), touched: true }); expect(wrapper.instance().canSubmit()).toBe(true); - wrapper.setState({ formData: mockGithubDefinition({ key: '' }), touched: true }); + wrapper.setState({ formData: mockGithubBindingDefinition({ key: '' }), touched: true }); wrapper.setProps({ hideKeyField: true }); expect(wrapper.instance().canSubmit()).toBe(true); - wrapper.setState({ formData: mockGithubDefinition({ url: '' }), touched: true }); + wrapper.setState({ formData: mockGithubBindingDefinition({ url: '' }), touched: true }); wrapper.setProps({ optionalFields: ['url'] }); expect(wrapper.instance().canSubmit()).toBe(true); }); diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmTab-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmTab-test.tsx index 4e6fb6289d0..a6172bb85bb 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmTab-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmTab-test.tsx @@ -20,7 +20,7 @@ import { shallow } from 'enzyme'; import * as React from 'react'; import { waitAndUpdate } from 'sonar-ui-common/helpers/testUtils'; -import { mockAzureDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockAzureBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import { AlmKeys, AzureBindingDefinition } from '../../../../../types/alm-settings'; import AlmTab from '../AlmTab'; @@ -37,7 +37,7 @@ it('should handle cancel', async () => { const wrapper = shallowRender(); wrapper.setState({ - editedDefinition: mockAzureDefinition() + editedDefinition: mockAzureBindingDefinition() }); wrapper.instance().handleCancel(); @@ -48,7 +48,7 @@ it('should handle cancel', async () => { }); it('should handle edit', async () => { - const config = mockAzureDefinition(); + const config = mockAzureBindingDefinition(); const wrapper = shallowRender({ definitions: [config] }); wrapper.instance().handleEdit(config.key); await waitAndUpdate(wrapper); @@ -58,7 +58,7 @@ it('should handle edit', async () => { it('should create config', async () => { const onUpdateDefinitions = jest.fn(); const createConfiguration = jest.fn(() => Promise.resolve()); - const config = mockAzureDefinition(); + const config = mockAzureBindingDefinition(); const wrapper = shallowRender({ createConfiguration, onUpdateDefinitions }); wrapper.instance().handleCreate(); @@ -75,7 +75,7 @@ it('should create config', async () => { it('should update config', async () => { const onUpdateDefinitions = jest.fn(); const updateConfiguration = jest.fn(() => Promise.resolve()); - const config = mockAzureDefinition(); + const config = mockAzureBindingDefinition(); const wrapper = shallowRender({ onUpdateDefinitions, updateConfiguration }); wrapper.setState({ editedDefinition: config }); @@ -96,7 +96,7 @@ function shallowRender(props: Partial<AlmTab<AzureBindingDefinition>['props']> = alm={AlmKeys.Azure} createConfiguration={jest.fn()} defaultBinding={DEFAULT_BINDING} - definitions={[mockAzureDefinition()]} + definitions={[mockAzureBindingDefinition()]} form={jest.fn()} loading={false} multipleAlmEnabled={true} diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmTabRenderer-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmTabRenderer-test.tsx index d0fab91181d..4514ccf263f 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmTabRenderer-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AlmTabRenderer-test.tsx @@ -19,14 +19,14 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockGithubDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockGithubBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import { AlmKeys, GithubBindingDefinition } from '../../../../../types/alm-settings'; import AlmTabRenderer, { AlmTabRendererProps } from '../AlmTabRenderer'; it('should render correctly for multi-ALM binding', () => { expect(shallowRender({ loading: true })).toMatchSnapshot('loading'); expect(shallowRender()).toMatchSnapshot('loaded'); - expect(shallowRender({ editedDefinition: mockGithubDefinition() })).toMatchSnapshot( + expect(shallowRender({ editedDefinition: mockGithubBindingDefinition() })).toMatchSnapshot( 'editing a definition' ); expect( @@ -51,7 +51,7 @@ it('should render correctly for single-ALM binding', () => { expect(shallowRender({ loading: true, multipleAlmEnabled: false })).toMatchSnapshot(); expect(shallowRender({ multipleAlmEnabled: false })).toMatchSnapshot(); expect( - shallowRender({ definitions: [mockGithubDefinition()], multipleAlmEnabled: false }) + shallowRender({ definitions: [mockGithubBindingDefinition()], multipleAlmEnabled: false }) ).toMatchSnapshot(); }); @@ -61,8 +61,8 @@ function shallowRender(props: Partial<AlmTabRendererProps<GithubBindingDefinitio additionalColumnsHeaders={['url', 'app_id']} additionalColumnsKeys={['url', 'appId']} alm={AlmKeys.GitHub} - defaultBinding={mockGithubDefinition()} - definitions={[mockGithubDefinition()]} + defaultBinding={mockGithubBindingDefinition()} + definitions={[mockGithubBindingDefinition()]} form={jest.fn()} loading={false} multipleAlmEnabled={true} diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AzureForm-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AzureForm-test.tsx index 1d5fbb7472b..fe4a99102a0 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AzureForm-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AzureForm-test.tsx @@ -19,12 +19,12 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockAzureDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockAzureBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import AzureForm, { AzureFormProps } from '../AzureForm'; it('should render correctly', () => { expect(shallowRender()).toMatchSnapshot(); - expect(shallowRender({ formData: mockAzureDefinition() })).toMatchSnapshot(); + expect(shallowRender({ formData: mockAzureBindingDefinition() })).toMatchSnapshot(); }); function shallowRender(props: Partial<AzureFormProps> = {}) { diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AzureTab-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AzureTab-test.tsx index 16dba8d81cd..5b2389dda7c 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AzureTab-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/AzureTab-test.tsx @@ -19,7 +19,7 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockAzureDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockAzureBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import AzureTab, { AzureTabProps } from '../AzureTab'; it('should render correctly', () => { @@ -29,7 +29,7 @@ it('should render correctly', () => { function shallowRender(props: Partial<AzureTabProps> = {}) { return shallow( <AzureTab - definitions={[mockAzureDefinition()]} + definitions={[mockAzureBindingDefinition()]} loading={false} multipleAlmEnabled={true} onDelete={jest.fn()} diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/BitbucketForm-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/BitbucketForm-test.tsx index de693816844..af5548d793d 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/BitbucketForm-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/BitbucketForm-test.tsx @@ -19,12 +19,12 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockBitbucketDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockBitbucketBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import BitbucketForm, { BitbucketFormProps } from '../BitbucketForm'; it('should render correctly', () => { expect(shallowRender()).toMatchSnapshot(); - expect(shallowRender({ formData: mockBitbucketDefinition() })).toMatchSnapshot(); + expect(shallowRender({ formData: mockBitbucketBindingDefinition() })).toMatchSnapshot(); }); function shallowRender(props: Partial<BitbucketFormProps> = {}) { diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/BitbucketTab-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/BitbucketTab-test.tsx index 1cdb3162ad9..d1bfdcc5d49 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/BitbucketTab-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/BitbucketTab-test.tsx @@ -19,7 +19,7 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockBitbucketDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockBitbucketBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import BitbucketTab, { BitbucketTabProps } from '../BitbucketTab'; it('should render correctly', () => { @@ -29,7 +29,7 @@ it('should render correctly', () => { function shallowRender(props: Partial<BitbucketTabProps> = {}) { return shallow( <BitbucketTab - definitions={[mockBitbucketDefinition()]} + definitions={[mockBitbucketBindingDefinition()]} loading={false} multipleAlmEnabled={true} onDelete={jest.fn()} diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GithubForm-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GithubForm-test.tsx index b279b01ea22..e67edb9e294 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GithubForm-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GithubForm-test.tsx @@ -19,12 +19,12 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockGithubDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockGithubBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import GithubForm, { GithubFormProps } from '../GithubForm'; it('should render correctly', () => { expect(shallowRender()).toMatchSnapshot(); - expect(shallowRender({ formData: mockGithubDefinition() })).toMatchSnapshot(); + expect(shallowRender({ formData: mockGithubBindingDefinition() })).toMatchSnapshot(); }); function shallowRender(props: Partial<GithubFormProps> = {}) { diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GithubTab-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GithubTab-test.tsx index 15d6d36638d..51f3ec73ee0 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GithubTab-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GithubTab-test.tsx @@ -19,7 +19,7 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockGithubDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockGithubBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import GithubTab, { GithubTabProps } from '../GithubTab'; it('should render correctly', () => { @@ -31,7 +31,7 @@ function shallowRender(props: Partial<GithubTabProps> = {}) { return shallow( <GithubTab branchesEnabled={true} - definitions={[mockGithubDefinition()]} + definitions={[mockGithubBindingDefinition()]} loading={false} multipleAlmEnabled={true} onDelete={jest.fn()} diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GitlabForm-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GitlabForm-test.tsx index 038331bd641..06c7b18a948 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GitlabForm-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GitlabForm-test.tsx @@ -19,12 +19,12 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockGitlabDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockGitlabBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import GitlabForm, { GitlabFormProps } from '../GitlabForm'; it('should render correctly', () => { expect(shallowRender()).toMatchSnapshot(); - expect(shallowRender({ formData: mockGitlabDefinition() })).toMatchSnapshot(); + expect(shallowRender({ formData: mockGitlabBindingDefinition() })).toMatchSnapshot(); }); function shallowRender(props: Partial<GitlabFormProps> = {}) { diff --git a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GitlabTab-test.tsx b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GitlabTab-test.tsx index 45cc16ed97b..7d8d70c3b3c 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GitlabTab-test.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/almIntegration/__tests__/GitlabTab-test.tsx @@ -19,7 +19,7 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { mockGitlabDefinition } from '../../../../../helpers/mocks/alm-settings'; +import { mockGitlabBindingDefinition } from '../../../../../helpers/mocks/alm-settings'; import GitlabTab, { GitlabTabProps } from '../GitlabTab'; it('should render correctly', () => { @@ -31,7 +31,7 @@ function shallowRender(props: Partial<GitlabTabProps> = {}) { return shallow( <GitlabTab branchesEnabled={true} - definitions={[mockGitlabDefinition()]} + definitions={[mockGitlabBindingDefinition()]} loading={false} multipleAlmEnabled={true} onDelete={jest.fn()} diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecorationBinding/PRDecorationBinding.tsx b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecorationBinding/PRDecorationBinding.tsx index c311e6a0a33..9d5e2fa471f 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecorationBinding/PRDecorationBinding.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecorationBinding/PRDecorationBinding.tsx @@ -28,27 +28,33 @@ import { setProjectGitlabBinding } from '../../../../api/alm-settings'; import throwGlobalError from '../../../../app/utils/throwGlobalError'; -import { AlmKeys, AlmSettingsInstance, ProjectAlmBinding } from '../../../../types/alm-settings'; +import { + AlmKeys, + AlmSettingsInstance, + ProjectAlmBindingResponse +} from '../../../../types/alm-settings'; import PRDecorationBindingRenderer from './PRDecorationBindingRenderer'; +type FormData = T.Omit<ProjectAlmBindingResponse, 'alm'>; + interface Props { component: T.Component; } interface State { - formData: ProjectAlmBinding; + formData: FormData; instances: AlmSettingsInstance[]; isChanged: boolean; isConfigured: boolean; isValid: boolean; loading: boolean; - orignalData?: ProjectAlmBinding; + orignalData?: FormData; saving: boolean; success: boolean; } const REQUIRED_FIELDS_BY_ALM: { - [almKey in AlmKeys]: Array<keyof T.Omit<ProjectAlmBinding, 'key'>>; + [almKey in AlmKeys]: Array<keyof T.Omit<FormData, 'key'>>; } = { [AlmKeys.Azure]: [], [AlmKeys.Bitbucket]: ['repository', 'slug'], @@ -104,7 +110,7 @@ export default class PRDecorationBinding extends React.PureComponent<Props, Stat }); }; - getProjectBinding(project: string): Promise<ProjectAlmBinding | undefined> { + getProjectBinding(project: string): Promise<ProjectAlmBindingResponse | undefined> { return getProjectAlmBinding(project).catch((response: Response) => { if (response && response.status === 404) { return undefined; @@ -144,7 +150,7 @@ export default class PRDecorationBinding extends React.PureComponent<Props, Stat submitProjectAlmBinding( alm: AlmKeys, key: string, - almSpecificFields?: T.Omit<ProjectAlmBinding, 'key'> + almSpecificFields?: T.Omit<FormData, 'key'> ): Promise<void> { const almSetting = key; const project = this.props.component.key; @@ -225,13 +231,13 @@ export default class PRDecorationBinding extends React.PureComponent<Props, Stat }; isDataSame( - { key, repository = '', slug = '', summaryCommentEnabled = false }: ProjectAlmBinding, + { key, repository = '', slug = '', summaryCommentEnabled = false }: FormData, { key: oKey = '', repository: oRepository = '', slug: oSlug = '', summaryCommentEnabled: osummaryCommentEnabled = false - }: ProjectAlmBinding + }: FormData ) { return ( key === oKey && @@ -241,7 +247,7 @@ export default class PRDecorationBinding extends React.PureComponent<Props, Stat ); } - handleFieldChange = (id: keyof ProjectAlmBinding, value: string | boolean) => { + handleFieldChange = (id: keyof ProjectAlmBindingResponse, value: string | boolean) => { this.setState(({ formData, orignalData }) => { const newFormData = { ...formData, diff --git a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecorationBinding/PRDecorationBindingRenderer.tsx b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecorationBinding/PRDecorationBindingRenderer.tsx index 91b8a78af1f..bebbde1d020 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecorationBinding/PRDecorationBindingRenderer.tsx +++ b/server/sonar-web/src/main/js/apps/settings/components/pullRequestDecorationBinding/PRDecorationBindingRenderer.tsx @@ -27,17 +27,21 @@ import AlertSuccessIcon from 'sonar-ui-common/components/icons/AlertSuccessIcon' import { Alert } from 'sonar-ui-common/components/ui/Alert'; import DeferredSpinner from 'sonar-ui-common/components/ui/DeferredSpinner'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import { AlmKeys, AlmSettingsInstance, ProjectAlmBinding } from '../../../../types/alm-settings'; +import { + AlmKeys, + AlmSettingsInstance, + ProjectAlmBindingResponse +} from '../../../../types/alm-settings'; import InputForBoolean from '../inputs/InputForBoolean'; export interface PRDecorationBindingRendererProps { - formData: ProjectAlmBinding; + formData: T.Omit<ProjectAlmBindingResponse, 'alm'>; instances: AlmSettingsInstance[]; isChanged: boolean; isConfigured: boolean; isValid: boolean; loading: boolean; - onFieldChange: (id: keyof ProjectAlmBinding, value: string | boolean) => void; + onFieldChange: (id: keyof ProjectAlmBindingResponse, value: string | boolean) => void; onReset: () => void; onSubmit: () => void; saving: boolean; @@ -52,8 +56,8 @@ interface LabelProps { } interface CommonFieldProps extends LabelProps { - onFieldChange: (id: keyof ProjectAlmBinding, value: string | boolean) => void; - propKey: keyof ProjectAlmBinding; + onFieldChange: (id: keyof ProjectAlmBindingResponse, value: string | boolean) => void; + propKey: keyof ProjectAlmBindingResponse; } function optionRenderer(instance: AlmSettingsInstance) { diff --git a/server/sonar-web/src/main/js/apps/tutorials/analyzeProject/__tests__/__snapshots__/AnalyzeTutorial-test.tsx.snap b/server/sonar-web/src/main/js/apps/tutorials/analyzeProject/__tests__/__snapshots__/AnalyzeTutorial-test.tsx.snap deleted file mode 100644 index c4b2f7a3b43..00000000000 --- a/server/sonar-web/src/main/js/apps/tutorials/analyzeProject/__tests__/__snapshots__/AnalyzeTutorial-test.tsx.snap +++ /dev/null @@ -1,55 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`renders correctly 1`] = ` -<Fragment> - <div - className="page-header big-spacer-bottom" - > - <h1 - className="page-title" - > - onboarding.project_analysis.header - </h1> - <p - className="page-description" - > - <InstanceMessage - message="onboarding.project_analysis.description" - /> - </p> - </div> - <TokenStep - currentUser={ - Object { - "groups": Array [], - "isLoggedIn": true, - "login": "luke", - "name": "Skywalker", - "scmAccounts": Array [], - } - } - finished={false} - initialTokenName="Analyze \\"Foo\\"" - onContinue={[Function]} - onOpen={[Function]} - open={true} - stepNumber={1} - /> - <ProjectAnalysisStep - component={ - Object { - "analysisDate": "2016-01-01", - "breadcrumbs": Array [], - "key": "foo", - "name": "Foo", - "organization": "org", - "qualifier": "TRK", - "version": "0.0.1", - } - } - displayRowLayout={true} - open={false} - stepNumber={2} - /> -</Fragment> -`; diff --git a/server/sonar-web/src/main/js/apps/tutorials/__tests__/utils-test.ts b/server/sonar-web/src/main/js/components/tutorials/__tests__/utils-test.ts index f16f4b82ac4..f16f4b82ac4 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/__tests__/utils-test.ts +++ b/server/sonar-web/src/main/js/components/tutorials/__tests__/utils-test.ts diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/RenderOptions.tsx b/server/sonar-web/src/main/js/components/tutorials/components/RenderOptions.tsx index 377727a4a91..488289c8247 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/RenderOptions.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/components/RenderOptions.tsx @@ -21,7 +21,7 @@ import * as React from 'react'; import RadioToggle from 'sonar-ui-common/components/controls/RadioToggle'; import { translate } from 'sonar-ui-common/helpers/l10n'; -interface RenderOptionsProps { +export interface RenderOptionsProps { checked: string | undefined; name: string; onCheck: (checked: string) => void; @@ -30,7 +30,7 @@ interface RenderOptionsProps { titleLabelKey?: string; } -export function RenderOptions({ +export default function RenderOptions({ checked, onCheck, optionLabelKey, diff --git a/server/sonar-web/src/main/js/apps/tutorials/styles.css b/server/sonar-web/src/main/js/components/tutorials/components/Step.css index ec206ba8afd..ec206ba8afd 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/styles.css +++ b/server/sonar-web/src/main/js/components/tutorials/components/Step.css diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/Step.tsx b/server/sonar-web/src/main/js/components/tutorials/components/Step.tsx index 190edda7835..106d8c3b6a7 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/Step.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/components/Step.tsx @@ -20,6 +20,7 @@ /* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/no-noninteractive-tabindex */ import * as classNames from 'classnames'; import * as React from 'react'; +import './Step.css'; interface Props { finished?: boolean; diff --git a/server/sonar-web/src/main/js/apps/tutorials/analyzeProject/__tests__/AnalyzeTutorial-test.tsx b/server/sonar-web/src/main/js/components/tutorials/components/__tests__/RenderOptions-test.tsx index 4c4344fe56a..c2ad68721ab 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/analyzeProject/__tests__/AnalyzeTutorial-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/components/__tests__/RenderOptions-test.tsx @@ -19,32 +19,23 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import AnalyzeTutorial from '../AnalyzeTutorial'; +import RenderOptions, { RenderOptionsProps } from '../RenderOptions'; -Date.now = jest.fn().mockReturnValue(1540457859031); - -const component = { - key: 'foo', - analysisDate: '2016-01-01', - breadcrumbs: [], - name: 'Foo', - organization: 'org', - qualifier: 'TRK', - version: '0.0.1' -}; - -const loggedInUser: T.LoggedInUser = { - groups: [], - isLoggedIn: true, - login: 'luke', - name: 'Skywalker', - scmAccounts: [] -}; - -it('renders correctly', () => { - expect(getWrapper()).toMatchSnapshot(); +it('should render correctly', () => { + expect(shallowRender()).toMatchSnapshot('default'); + expect(shallowRender({ checked: 'baz' })).toMatchSnapshot('option checked'); + expect(shallowRender({ titleLabelKey: 'title.key' })).toMatchSnapshot('with title'); }); -function getWrapper(props = {}) { - return shallow(<AnalyzeTutorial component={component} currentUser={loggedInUser} {...props} />); +function shallowRender(props: Partial<RenderOptionsProps> = {}) { + return shallow<RenderOptionsProps>( + <RenderOptions + checked={undefined} + name="bar" + onCheck={jest.fn()} + optionLabelKey="foo.bar" + options={['foo', 'baz']} + {...props} + /> + ); } diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/Step-test.tsx b/server/sonar-web/src/main/js/components/tutorials/components/__tests__/Step-test.tsx index bda5bedc967..bda5bedc967 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/Step-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/components/__tests__/Step-test.tsx diff --git a/server/sonar-web/src/main/js/components/tutorials/components/__tests__/__snapshots__/RenderOptions-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/components/__tests__/__snapshots__/RenderOptions-test.tsx.snap new file mode 100644 index 00000000000..535f9f58721 --- /dev/null +++ b/server/sonar-web/src/main/js/components/tutorials/components/__tests__/__snapshots__/RenderOptions-test.tsx.snap @@ -0,0 +1,81 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`should render correctly: default 1`] = ` +<div + className="big-spacer-top" +> + <RadioToggle + disabled={false} + name="" + onCheck={[MockFunction]} + options={ + Array [ + Object { + "label": "foo.bar.foo", + "value": "foo", + }, + Object { + "label": "foo.bar.baz", + "value": "baz", + }, + ] + } + value={null} + /> +</div> +`; + +exports[`should render correctly: option checked 1`] = ` +<div + className="big-spacer-top" +> + <RadioToggle + disabled={false} + name="" + onCheck={[MockFunction]} + options={ + Array [ + Object { + "label": "foo.bar.foo", + "value": "foo", + }, + Object { + "label": "foo.bar.baz", + "value": "baz", + }, + ] + } + value="baz" + /> +</div> +`; + +exports[`should render correctly: with title 1`] = ` +<div + className="big-spacer-top" +> + <h4 + className="spacer-bottom" + > + title.key + </h4> + <RadioToggle + disabled={false} + name="" + onCheck={[MockFunction]} + options={ + Array [ + Object { + "label": "foo.bar.foo", + "value": "foo", + }, + Object { + "label": "foo.bar.baz", + "value": "baz", + }, + ] + } + value={null} + /> +</div> +`; diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/__snapshots__/Step-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/components/__tests__/__snapshots__/Step-test.tsx.snap index 1e188e0d498..1e188e0d498 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/__snapshots__/Step-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/components/__tests__/__snapshots__/Step-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/LanguageForm.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/LanguageForm.tsx index d289f09cf5b..30701bc194b 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/LanguageForm.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/LanguageForm.tsx @@ -20,8 +20,9 @@ import * as React from 'react'; import RadioToggle from 'sonar-ui-common/components/controls/RadioToggle'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import { isLanguageConfigured, LanguageConfig } from '../utils'; -import { RenderOptions } from './RenderOptions'; +import RenderOptions from '../components/RenderOptions'; +import { LanguageConfig } from '../types'; +import { isLanguageConfigured } from '../utils'; interface Props { component: T.Component; diff --git a/server/sonar-web/src/main/js/apps/tutorials/analyzeProject/AnalyzeTutorial.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/ManualTutorial.tsx index e873d687706..f1b4c1dcee3 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/analyzeProject/AnalyzeTutorial.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/ManualTutorial.tsx @@ -18,12 +18,13 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import * as React from 'react'; +import Tooltip from 'sonar-ui-common/components/controls/Tooltip'; +import BackIcon from 'sonar-ui-common/components/icons/BackIcon'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import InstanceMessage from '../../../components/common/InstanceMessage'; import { isVSTS } from '../../../helpers/almIntegrations'; -import ProjectAnalysisStep from '../components/ProjectAnalysisStep'; -import TokenStep from '../components/TokenStep'; -import '../styles.css'; +import InstanceMessage from '../../common/InstanceMessage'; +import ProjectAnalysisStep from './ProjectAnalysisStep'; +import TokenStep from './TokenStep'; export enum Steps { ANALYSIS, @@ -33,6 +34,7 @@ export enum Steps { interface Props { component: T.Component; currentUser: T.LoggedInUser; + onBack?: () => void; } interface State { @@ -40,7 +42,7 @@ interface State { token?: string; } -export default class AnalyzeTutorial extends React.PureComponent<Props, State> { +export default class ManualTutorial extends React.PureComponent<Props, State> { state: State = { step: Steps.TOKEN }; handleTokenDone = (token: string) => { @@ -59,7 +61,19 @@ export default class AnalyzeTutorial extends React.PureComponent<Props, State> { return ( <> <div className="page-header big-spacer-bottom"> - <h1 className="page-title">{translate('onboarding.project_analysis.header')}</h1> + <h1 className="page-title"> + {this.props.onBack !== undefined && ( + <Tooltip overlay={translate('onboarding.tutorial.return_to_list')}> + <a + aria-label={translate('onboarding.tutorial.return_to_list')} + className="link-no-underline big-spacer-right" + onClick={this.props.onBack}> + <BackIcon /> + </a> + </Tooltip> + )} + {translate('onboarding.project_analysis.header')} + </h1> <p className="page-description"> <InstanceMessage message={translate('onboarding.project_analysis.description')} /> </p> diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/ProjectAnalysisStep.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/ProjectAnalysisStep.tsx index 710938df502..c3acaff6ae0 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/ProjectAnalysisStep.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/ProjectAnalysisStep.tsx @@ -19,10 +19,10 @@ */ import * as React from 'react'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import { LanguageConfig } from '../utils'; +import Step from '../components/Step'; +import { LanguageConfig } from '../types'; import AnalysisCommand from './commands/AnalysisCommand'; import LanguageForm from './LanguageForm'; -import Step from './Step'; interface Props { component: T.Component; diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/TokenStep.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/TokenStep.tsx index 32da736ed30..4ce914dd319 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/TokenStep.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/TokenStep.tsx @@ -26,8 +26,8 @@ import AlertErrorIcon from 'sonar-ui-common/components/icons/AlertErrorIcon'; import AlertSuccessIcon from 'sonar-ui-common/components/icons/AlertSuccessIcon'; import { translate } from 'sonar-ui-common/helpers/l10n'; import { generateToken, getTokens, revokeToken } from '../../../api/user-tokens'; +import Step from '../components/Step'; import { getUniqueTokenName } from '../utils'; -import Step from './Step'; interface Props { currentUser: Pick<T.LoggedInUser, 'login'>; diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/LanguageForm-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/LanguageForm-test.tsx index 24dd2af27b0..24dd2af27b0 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/LanguageForm-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/LanguageForm-test.tsx diff --git a/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/ManualTutorial-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/ManualTutorial-test.tsx new file mode 100644 index 00000000000..79a269a35c4 --- /dev/null +++ b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/ManualTutorial-test.tsx @@ -0,0 +1,51 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 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 { shallow } from 'enzyme'; +import * as React from 'react'; +import { mockComponent, mockLoggedInUser } from '../../../../helpers/testMocks'; +import ManualTutorial from '../ManualTutorial'; +import ProjectAnalysisStep from '../ProjectAnalysisStep'; +import TokenStep from '../TokenStep'; + +it('renders correctly', () => { + expect(shallowRender()).toMatchSnapshot('default'); + expect(shallowRender({ onBack: jest.fn() })).toMatchSnapshot('with back button'); +}); + +it('allows to navigate between steps', () => { + const wrapper = shallowRender(); + const instance = wrapper.instance(); + + expect(wrapper.find(TokenStep).props().open).toBe(true); + + instance.handleTokenDone('foo'); + expect(wrapper.find(TokenStep).props().open).toBe(false); + expect(wrapper.find(ProjectAnalysisStep).props().open).toBe(true); + + instance.handleTokenOpen(); + expect(wrapper.find(TokenStep).props().open).toBe(true); + expect(wrapper.find(ProjectAnalysisStep).props().open).toBe(false); +}); + +function shallowRender(props: Partial<ManualTutorial['props']> = {}) { + return shallow<ManualTutorial>( + <ManualTutorial component={mockComponent()} currentUser={mockLoggedInUser()} {...props} /> + ); +} diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/ProjectAnalysisStep-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/ProjectAnalysisStep-test.tsx index 4b6ecf87069..4b6ecf87069 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/ProjectAnalysisStep-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/ProjectAnalysisStep-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/TokenStep-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/TokenStep-test.tsx index 8a9f52d61e9..8a9f52d61e9 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/TokenStep-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/TokenStep-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/__snapshots__/LanguageForm-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/LanguageForm-test.tsx.snap index 04745f2597c..04745f2597c 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/__snapshots__/LanguageForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/LanguageForm-test.tsx.snap diff --git a/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/ManualTutorial-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/ManualTutorial-test.tsx.snap new file mode 100644 index 00000000000..cc1cf2fc27a --- /dev/null +++ b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/ManualTutorial-test.tsx.snap @@ -0,0 +1,144 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders correctly: default 1`] = ` +<Fragment> + <div + className="page-header big-spacer-bottom" + > + <h1 + className="page-title" + > + onboarding.project_analysis.header + </h1> + <p + className="page-description" + > + <InstanceMessage + message="onboarding.project_analysis.description" + /> + </p> + </div> + <TokenStep + currentUser={ + Object { + "groups": Array [], + "isLoggedIn": true, + "login": "luke", + "name": "Skywalker", + "scmAccounts": Array [], + } + } + finished={false} + initialTokenName="Analyze \\"MyProject\\"" + onContinue={[Function]} + onOpen={[Function]} + open={true} + stepNumber={1} + /> + <ProjectAnalysisStep + component={ + Object { + "breadcrumbs": Array [], + "key": "my-project", + "name": "MyProject", + "organization": "foo", + "qualifier": "TRK", + "qualityGate": Object { + "isDefault": true, + "key": "30", + "name": "Sonar way", + }, + "qualityProfiles": Array [ + Object { + "deleted": false, + "key": "my-qp", + "language": "ts", + "name": "Sonar way", + }, + ], + "tags": Array [], + } + } + displayRowLayout={true} + open={false} + stepNumber={2} + /> +</Fragment> +`; + +exports[`renders correctly: with back button 1`] = ` +<Fragment> + <div + className="page-header big-spacer-bottom" + > + <h1 + className="page-title" + > + <Tooltip + overlay="onboarding.tutorial.return_to_list" + > + <a + aria-label="onboarding.tutorial.return_to_list" + className="link-no-underline big-spacer-right" + onClick={[MockFunction]} + > + <BackIcon /> + </a> + </Tooltip> + onboarding.project_analysis.header + </h1> + <p + className="page-description" + > + <InstanceMessage + message="onboarding.project_analysis.description" + /> + </p> + </div> + <TokenStep + currentUser={ + Object { + "groups": Array [], + "isLoggedIn": true, + "login": "luke", + "name": "Skywalker", + "scmAccounts": Array [], + } + } + finished={false} + initialTokenName="Analyze \\"MyProject\\"" + onContinue={[Function]} + onOpen={[Function]} + open={true} + stepNumber={1} + /> + <ProjectAnalysisStep + component={ + Object { + "breadcrumbs": Array [], + "key": "my-project", + "name": "MyProject", + "organization": "foo", + "qualifier": "TRK", + "qualityGate": Object { + "isDefault": true, + "key": "30", + "name": "Sonar way", + }, + "qualityProfiles": Array [ + Object { + "deleted": false, + "key": "my-qp", + "language": "ts", + "name": "Sonar way", + }, + ], + "tags": Array [], + } + } + displayRowLayout={true} + open={false} + stepNumber={2} + /> +</Fragment> +`; diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/__snapshots__/ProjectAnalysisStep-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/ProjectAnalysisStep-test.tsx.snap index 0380c578d47..0380c578d47 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/__snapshots__/ProjectAnalysisStep-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/ProjectAnalysisStep-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/__snapshots__/TokenStep-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/TokenStep-test.tsx.snap index 6ad2bfc2e0c..6ad2bfc2e0c 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/__tests__/__snapshots__/TokenStep-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/__tests__/__snapshots__/TokenStep-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/AnalysisCommand.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/AnalysisCommand.tsx index 6fc3994d5f3..dd66db28258 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/AnalysisCommand.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/AnalysisCommand.tsx @@ -19,7 +19,7 @@ */ import * as React from 'react'; import { getHostUrl } from 'sonar-ui-common/helpers/urls'; -import { LanguageConfig } from '../../utils'; +import { LanguageConfig } from '../../types'; import { getProjectKey } from '../ProjectAnalysisStep'; import DotNet from './DotNet'; import JavaGradle from './JavaGradle'; diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/DotNet.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/DotNet.tsx index 99b8206aa94..a1d61c80412 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/DotNet.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/DotNet.tsx @@ -20,8 +20,8 @@ import * as React from 'react'; import { FormattedMessage } from 'react-intl'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import CodeSnippet from '../../../../components/common/CodeSnippet'; -import InstanceMessage from '../../../../components/common/InstanceMessage'; +import CodeSnippet from '../../../common/CodeSnippet'; +import InstanceMessage from '../../../common/InstanceMessage'; import MSBuildScanner from './MSBuildScanner'; export interface Props { diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/JavaGradle.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/JavaGradle.tsx index d6a127bc1fe..8a3be3f0034 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/JavaGradle.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/JavaGradle.tsx @@ -20,8 +20,8 @@ import * as React from 'react'; import { FormattedMessage } from 'react-intl'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import CodeSnippet from '../../../../components/common/CodeSnippet'; -import InstanceMessage from '../../../../components/common/InstanceMessage'; +import CodeSnippet from '../../../common/CodeSnippet'; +import InstanceMessage from '../../../common/InstanceMessage'; export interface Props { host: string; diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/JavaMaven.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/JavaMaven.tsx index d7a9779b1f1..488fb76aa72 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/JavaMaven.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/JavaMaven.tsx @@ -20,8 +20,8 @@ import * as React from 'react'; import { FormattedMessage } from 'react-intl'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import CodeSnippet from '../../../../components/common/CodeSnippet'; -import InstanceMessage from '../../../../components/common/InstanceMessage'; +import CodeSnippet from '../../../common/CodeSnippet'; +import InstanceMessage from '../../../common/InstanceMessage'; export interface Props { host: string; diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/MSBuildScanner.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/MSBuildScanner.tsx index 9ff8c9a4be2..9ff8c9a4be2 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/MSBuildScanner.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/MSBuildScanner.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/Other.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/Other.tsx index 3de5fd6b4fa..61e3f9f40a4 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/Other.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/Other.tsx @@ -20,8 +20,8 @@ import * as React from 'react'; import { FormattedMessage } from 'react-intl'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import CodeSnippet from '../../../../components/common/CodeSnippet'; -import InstanceMessage from '../../../../components/common/InstanceMessage'; +import CodeSnippet from '../../../common/CodeSnippet'; +import InstanceMessage from '../../../common/InstanceMessage'; import { quote } from '../../utils'; import SQScanner from './SQScanner'; diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/SQScanner.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/SQScanner.tsx index 663fda6a3ce..663fda6a3ce 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/SQScanner.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/SQScanner.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/AnalysisCommand-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/AnalysisCommand-test.tsx index 6f8c57e4513..6f8c57e4513 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/AnalysisCommand-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/AnalysisCommand-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/DotNet-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/DotNet-test.tsx index 8f00456d2d4..8f00456d2d4 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/DotNet-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/DotNet-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/JavaGradle-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/JavaGradle-test.tsx index 0fc13a7dba4..0fc13a7dba4 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/JavaGradle-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/JavaGradle-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/JavaMaven-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/JavaMaven-test.tsx index 7304894fd13..7304894fd13 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/JavaMaven-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/JavaMaven-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/MSBuildScanner-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/MSBuildScanner-test.tsx index 8da96cd4c40..8da96cd4c40 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/MSBuildScanner-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/MSBuildScanner-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/Other-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/Other-test.tsx index f4ab19c816f..f4ab19c816f 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/Other-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/Other-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/SQScanner-test.tsx b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/SQScanner-test.tsx index 26a51aea994..26a51aea994 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/SQScanner-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/SQScanner-test.tsx diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/AnalysisCommand-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/AnalysisCommand-test.tsx.snap index 6afb09941d0..6afb09941d0 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/AnalysisCommand-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/AnalysisCommand-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/DotNet-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/DotNet-test.tsx.snap index 19a293729fb..19a293729fb 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/DotNet-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/DotNet-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/JavaGradle-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/JavaGradle-test.tsx.snap index 7e1208e8dce..7e1208e8dce 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/JavaGradle-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/JavaGradle-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/JavaMaven-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/JavaMaven-test.tsx.snap index 7ee4d3becba..7ee4d3becba 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/JavaMaven-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/JavaMaven-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/MSBuildScanner-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/MSBuildScanner-test.tsx.snap index f1d82f50660..f1d82f50660 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/MSBuildScanner-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/MSBuildScanner-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/Other-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/Other-test.tsx.snap index 51b1479f109..51b1479f109 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/Other-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/Other-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/SQScanner-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/SQScanner-test.tsx.snap index 6ad4425a0a8..6ad4425a0a8 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/components/commands/__tests__/__snapshots__/SQScanner-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/manual/commands/__tests__/__snapshots__/SQScanner-test.tsx.snap diff --git a/server/sonar-web/src/main/js/apps/tutorials/utils.ts b/server/sonar-web/src/main/js/components/tutorials/utils.ts index a1a28edc712..a1a28edc712 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/utils.ts +++ b/server/sonar-web/src/main/js/components/tutorials/utils.ts diff --git a/server/sonar-web/src/main/js/helpers/mocks/alm-settings.ts b/server/sonar-web/src/main/js/helpers/mocks/alm-settings.ts index 3940ca053da..2eab0248c9d 100644 --- a/server/sonar-web/src/main/js/helpers/mocks/alm-settings.ts +++ b/server/sonar-web/src/main/js/helpers/mocks/alm-settings.ts @@ -36,7 +36,7 @@ export function mockAlmSettingsInstance( }; } -export function mockAzureDefinition( +export function mockAzureBindingDefinition( overrides: Partial<AzureBindingDefinition> = {} ): AzureBindingDefinition { return { @@ -46,7 +46,7 @@ export function mockAzureDefinition( }; } -export function mockBitbucketDefinition( +export function mockBitbucketBindingDefinition( overrides: Partial<BitbucketBindingDefinition> = {} ): BitbucketBindingDefinition { return { @@ -57,7 +57,7 @@ export function mockBitbucketDefinition( }; } -export function mockGithubDefinition( +export function mockGithubBindingDefinition( overrides: Partial<GithubBindingDefinition> = {} ): GithubBindingDefinition { return { @@ -69,7 +69,7 @@ export function mockGithubDefinition( }; } -export function mockGitlabDefinition( +export function mockGitlabBindingDefinition( overrides: Partial<GitlabBindingDefinition> = {} ): GitlabBindingDefinition { return { diff --git a/server/sonar-web/src/main/js/types/alm-settings.ts b/server/sonar-web/src/main/js/types/alm-settings.ts index a25148c6fb2..1fbff623de2 100644 --- a/server/sonar-web/src/main/js/types/alm-settings.ts +++ b/server/sonar-web/src/main/js/types/alm-settings.ts @@ -48,35 +48,32 @@ export interface GitlabBindingDefinition extends AlmBindingDefinition { url?: string; } -export interface ProjectAlmBinding { +export interface ProjectAlmBindingResponse { + alm: AlmKeys; key: string; repository?: string; slug?: string; summaryCommentEnabled?: boolean; } -export interface AzureProjectAlmBinding { +export interface ProjectAlmBindingParams { almSetting: string; project: string; } -export interface BitbucketProjectAlmBinding { - almSetting: string; - project: string; +export interface AzureProjectAlmBindingParams extends ProjectAlmBindingParams {} + +export interface BitbucketProjectAlmBindingParams extends ProjectAlmBindingParams { repository: string; slug: string; } -export interface GithubProjectAlmBinding { - almSetting: string; - project: string; +export interface GithubProjectAlmBindingParams extends ProjectAlmBindingParams { repository: string; summaryCommentEnabled: boolean; } -export interface GitlabProjectAlmBinding { - almSetting: string; - project: string; +export interface GitlabProjectAlmBindingParams extends ProjectAlmBindingParams { repository?: string; } @@ -87,8 +84,8 @@ export interface AlmSettingsInstance { } export interface AlmSettingsBindingDefinitions { - azure: AzureBindingDefinition[]; - bitbucket: BitbucketBindingDefinition[]; - github: GithubBindingDefinition[]; - gitlab: GitlabBindingDefinition[]; + [AlmKeys.Azure]: AzureBindingDefinition[]; + [AlmKeys.Bitbucket]: BitbucketBindingDefinition[]; + [AlmKeys.GitHub]: GithubBindingDefinition[]; + [AlmKeys.GitLab]: GitlabBindingDefinition[]; } |