From: Stas Vilchik Date: Fri, 10 Feb 2017 10:01:50 +0000 (+0100) Subject: SONAR-8372 Improve the leak period header on a project dashboard (#1651) X-Git-Tag: 6.3-RC1~62 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8a2cea457ed4b0ac15f6303cd7eb48ce0d5e84d9;p=sonarqube.git SONAR-8372 Improve the leak period header on a project dashboard (#1651) --- diff --git a/server/sonar-web/src/main/js/apps/overview/components/LeakPeriodLegend.js b/server/sonar-web/src/main/js/apps/overview/components/LeakPeriodLegend.js index 113568e1212..f2f88dc0f09 100644 --- a/server/sonar-web/src/main/js/apps/overview/components/LeakPeriodLegend.js +++ b/server/sonar-web/src/main/js/apps/overview/components/LeakPeriodLegend.js @@ -17,30 +17,65 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +// @flow import React from 'react'; import moment from 'moment'; import { getPeriodDate, getPeriodLabel } from '../../../helpers/periods'; import { translateWithParameters } from '../../../helpers/l10n'; -const LeakPeriodLegend = ({ period }) => { - const leakPeriodLabel = getPeriodLabel(period); - const leakPeriodDate = getPeriodDate(period); - - const momentDate = moment(leakPeriodDate); - const fromNow = momentDate.fromNow(); - const tooltip = translateWithParameters( - 'overview.started_on_x', - momentDate.format('LL')); - - return ( -
- {translateWithParameters('overview.leak_period_x', leakPeriodLabel)} -
- - {translateWithParameters('overview.started_x', fromNow)} - -
- ); +type DaysPeriod = { + date: string, + mode: 'days', + parameter: string }; -export default LeakPeriodLegend; +type DatePeriod = { + date: string, + mode: 'date', + parameter: string +}; + +type VersionPeriod = { + date: string, + mode: 'version', + parameter: string +}; + +type PreviousAnalysisPeriod = { + date: string, + mode: 'previous_analysis' +}; + +type PreviousVersionPeriod = { + date: string, + mode: 'previous_version' +}; + +type Period = DaysPeriod | DatePeriod | VersionPeriod | PreviousAnalysisPeriod | PreviousVersionPeriod; + +export default class LeakPeriodLegend extends React.Component { + props: { period: Period }; + + render () { + const { period } = this.props; + const leakPeriodLabel = getPeriodLabel(period); + const leakPeriodDate = getPeriodDate(period); + + const momentDate = moment(leakPeriodDate); + const fromNow = momentDate.fromNow(); + const note = ['date', 'days'].includes(period.mode) ? + translateWithParameters('overview.last_analysis_x', fromNow) : + translateWithParameters('overview.started_x', fromNow); + const tooltip = ['date', 'days'].includes(period.mode) ? + translateWithParameters('overview.last_analysis_on_x', momentDate.format('LL')) : + translateWithParameters('overview.started_on_x', momentDate.format('LL')); + + return ( +
+ {translateWithParameters('overview.leak_period_x', leakPeriodLabel)} +
+ {note} +
+ ); + } +} diff --git a/server/sonar-web/src/main/js/apps/overview/components/__tests__/LeakPeriodLegend-test.js b/server/sonar-web/src/main/js/apps/overview/components/__tests__/LeakPeriodLegend-test.js new file mode 100644 index 00000000000..124ce7224b1 --- /dev/null +++ b/server/sonar-web/src/main/js/apps/overview/components/__tests__/LeakPeriodLegend-test.js @@ -0,0 +1,67 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact 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 React from 'react'; +import { shallow } from 'enzyme'; +import LeakPeriodLegend from '../LeakPeriodLegend'; + +describe('check note', () => { + it('10 days', () => { + const period = { + date: '2013-09-22T00:00:00+0200', + mode: 'days', + parameter: '10' + }; + expect(shallow().find('.note')).toMatchSnapshot(); + }); + + it('date', () => { + const period = { + date: '2013-09-22T00:00:00+0200', + mode: 'date', + parameter: '2013-01-01' + }; + expect(shallow().find('.note')).toMatchSnapshot(); + }); + + it('version', () => { + const period = { + date: '2013-09-22T00:00:00+0200', + mode: 'version', + parameter: '0.1' + }; + expect(shallow().find('.note')).toMatchSnapshot(); + }); + + it('previous_version', () => { + const period = { + date: '2013-09-22T00:00:00+0200', + mode: 'previous_version' + }; + expect(shallow().find('.note')).toMatchSnapshot(); + }); + + it('previous_analysis', () => { + const period = { + date: '2013-09-22T00:00:00+0200', + mode: 'previous_analysis' + }; + expect(shallow().find('.note')).toMatchSnapshot(); + }); +}); diff --git a/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/LeakPeriodLegend-test.js.snap b/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/LeakPeriodLegend-test.js.snap new file mode 100644 index 00000000000..120a40ce1b9 --- /dev/null +++ b/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/LeakPeriodLegend-test.js.snap @@ -0,0 +1,34 @@ +exports[`check note 10 days 1`] = ` + + overview.last_analysis_x.3 years ago + +`; + +exports[`check note date 1`] = ` + + overview.last_analysis_x.3 years ago + +`; + +exports[`check note previous_analysis 1`] = ` + + overview.started_x.3 years ago + +`; + +exports[`check note previous_version 1`] = ` + + overview.started_x.3 years ago + +`; + +exports[`check note version 1`] = ` + + overview.started_x.3 years ago + +`; diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties index 2d59b3c72cf..abb04044464 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -2626,7 +2626,9 @@ overview.you_should_define_quality_gate=You should define a quality gate on this overview.quality_profiles=Quality Profiles overview.leak_period_x=Leak Period: {0} overview.started_x=started {0} +overview.last_analysis_x=last analysis {0} overview.started_on_x=Started on {0} +overview.last_analysis_on_x=Last analysis on {0} overview.on_new_code=On New Code overview.metric.code_smells=Code Smells