]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8372 Improve the leak period header on a project dashboard (#1651)
authorStas Vilchik <stas-vilchik@users.noreply.github.com>
Fri, 10 Feb 2017 10:01:50 +0000 (11:01 +0100)
committerGitHub <noreply@github.com>
Fri, 10 Feb 2017 10:01:50 +0000 (11:01 +0100)
server/sonar-web/src/main/js/apps/overview/components/LeakPeriodLegend.js
server/sonar-web/src/main/js/apps/overview/components/__tests__/LeakPeriodLegend-test.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/LeakPeriodLegend-test.js.snap [new file with mode: 0644]
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index 113568e121258fab8e95d90fc8d5bdcb8c3562c7..f2f88dc0f090ffc73d17acd88fff19f06b544726 100644 (file)
  * 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 (
-      <div className="overview-legend" title={tooltip} data-toggle="tooltip">
-        {translateWithParameters('overview.leak_period_x', leakPeriodLabel)}
-        <br/>
-        <span className="note">
-          {translateWithParameters('overview.started_x', fromNow)}
-        </span>
-      </div>
-  );
+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 (
+        <div className="overview-legend" title={tooltip} data-toggle="tooltip">
+          {translateWithParameters('overview.leak_period_x', leakPeriodLabel)}
+          <br/>
+          <span className="note">{note}</span>
+        </div>
+    );
+  }
+}
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 (file)
index 0000000..124ce72
--- /dev/null
@@ -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(<LeakPeriodLegend period={period}/>).find('.note')).toMatchSnapshot();
+  });
+
+  it('date', () => {
+    const period = {
+      date: '2013-09-22T00:00:00+0200',
+      mode: 'date',
+      parameter: '2013-01-01'
+    };
+    expect(shallow(<LeakPeriodLegend period={period}/>).find('.note')).toMatchSnapshot();
+  });
+
+  it('version', () => {
+    const period = {
+      date: '2013-09-22T00:00:00+0200',
+      mode: 'version',
+      parameter: '0.1'
+    };
+    expect(shallow(<LeakPeriodLegend period={period}/>).find('.note')).toMatchSnapshot();
+  });
+
+  it('previous_version', () => {
+    const period = {
+      date: '2013-09-22T00:00:00+0200',
+      mode: 'previous_version'
+    };
+    expect(shallow(<LeakPeriodLegend period={period}/>).find('.note')).toMatchSnapshot();
+  });
+
+  it('previous_analysis', () => {
+    const period = {
+      date: '2013-09-22T00:00:00+0200',
+      mode: 'previous_analysis'
+    };
+    expect(shallow(<LeakPeriodLegend period={period}/>).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 (file)
index 0000000..120a40c
--- /dev/null
@@ -0,0 +1,34 @@
+exports[`check note 10 days 1`] = `
+<span
+  className="note">
+  overview.last_analysis_x.3 years ago
+</span>
+`;
+
+exports[`check note date 1`] = `
+<span
+  className="note">
+  overview.last_analysis_x.3 years ago
+</span>
+`;
+
+exports[`check note previous_analysis 1`] = `
+<span
+  className="note">
+  overview.started_x.3 years ago
+</span>
+`;
+
+exports[`check note previous_version 1`] = `
+<span
+  className="note">
+  overview.started_x.3 years ago
+</span>
+`;
+
+exports[`check note version 1`] = `
+<span
+  className="note">
+  overview.started_x.3 years ago
+</span>
+`;
index 2d59b3c72cfb4a60a1d1e05e29f582a534d51160..abb04044464eafaad56583048ce08cc997011810 100644 (file)
@@ -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