From 7e7b3471c9aef526a64325bb60755e9a45b42ade Mon Sep 17 00:00:00 2001 From: Wouter Admiraal Date: Thu, 2 Jan 2020 15:20:29 +0100 Subject: [PATCH] SONAR-12886 Update LTS handling in static documentation --- server/sonar-docs/src/@types/types.d.ts | 1 + server/sonar-docs/src/components/Sidebar.tsx | 23 +- .../src/components/VersionSelect.tsx | 4 +- .../src/components/__tests__/Sidebar-test.tsx | 15 +- .../__tests__/VersionSelect-test.tsx | 62 ++ .../__snapshots__/Sidebar-test.tsx.snap | 565 +++++++++++++++++- .../__snapshots__/VersionSelect-test.tsx.snap | 109 ++++ server/sonar-docs/src/layouts/layout.css | 3 +- server/sonar-docs/static/DocsVersions.json | 2 +- 9 files changed, 764 insertions(+), 20 deletions(-) create mode 100644 server/sonar-docs/src/components/__tests__/VersionSelect-test.tsx create mode 100644 server/sonar-docs/src/components/__tests__/__snapshots__/VersionSelect-test.tsx.snap diff --git a/server/sonar-docs/src/@types/types.d.ts b/server/sonar-docs/src/@types/types.d.ts index a4a11275bbb..b27e9f9f029 100644 --- a/server/sonar-docs/src/@types/types.d.ts +++ b/server/sonar-docs/src/@types/types.d.ts @@ -21,6 +21,7 @@ export type Dict = { [key: string]: T }; export interface DocVersion { current: boolean; + lts?: boolean; value: string; } diff --git a/server/sonar-docs/src/components/Sidebar.tsx b/server/sonar-docs/src/components/Sidebar.tsx index 309206dfd3a..c27bd513186 100644 --- a/server/sonar-docs/src/components/Sidebar.tsx +++ b/server/sonar-docs/src/components/Sidebar.tsx @@ -165,10 +165,16 @@ export default class Sidebar extends React.PureComponent { render() { const { versions } = this.state; + const { version } = this.props; + const currentVersion = versions.find(v => v.current); + const ltsVersion = versions.find(v => v.lts); + const selectedVersionValue = - currentVersion && this.props.version === 'latest' ? currentVersion.value : this.props.version; + currentVersion && version === 'latest' ? currentVersion.value : version; const isOnCurrentVersion = !currentVersion || selectedVersionValue === currentVersion.value; + const isOnLTSVersion = ltsVersion && version === ltsVersion.value; + return (
@@ -176,7 +182,7 @@ export default class Sidebar extends React.PureComponent { Continuous Code Quality @@ -186,11 +192,10 @@ export default class Sidebar extends React.PureComponent { selectedVersionValue={selectedVersionValue} versions={versions} /> - {this.state.loaded && !isOnCurrentVersion && ( + {this.state.loaded && !isOnCurrentVersion && !isOnLTSVersion && (
- This is an archived version of the doc for{' '} - SonarQube version {this.props.version}. See Documentation for - current functionnality. + This is an archived version of the doc for SonarQube version {version}.{' '} + See Documentation for current functionnality.
)}
@@ -207,21 +212,21 @@ export default class Sidebar extends React.PureComponent { SonarQube - Community Community + Community Community - Twitter + Twitter - Product News + Product News Product News
diff --git a/server/sonar-docs/src/components/VersionSelect.tsx b/server/sonar-docs/src/components/VersionSelect.tsx index 15ec735b8ad..3f9f61ccfca 100644 --- a/server/sonar-docs/src/components/VersionSelect.tsx +++ b/server/sonar-docs/src/components/VersionSelect.tsx @@ -62,7 +62,9 @@ export default class VersionSelect extends React.PureComponent { return (
  • - {version.value} + + {version.value + (version.lts ? ' LTS' : '')} +
  • ); diff --git a/server/sonar-docs/src/components/__tests__/Sidebar-test.tsx b/server/sonar-docs/src/components/__tests__/Sidebar-test.tsx index 4ea1e61dcb2..0bc43821e0d 100644 --- a/server/sonar-docs/src/components/__tests__/Sidebar-test.tsx +++ b/server/sonar-docs/src/components/__tests__/Sidebar-test.tsx @@ -59,18 +59,23 @@ jest.mock('../navTreeUtils', () => { beforeEach(() => { (fetch as FetchMock).resetMocks(); (fetch as FetchMock).mockResponse(`[ - { "value": "2.0", "current": true }, + { "value": "3.0", "current": true }, + { "value": "2.0", "current": false, "lts": true }, { "value": "1.0", "current": false } ]`); }); -it('should render correctly', () => { +it('should render correctly', async () => { const wrapper = shallowRender(); - expect(wrapper).toMatchSnapshot(); + await new Promise(setImmediate); + + expect(wrapper).toMatchSnapshot('default'); + expect(wrapper.setProps({ version: '1.0' })).toMatchSnapshot('show warning'); + expect(wrapper.setProps({ version: '2.0' })).toMatchSnapshot('lts'); }); function shallowRender(props: Partial = {}) { - return shallow( + return shallow( = {}) { } } as MarkdownRemark ]} - version="2.0" + version="3.0" {...props} /> ); diff --git a/server/sonar-docs/src/components/__tests__/VersionSelect-test.tsx b/server/sonar-docs/src/components/__tests__/VersionSelect-test.tsx new file mode 100644 index 00000000000..a0fef76725d --- /dev/null +++ b/server/sonar-docs/src/components/__tests__/VersionSelect-test.tsx @@ -0,0 +1,62 @@ +/* + * 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 { click } from 'sonar-ui-common/helpers/testUtils'; +import OutsideClickHandler from '../OutsideClickHandler'; +import VersionSelect from '../VersionSelect'; + +it('should render correctly', () => { + expect(shallowRender()).toMatchSnapshot('default'); + + const wrapper = shallowRender(); + wrapper.setState({ open: true }); + expect(wrapper).toMatchSnapshot('open'); + + expect(shallowRender({ isOnCurrentVersion: true })).toMatchSnapshot('on current version'); +}); + +it('should handle open/closing the list', () => { + const wrapper = shallowRender(); + + click(wrapper.find('button')); + expect(wrapper.state().open).toBe(true); + click(wrapper.find('button')); + expect(wrapper.state().open).toBe(false); + + wrapper.setState({ open: true }); + wrapper.find(OutsideClickHandler).prop('onClickOutside')(); + expect(wrapper.state().open).toBe(false); +}); + +function shallowRender(props: Partial = {}) { + return shallow( + + ); +} diff --git a/server/sonar-docs/src/components/__tests__/__snapshots__/Sidebar-test.tsx.snap b/server/sonar-docs/src/components/__tests__/__snapshots__/Sidebar-test.tsx.snap index 5a05f9b2671..0fec9f778a0 100644 --- a/server/sonar-docs/src/components/__tests__/__snapshots__/Sidebar-test.tsx.snap +++ b/server/sonar-docs/src/components/__tests__/__snapshots__/Sidebar-test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`should render correctly 1`] = ` +exports[`should render correctly: default 1`] = `
    @@ -13,15 +13,294 @@ exports[`should render correctly 1`] = ` Continuous Code Quality +
    +
    + + +
    + + +`; + +exports[`should render correctly: lts 1`] = ` +
    +
    + + Continuous Code Quality + +
    `; + +exports[`should render correctly: show warning 1`] = ` +
    +
    + + Continuous Code Quality + + +
    + This is an archived version of the doc for + + SonarQube version + 1.0 + + . + + + See Documentation + + for current functionnality. +
    +
    +
    + + +
    + +
    +`; diff --git a/server/sonar-docs/src/components/__tests__/__snapshots__/VersionSelect-test.tsx.snap b/server/sonar-docs/src/components/__tests__/__snapshots__/VersionSelect-test.tsx.snap new file mode 100644 index 00000000000..b91c29e7a44 --- /dev/null +++ b/server/sonar-docs/src/components/__tests__/__snapshots__/VersionSelect-test.tsx.snap @@ -0,0 +1,109 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`should render correctly: default 1`] = ` +
    + +
    +`; + +exports[`should render correctly: on current version 1`] = ` +
    + +
    +`; + +exports[`should render correctly: open 1`] = ` +
    + + + + +
    +`; diff --git a/server/sonar-docs/src/layouts/layout.css b/server/sonar-docs/src/layouts/layout.css index 25d06883f9f..6696f42a55d 100644 --- a/server/sonar-docs/src/layouts/layout.css +++ b/server/sonar-docs/src/layouts/layout.css @@ -493,8 +493,9 @@ a.search-result .note { font-size: 15px; margin: 0; padding: 4px 16px; - text-align: center; + text-align: left; transition: all 0.2s ease; + white-space: nowrap; } .version-select ul li:hover { diff --git a/server/sonar-docs/static/DocsVersions.json b/server/sonar-docs/static/DocsVersions.json index 19772b03b16..501eab58d1e 100644 --- a/server/sonar-docs/static/DocsVersions.json +++ b/server/sonar-docs/static/DocsVersions.json @@ -1,6 +1,6 @@ [ { "value": "7.3", "current": true }, { "value": "7.2", "current": false }, - { "value": "7.1", "current": false }, + { "value": "7.1", "current": false, "lts": true }, { "value": "7.0", "current": false } ] -- 2.39.5