]> source.dussan.org Git - sonarqube.git/commitdiff
change ProjectCardLeak-test to not depend on current time
authorStas Vilchik <stas.vilchik@sonarsource.com>
Thu, 23 Aug 2018 08:53:03 +0000 (10:53 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 23 Aug 2018 18:21:35 +0000 (20:21 +0200)
server/sonar-web/src/main/js/apps/projects/components/ProjectCardLeak.tsx
server/sonar-web/src/main/js/apps/projects/components/__tests__/ProjectCardLeak-test.tsx
server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectCardLeak-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/utils.ts

index bfade4592206539612807676341003e6f6dda5dd..fe1452872f40feee67623617062d63fcedcb35ae 100644 (file)
@@ -19,6 +19,7 @@
  */
 import * as React from 'react';
 import { Link } from 'react-router';
+import * as difference from 'date-fns/difference_in_milliseconds';
 import ProjectCardQualityGate from './ProjectCardQualityGate';
 import ProjectCardLeakMeasures from './ProjectCardLeakMeasures';
 import ProjectCardOrganizationContainer from './ProjectCardOrganizationContainer';
@@ -41,9 +42,8 @@ interface Props {
 export default function ProjectCardLeak({ height, organization, project }: Props) {
   const { measures } = project;
   const hasTags = project.tags.length > 0;
-  const period = project.leakPeriodDate
-    ? new Date().getTime() - new Date(project.leakPeriodDate).getTime()
-    : 0;
+  const periodMs = project.leakPeriodDate ? difference(Date.now(), project.leakPeriodDate) : 0;
+
   return (
     <div className="boxed-group project-card" data-key={project.key} style={{ height }}>
       <div className="boxed-group-header clearfix">
@@ -79,7 +79,7 @@ export default function ProjectCardLeak({ height, organization, project }: Props
           project.leakPeriodDate && (
             <div className="project-card-dates note text-right pull-right">
               <span className="project-card-leak-date pull-right">
-                {translateWithParameters('projects.new_code_period_x', formatDuration(period))}
+                {translateWithParameters('projects.new_code_period_x', formatDuration(periodMs))}
               </span>
               <DateTimeFormatter date={project.analysisDate}>
                 {formattedDate => (
index b83840aedde0f388b2341e5658b6deead2f8087a..67d4b26c17a9f99940b9f1b67a6102037ef0a95c 100644 (file)
@@ -22,6 +22,12 @@ import { shallow } from 'enzyme';
 import ProjectCardLeak from '../ProjectCardLeak';
 import { Visibility } from '../../../../app/types';
 
+jest.mock(
+  'date-fns/difference_in_milliseconds',
+  () => () => 1000 * 60 * 60 * 24 * 30 * 8 // ~ 8 months
+);
+
+/* eslint-disable camelcase */
 const MEASURES = {
   alert_status: 'OK',
   reliability_rating: '1.0',
index d3204d97486443db6c30be353a3ef5cf43bdc2cb..bcf67883a013b45b1f621e01683af175a5fd4d2a 100644 (file)
@@ -168,7 +168,7 @@ exports[`should display the leak measures and quality gate 1`] = `
       <span
         className="project-card-leak-date pull-right"
       >
-        projects.new_code_period_x.duration.years.1 duration.months.8 
+        projects.new_code_period_x.duration.months.8 
       </span>
       <DateTimeFormatter
         date="2017-01-01"
index 61ea473403fbb8f4098a7fd7d52c18dc940358b4..6c515d4a1df8ff02e619dfc3712a73611b82aa12 100644 (file)
@@ -369,19 +369,19 @@ function format(periods: Array<{ value: number; label: string }>) {
   return result;
 }
 
-export function formatDuration(value: number) {
-  if (value < ONE_MINUTE) {
+export function formatDuration(ms: number) {
+  if (ms < ONE_MINUTE) {
     return translate('duration.seconds');
   }
-  const years = Math.floor(value / ONE_YEAR);
-  value -= years * ONE_YEAR;
-  const months = Math.floor(value / ONE_MONTH);
-  value -= months * ONE_MONTH;
-  const days = Math.floor(value / ONE_DAY);
-  value -= days * ONE_DAY;
-  const hours = Math.floor(value / ONE_HOUR);
-  value -= hours * ONE_HOUR;
-  const minutes = Math.floor(value / ONE_MINUTE);
+  const years = Math.floor(ms / ONE_YEAR);
+  ms -= years * ONE_YEAR;
+  const months = Math.floor(ms / ONE_MONTH);
+  ms -= months * ONE_MONTH;
+  const days = Math.floor(ms / ONE_DAY);
+  ms -= days * ONE_DAY;
+  const hours = Math.floor(ms / ONE_HOUR);
+  ms -= hours * ONE_HOUR;
+  const minutes = Math.floor(ms / ONE_MINUTE);
   return format([
     { value: years, label: 'duration.years' },
     { value: months, label: 'duration.months' },