From 1433bb241ab3527ff4105481f2a597ae4b9c1ca6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gr=C3=A9goire=20Aubert?= Date: Fri, 3 Aug 2018 13:43:49 +0200 Subject: [PATCH] SONAR-11036 Handle an error query parameter in the project creation page --- .../main/js/apps/projects/create/CreateProjectPage.tsx | 8 +++++++- .../create/__tests__/CreateProjectPage-test.tsx | 10 ++++++++++ .../src/main/js/apps/projects/create/utils.ts | 5 ++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx b/server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx index a3cdbb510a0..f4ea23b49bb 100644 --- a/server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx +++ b/server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx @@ -29,6 +29,7 @@ import { serializeQuery, Query, parseQuery } from './utils'; import DeferredSpinner from '../../../components/common/DeferredSpinner'; import handleRequiredAuthentication from '../../../app/utils/handleRequiredAuthentication'; import { getCurrentUser } from '../../../store/rootReducer'; +import { addGlobalErrorMessage } from '../../../store/globalMessages/duck'; import { skipOnboarding as skipOnboardingAction } from '../../../store/users/actions'; import { CurrentUser, IdentityProvider, isLoggedIn, LoggedInUser } from '../../../app/types'; import { skipOnboarding, getIdentityProviders } from '../../../api/users'; @@ -46,6 +47,7 @@ interface StateProps { } interface DispatchProps { + addGlobalErrorMessage: (message: string) => void; skipOnboardingAction: () => void; } @@ -64,6 +66,10 @@ export class CreateProjectPage extends React.PureComponent { constructor(props: Props) { super(props); this.state = { loading: true }; + const query = parseQuery(props.location.query); + if (query.error) { + this.props.addGlobalErrorMessage(query.error); + } if (!this.canAutoCreate(props)) { this.updateQuery({ manual: true }); } @@ -208,7 +214,7 @@ const mapStateToProps = (state: any): StateProps => { }; }; -const mapDispatchToProps: DispatchProps = { skipOnboardingAction }; +const mapDispatchToProps: DispatchProps = { addGlobalErrorMessage, skipOnboardingAction }; export default connect(mapStateToProps, mapDispatchToProps)( CreateProjectPage diff --git a/server/sonar-web/src/main/js/apps/projects/create/__tests__/CreateProjectPage-test.tsx b/server/sonar-web/src/main/js/apps/projects/create/__tests__/CreateProjectPage-test.tsx index 42f39b9fb61..c4dd1380821 100644 --- a/server/sonar-web/src/main/js/apps/projects/create/__tests__/CreateProjectPage-test.tsx +++ b/server/sonar-web/src/main/js/apps/projects/create/__tests__/CreateProjectPage-test.tsx @@ -77,9 +77,19 @@ it('should switch tabs', async () => { expect(wrapper.find('AutoProjectCreate').exists()).toBeTruthy(); }); +it('should display an error message on load', () => { + const addGlobalErrorMessage = jest.fn(); + getWrapper({ + addGlobalErrorMessage, + location: { pathname: 'foo', query: { error: 'Foo error' } } + }); + expect(addGlobalErrorMessage).toHaveBeenCalledWith('Foo error'); +}); + function getWrapper(props = {}) { return shallow( { return { + error: parseAsOptionalString(urlQuery['error']), manual: parseAsBoolean(urlQuery['manual'], false) }; }); -- 2.39.5