From 14018e728e0d7314616aa2af79964f08c5a03e5d Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Thu, 12 Oct 2017 15:31:14 +0200 Subject: [PATCH] SONAR-9790 Add project context to a file permalink --- .../main/js/apps/overview/components/App.js | 27 +++++++++---------- .../overview/components/__tests__/App-test.js | 17 +++++++++--- .../__tests__/__snapshots__/App-test.js.snap | 12 --------- server/sonar-web/src/main/js/helpers/urls.ts | 4 +++ 4 files changed, 29 insertions(+), 31 deletions(-) delete mode 100644 server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/App-test.js.snap diff --git a/server/sonar-web/src/main/js/apps/overview/components/App.js b/server/sonar-web/src/main/js/apps/overview/components/App.js index f7f3dbf4e86..8ce26596388 100644 --- a/server/sonar-web/src/main/js/apps/overview/components/App.js +++ b/server/sonar-web/src/main/js/apps/overview/components/App.js @@ -23,14 +23,14 @@ import PropTypes from 'prop-types'; import OverviewApp from './OverviewApp'; import EmptyOverview from './EmptyOverview'; import { getBranchName, isShortLivingBranch } from '../../../helpers/branches'; -import { getProjectBranchUrl } from '../../../helpers/urls'; -import SourceViewer from '../../../components/SourceViewer/SourceViewer'; +import { getProjectBranchUrl, getCodeUrl } from '../../../helpers/urls'; /*:: type Props = { branch?: { name: string }, component: { analysisDate?: string, + breadcrumbs: Array<{ key: string }>, id: string, key: string, qualifier: string, @@ -50,14 +50,19 @@ export default class App extends React.PureComponent { }; componentDidMount() { + const { branch, component } = this.props; + if (this.isPortfolio()) { this.context.router.replace({ pathname: '/portfolio', - query: { id: this.props.component.key } + query: { id: component.key } }); - } - if (isShortLivingBranch(this.props.branch) && !this.isFile()) { - this.context.router.replace(getProjectBranchUrl(this.props.component.key, this.props.branch)); + } else if (this.isFile()) { + this.context.router.replace( + getCodeUrl(component.breadcrumbs[0].key, getBranchName(branch), component.key) + ); + } else if (isShortLivingBranch(branch)) { + this.context.router.replace(getProjectBranchUrl(component.key, branch)); } } @@ -72,18 +77,10 @@ export default class App extends React.PureComponent { render() { const { branch, component } = this.props; - if (this.isPortfolio() || (isShortLivingBranch(branch) && !this.isFile())) { + if (this.isPortfolio() || this.isFile() || isShortLivingBranch(branch)) { return null; } - if (['FIL', 'UTS'].includes(component.qualifier)) { - return ( -
- -
- ); - } - if (!component.analysisDate) { return ; } diff --git a/server/sonar-web/src/main/js/apps/overview/components/__tests__/App-test.js b/server/sonar-web/src/main/js/apps/overview/components/__tests__/App-test.js index f2f2f34a1c4..c42d54126a7 100644 --- a/server/sonar-web/src/main/js/apps/overview/components/__tests__/App-test.js +++ b/server/sonar-web/src/main/js/apps/overview/components/__tests__/App-test.js @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import React from 'react'; -import { shallow } from 'enzyme'; +import { mount, shallow } from 'enzyme'; import App from '../App'; import OverviewApp from '../OverviewApp'; import EmptyOverview from '../EmptyOverview'; @@ -35,8 +35,17 @@ it('should render EmptyOverview', () => { expect(output.type()).toBe(EmptyOverview); }); -it('renders SourceViewer with branch', () => { +it('redirects on Code page for files', () => { const branch = { isMain: false, name: 'b' }; - const component = { key: 'foo', qualifier: 'FIL' }; - expect(shallow()).toMatchSnapshot(); + const component = { + breadcrumbs: [{ key: 'project' }, { key: 'foo' }], + key: 'foo', + qualifier: 'FIL' + }; + const replace = jest.fn(); + mount(, { context: { router: { replace } } }); + expect(replace).toBeCalledWith({ + pathname: '/code', + query: { branch: 'b', id: 'project', selected: 'foo' } + }); }); diff --git a/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/App-test.js.snap b/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/App-test.js.snap deleted file mode 100644 index 7f7335f6860..00000000000 --- a/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/App-test.js.snap +++ /dev/null @@ -1,12 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`renders SourceViewer with branch 1`] = ` -
- -
-`; diff --git a/server/sonar-web/src/main/js/helpers/urls.ts b/server/sonar-web/src/main/js/helpers/urls.ts index 91c5bc35d35..aae5afb93bc 100644 --- a/server/sonar-web/src/main/js/helpers/urls.ts +++ b/server/sonar-web/src/main/js/helpers/urls.ts @@ -172,3 +172,7 @@ export function getDeprecatedActiveRulesUrl(query = {}, organization?: string | export function getMarkdownHelpUrl(): string { return getBaseUrl() + '/markdown/help'; } + +export function getCodeUrl(project: string, branch?: string, selected?: string) { + return { pathname: '/code', query: { id: project, branch, selected } }; +} -- 2.39.5