]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10257 Support lines without SCM info
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Wed, 17 Jan 2018 14:11:24 +0000 (15:11 +0100)
committerDuarte Meneses <duarte.meneses@sonarsource.com>
Wed, 7 Feb 2018 13:33:55 +0000 (14:33 +0100)
14 files changed:
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueAssigner.java
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueCreationDateCalculator.java
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/scm/ScmInfoImpl.java
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/source/ScmLineReader.java
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/NewCoverageMeasuresStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/NewSizeMeasuresStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/PersistFileSourcesStep.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/issue/IssueCreationDateCalculatorTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitorTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/scm/ChangesetTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/scm/ScmInfoRepositoryRule.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/source/ScmLineReaderTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/NewSizeMeasuresStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/PersistFileSourcesStepTest.java

index 4a1f25d4465e10c82b21ae38b2dde8d38f803772..d366cb1152640eb9368ac99164f0a0d1db420550 100644 (file)
@@ -41,11 +41,7 @@ import static org.sonar.core.issue.IssueChangeContext.createScan;
 /**
  * Detect the SCM author and SQ assignee.
  * <p/>
- * It relies on:
- * <ul>
- *   <li>SCM information sent in the report for modified files</li>
- *   <li>sources lines stored in database for non-modified files</li>
- * </ul>
+ * It relies on SCM information which comes from both the report and database.
  */
 public class IssueAssigner extends IssueVisitor {
 
index 4c3c173109c16b0a0fde555c20549fea5575a639..473fe7054f9e2bb6655d7cde059768a3473c533e 100644 (file)
@@ -157,7 +157,7 @@ public class IssueCreationDateCalculator extends IssueVisitor {
       }
     }
 
-    return Optional.ofNullable(scmInfo.getLatestChangeset());
+    return Optional.of(scmInfo.getLatestChangeset());
   }
 
   private static void addLines(Set<Integer> involvedLines, TextRange range) {
index 97b5233f18ea9c0225e5009b66ffb69588dab7ed..ca116018d67d460518d217c7bcf19f72a8585727 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.server.computation.task.projectanalysis.scm;
 
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -35,7 +36,7 @@ public class ScmInfoImpl implements ScmInfo {
 
   public ScmInfoImpl(Map<Integer, Changeset> lineChangesets) {
     checkState(!lineChangesets.isEmpty(), "A ScmInfo must have at least one Changeset and does not support any null one");
-    this.lineChangesets = lineChangesets;
+    this.lineChangesets = Collections.unmodifiableMap(lineChangesets);
     this.latestChangeset = computeLatestChangeset(lineChangesets);
   }
 
index e2a751615c3475e0ac5e3ec5d6254b2ebbafce95..b09edffc5852e6a3baf7eb898520f8ee6bedcc74 100644 (file)
@@ -74,9 +74,9 @@ public class ScmLineReader implements LineReader {
       latestChangeWithRevision = newChangeSet;
     } else {
       long newChangesetDate = newChangeSet.getDate();
-      long latestChangeDate = latestChange.getDate();
+      long latestChangeDate = latestChangeWithRevision.getDate();
       if (newChangesetDate > latestChangeDate) {
-        latestChange = newChangeSet;
+        latestChangeWithRevision = newChangeSet;
       }
     }
   }
index 5e7b8d74bc7ff4004244071e8ff1add24d394ef7..1eede2525ee31088b26ea735ca416ec74842c079 100644 (file)
@@ -273,7 +273,8 @@ public class NewCoverageMeasuresStep implements ComputationStep {
         int conditions = (Integer) ObjectUtils.defaultIfNull(conditionsByLine.get(lineId), 0);
         int coveredConditions = (Integer) ObjectUtils.defaultIfNull(coveredConditionsByLine.get(lineId), 0);
         if (componentScm.hasChangesetForLine(lineId)) {
-          analyze(context.getPeriod(), componentScm.getChangesetForLine(lineId).getDate(), hits, conditions, coveredConditions);
+          long date = componentScm.getChangesetForLine(lineId).getDate();
+          analyze(context.getPeriod(), date, hits, conditions, coveredConditions);
         }
       }
     }
index 94881754f28732ddc4b8b7bdcc3054ed9ccad989..ccd08059c467b4ecd7225e82d269ae752b2ce201 100644 (file)
@@ -132,7 +132,7 @@ public class NewSizeMeasuresStep implements ComputationStep {
     }
 
     private void initNewDuplicated(Component component, ScmInfo scmInfo, Period period) {
-      DuplicationCounters duplicationCounters = new DuplicationCounters(scmInfo, period);
+      DuplicationCounters duplicationCounters = new DuplicationCounters(scmInfo, period, scmInfo.getAllChangesets().size());
       Iterable<Duplication> duplications = duplicationRepository.getDuplications(component);
       for (Duplication duplication : duplications) {
         duplicationCounters.addBlock(duplication.getOriginal());
@@ -157,15 +157,16 @@ public class NewSizeMeasuresStep implements ComputationStep {
     private final Set<Integer> lineCounts;
     private int blockCounts;
 
-    private DuplicationCounters(ScmInfo scmInfo, Period period) {
+    private DuplicationCounters(ScmInfo scmInfo, Period period, int changesetSize) {
       this.scmInfo = scmInfo;
       this.period = period;
-      this.lineCounts = new HashSet<>();
+      this.lineCounts = new HashSet<>(changesetSize);
     }
 
     void addBlock(TextBlock textBlock) {
       Boolean[] newBlock = new Boolean[] {false};
       IntStream.rangeClosed(textBlock.getStart(), textBlock.getEnd())
+        .filter(scmInfo::hasChangesetForLine)
         .filter(line -> isLineInPeriod(line, period))
         .forEach(line -> {
           lineCounts.add(line);
index 9279a10fe6f6c5bcfb2022ec055a3e4333fe4598..a7c5d4cdcde9e2c54b803bfb19e539dd7f7e75e7 100644 (file)
@@ -168,11 +168,11 @@ public class PersistFileSourcesStep implements ComputationStep {
     }
 
     @CheckForNull
-    private String computeRevision(@Nullable Changeset latestChange) {
-      if (latestChange == null) {
+    private String computeRevision(@Nullable Changeset latestChangeWithRevision) {
+      if (latestChangeWithRevision == null) {
         return null;
       }
-      return latestChange.getRevision();
+      return latestChangeWithRevision.getRevision();
     }
   }
 
index b4c98156d1f78dadb4deeb8f57db1449099d51b8..226b3bbf3f6a2a7901b74d81df35fd9aa36fd83c 100644 (file)
@@ -264,9 +264,7 @@ public class IssueCreationDateCalculatorTest {
     withScmAt(3, 1300L);
     withScmAt(4, 1400L);
     withScmAt(5, 1500L);
-    withScmAt(6, 1600L);
-    withScmAt(7, 1700L);
-    withScmAt(8, 1800L);
+    // some lines missing should be ok
     withScmAt(9, 1900L);
 
     run();
index c39cd3146db3e08d8872775d0ef9a889a28ac121..c9564da5bd002257ed5d59a46cd01b2b32c6905e 100644 (file)
@@ -23,7 +23,9 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Ordering;
 import java.util.Arrays;
+import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 import org.assertj.core.data.Offset;
 import org.junit.Before;
 import org.junit.Rule;
@@ -170,6 +172,19 @@ public class NewMaintainabilityMeasuresVisitorTest {
     assertNewDebtRatioValues(ROOT_REF, 83.33);
   }
 
+  @Test
+  public void file_has_new_debt_ratio_if_only_has_some_scm_dates_which_are_after_snapshot_dates() {
+    setPeriod();
+    when(ratingSettings.getDevCost(LANGUAGE_1_KEY)).thenReturn(LANGUAGE_1_DEV_COST);
+    setupOneFileAloneInAProjectWithPartialChangesets(50, Flag.SRC_FILE, Flag.WITH_NCLOC);
+    measureRepository.addRawMeasure(ROOT_REF, NEW_TECHNICAL_DEBT_KEY, createNewDebtMeasure(50));
+
+    underTest.visit(treeRootHolder.getRoot());
+
+    assertNewDebtRatioValues(LANGUAGE_1_FILE_REF, 83.33);
+    assertNewDebtRatioValues(ROOT_REF, 83.33);
+  }
+
   @Test
   public void new_debt_ratio_changes_with_language_cost() {
     setPeriod();
@@ -367,8 +382,7 @@ public class NewMaintainabilityMeasuresVisitorTest {
               builder(DIRECTORY, 111)
                 .addChildren(
                   builder(FILE, LANGUAGE_1_FILE_REF).setFileAttributes(new FileAttributes(false, LANGUAGE_1_KEY, 4)).build(),
-                  builder(FILE, 22_222).setFileAttributes(new FileAttributes(false, LANGUAGE_1_KEY, 6)).build()
-                )
+                  builder(FILE, 22_222).setFileAttributes(new FileAttributes(false, LANGUAGE_1_KEY, 6)).build())
                 .build())
             .build())
         .build());
@@ -439,6 +453,29 @@ public class NewMaintainabilityMeasuresVisitorTest {
     }
   }
 
+  private void setupOneFileAloneInAProjectWithPartialChangesets(int newDebt, Flag isUnitTest, Flag withNclocLines) {
+    checkArgument(isUnitTest == Flag.UT_FILE || isUnitTest == Flag.SRC_FILE);
+    checkArgument(withNclocLines == Flag.WITH_NCLOC || withNclocLines == Flag.NO_NCLOC || withNclocLines == Flag.MISSING_MEASURE_NCLOC);
+
+    treeRootHolder.setRoot(
+      builder(PROJECT, ROOT_REF)
+        .addChildren(
+          builder(FILE, LANGUAGE_1_FILE_REF).setFileAttributes(new FileAttributes(isUnitTest == Flag.UT_FILE, LANGUAGE_1_KEY, 1)).build())
+        .build());
+
+    Measure newDebtMeasure = createNewDebtMeasure(newDebt);
+    measureRepository.addRawMeasure(LANGUAGE_1_FILE_REF, NEW_TECHNICAL_DEBT_KEY, newDebtMeasure);
+    if (withNclocLines == Flag.WITH_NCLOC) {
+      // 4 lines file, only first one is not ncloc
+      measureRepository.addRawMeasure(LANGUAGE_1_FILE_REF, NCLOC_DATA_KEY, createNclocDataMeasure(2, 3, 4));
+    } else if (withNclocLines == Flag.NO_NCLOC) {
+      // 4 lines file, none of which is ncloc
+      measureRepository.addRawMeasure(LANGUAGE_1_FILE_REF, NCLOC_DATA_KEY, createNoNclocDataMeasure(4));
+    }
+    // 2 last lines are after PERIOD 2's snapshot date
+    scmInfoRepository.setScmInfo(LANGUAGE_1_FILE_REF, createChangesetsForLines(PERIOD_SNAPSHOT_DATE + 100, 3, 4));
+  }
+
   private enum Flag {
     UT_FILE, SRC_FILE, NO_CHANGESET, WITH_CHANGESET, WITH_NCLOC, NO_NCLOC, MISSING_MEASURE_NCLOC
   }
@@ -481,6 +518,14 @@ public class NewMaintainabilityMeasuresVisitorTest {
     return changesets;
   }
 
+  /**
+   * Creates changesets for specific lines, which all have the same date {@code scmDate}.
+   */
+  private static Map<Integer, Changeset> createChangesetsForLines(long scmDate, int... lines) {
+    Changeset changetset = Changeset.newChangesetBuilder().setDate(scmDate).setRevision("rev-1").build();
+    return Arrays.stream(lines).boxed().collect(Collectors.toMap(l -> l, l -> changetset));
+  }
+
   /**
    * Creates a changeset of {@code lineCount} lines which have the date {@code scmDate} and {@code otherLineCount} lines which
    * have the date {@code otherScmDate}.
index 8d96ca4605b31686f70cb9b3d1781105f1d4efd9..997f9defd79ca93fd01322e6b70000c42aec8eb9 100644 (file)
@@ -47,12 +47,11 @@ public class ChangesetTest {
   public void create_changeset_with_minimum_fields() {
     Changeset underTest = Changeset.newChangesetBuilder()
       .setDate(123456789L)
-      .setRevision("rev-1")
       .build();
 
     assertThat(underTest.getAuthor()).isNull();
     assertThat(underTest.getDate()).isEqualTo(123456789L);
-    assertThat(underTest.getRevision()).isEqualTo("rev-1");
+    assertThat(underTest.getRevision()).isNull();
   }
 
   @Test
index 516e780c50b84366f33270a001d6ff4098520cf5..0c42e7bde7127b26be4fc05aaf8cf02fa84a0424 100644 (file)
@@ -50,4 +50,9 @@ public class ScmInfoRepositoryRule extends ExternalResource implements ScmInfoRe
     scmInfoByFileRef.put(fileRef, new ScmInfoImpl(changeset));
     return this;
   }
+  
+  public ScmInfoRepositoryRule setScmInfo(int fileRef, Map<Integer, Changeset> changesets) {
+    scmInfoByFileRef.put(fileRef, new ScmInfoImpl(changesets));
+    return this;
+  }
 }
index d22734747387d555ed5e94179e1a55fd19efe9ae..1abd95527f9c7e33eaf56f922ae1e8bfda1e2b62 100644 (file)
@@ -55,8 +55,7 @@ public class ScmLineReaderTest {
   public void set_scm_with_minim_fields() {
     ScmInfo scmInfo = new ScmInfoImpl(Collections.singletonMap(1,
       Changeset.newChangesetBuilder()
-        .setDate(123_456_789L)
-        .setRevision("rev-1")
+        .setDate(123456789L)
         .build()));
 
     ScmLineReader lineScm = new ScmLineReader(scmInfo);
@@ -66,7 +65,8 @@ public class ScmLineReaderTest {
 
     assertThat(lineBuilder.hasScmAuthor()).isFalse();
     assertThat(lineBuilder.getScmDate()).isEqualTo(123456789L);
-    assertThat(lineBuilder.getScmRevision()).isEqualTo("rev-1");
+    assertThat(lineBuilder.hasScmRevision()).isFalse();
+
   }
 
   @Test
@@ -74,31 +74,32 @@ public class ScmLineReaderTest {
     long refDate = 123_456_789L;
     Changeset changeset0 = Changeset.newChangesetBuilder().setDate(refDate - 636).setRevision("rev-1").build();
     Changeset changeset1 = Changeset.newChangesetBuilder().setDate(refDate + 1).setRevision("rev-2").build();
-    Changeset changeset2 = Changeset.newChangesetBuilder().setDate(refDate + 2).setRevision("rev-3").build();
+    Changeset changeset2 = Changeset.newChangesetBuilder().setDate(refDate + 2).build();
     ScmInfo scmInfo = new ScmInfoImpl(setup8LinesChangeset(changeset0, changeset1, changeset2));
 
     ScmLineReader lineScm = new ScmLineReader(scmInfo);
 
-    // before any line is read, the latest change is null
+    // before any line is read, the latest changes are null
     assertThat(lineScm.getLatestChange()).isNull();
+    assertThat(lineScm.getLatestChangeWithRevision()).isNull();
 
     // read line 1, only one changeset => 0
-    readLineAndAssertLatestChangeDate(lineScm, 1, changeset0);
+    readLineAndAssertLatestChanges(lineScm, 1, changeset0, changeset0);
 
     // read line 2, latest changeset is 1
-    readLineAndAssertLatestChangeDate(lineScm, 2, changeset1);
+    readLineAndAssertLatestChanges(lineScm, 2, changeset1, changeset1);
 
     // read line 3, latest changeset is still 1
-    readLineAndAssertLatestChangeDate(lineScm, 3, changeset1);
+    readLineAndAssertLatestChanges(lineScm, 3, changeset1, changeset1);
 
     // read line 4, latest changeset is now 2
-    readLineAndAssertLatestChangeDate(lineScm, 4, changeset2);
+    readLineAndAssertLatestChanges(lineScm, 4, changeset2, changeset1);
 
     // read line 5 to 8, there will never be any changeset more recent than 2
-    readLineAndAssertLatestChangeDate(lineScm, 5, changeset2);
-    readLineAndAssertLatestChangeDate(lineScm, 6, changeset2);
-    readLineAndAssertLatestChangeDate(lineScm, 7, changeset2);
-    readLineAndAssertLatestChangeDate(lineScm, 8, changeset2);
+    readLineAndAssertLatestChanges(lineScm, 5, changeset2, changeset1);
+    readLineAndAssertLatestChanges(lineScm, 6, changeset2, changeset1);
+    readLineAndAssertLatestChanges(lineScm, 7, changeset2, changeset1);
+    readLineAndAssertLatestChanges(lineScm, 8, changeset2, changeset1);
   }
 
   private static Map<Integer, Changeset> setup8LinesChangeset(Changeset changeset0, Changeset changeset1, Changeset changeset2) {
@@ -113,10 +114,12 @@ public class ScmLineReaderTest {
       .put(8, changeset0).build();
   }
 
-  private void readLineAndAssertLatestChangeDate(ScmLineReader lineScm, int line, Changeset expectedChangeset) {
+  private void readLineAndAssertLatestChanges(ScmLineReader lineScm, int line, Changeset expectedChangeset, Changeset expectedChangesetWithRevision) {
     DbFileSources.Line.Builder lineBuilder = DbFileSources.Data.newBuilder().addLinesBuilder().setLine(line);
     lineScm.read(lineBuilder);
     assertThat(lineScm.getLatestChange()).isSameAs(expectedChangeset);
+    assertThat(lineScm.getLatestChangeWithRevision()).isSameAs(expectedChangesetWithRevision);
+
   }
 
 }
index 25e6bfa4b44da191330b94d6290312210030b033..099ef4286745562dbff404d51c64b55d55da3eb0 100644 (file)
@@ -132,6 +132,24 @@ public class NewSizeMeasuresStepTest {
     assertRawMeasureValueOnPeriod(ROOT_REF, NEW_LINES_KEY, 33);
   }
 
+  @Test
+  public void compute_new_lines_with_only_some_lines_having_changesets() {
+    setChangesetsForFirstThreeLines(FILE_1_REF, FILE_2_REF, FILE_4_REF);
+
+    underTest.execute();
+
+    assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_LINES_KEY, 2);
+    assertRawMeasureValueOnPeriod(FILE_2_REF, NEW_LINES_KEY, 2);
+    assertNoRawMeasure(FILE_3_REF, NEW_LINES_KEY);
+    assertRawMeasureValueOnPeriod(FILE_4_REF, NEW_LINES_KEY, 2);
+    assertRawMeasureValueOnPeriod(DIRECTORY_REF, NEW_LINES_KEY, 4);
+    assertNoRawMeasure(DIRECTORY_2_REF, NEW_LINES_KEY);
+    assertRawMeasureValueOnPeriod(SUB_MODULE_1_REF, NEW_LINES_KEY, 4);
+    assertRawMeasureValueOnPeriod(SUB_MODULE_2_REF, NEW_LINES_KEY, 2);
+    assertRawMeasureValueOnPeriod(MODULE_REF, NEW_LINES_KEY, 6);
+    assertRawMeasureValueOnPeriod(ROOT_REF, NEW_LINES_KEY, 6);
+  }
+
   @Test
   public void does_not_compute_new_lines_when_no_changeset() {
     underTest.execute();
@@ -217,6 +235,31 @@ public class NewSizeMeasuresStepTest {
     assertRawMeasureValueOnPeriod(MODULE_REF, NEW_DUPLICATED_LINES_KEY, 22d);
     assertRawMeasureValueOnPeriod(ROOT_REF, NEW_DUPLICATED_LINES_KEY, 22d);
   }
+  
+  @Test
+  public void compute_and_aggregate_duplicated_lines_when_only_some_lines_have_changesets() {
+    // 2 new duplicated lines in each, since only the first 2 lines are new
+    addDuplicatedBlock(FILE_1_REF, 2);
+    addDuplicatedBlock(FILE_3_REF, 10);
+    addDuplicatedBlock(FILE_4_REF, 12);
+    setChangesetsForFirstThreeLines(FILE_1_REF);
+    setChangesetsForFirstThreeLines(FILE_2_REF);
+    setChangesetsForFirstThreeLines(FILE_3_REF);
+    setChangesetsForFirstThreeLines(FILE_4_REF);
+
+    underTest.execute();
+
+    assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 2d);
+    assertRawMeasureValueOnPeriod(FILE_2_REF, NEW_DUPLICATED_LINES_KEY, 0d);
+    assertRawMeasureValueOnPeriod(FILE_3_REF, NEW_DUPLICATED_LINES_KEY, 2d);
+    assertRawMeasureValueOnPeriod(FILE_4_REF, NEW_DUPLICATED_LINES_KEY, 2d);
+    assertRawMeasureValueOnPeriod(DIRECTORY_REF, NEW_DUPLICATED_LINES_KEY, 2d);
+    assertNoRawMeasure(DIRECTORY_2_REF, NEW_DUPLICATED_LINES_KEY);
+    assertRawMeasureValueOnPeriod(SUB_MODULE_1_REF, NEW_DUPLICATED_LINES_KEY, 2d);
+    assertRawMeasureValueOnPeriod(SUB_MODULE_2_REF, NEW_DUPLICATED_LINES_KEY, 4d);
+    assertRawMeasureValueOnPeriod(MODULE_REF, NEW_DUPLICATED_LINES_KEY, 6d);
+    assertRawMeasureValueOnPeriod(ROOT_REF, NEW_DUPLICATED_LINES_KEY, 6d);
+  }
 
   @Test
   public void compute_and_aggregate_zero_duplicated_line_when_no_duplication() {
@@ -344,6 +387,15 @@ public class NewSizeMeasuresStepTest {
     duplicationRepository.addDuplication(fileRef, original, duplicates);
   }
 
+  private void setChangesetsForFirstThreeLines(int... componentRefs) {
+    Arrays.stream(componentRefs)
+      .forEach(componentRef -> scmInfoRepository.setScmInfo(componentRef,
+        Changeset.newChangesetBuilder().setDate(parseDate("2011-01-01").getTime()).setRevision("rev-1").build(),
+        Changeset.newChangesetBuilder().setDate(parseDate("2011-01-01").getTime()).setRevision("rev-1").build(),
+        // line 3 is older, part of no period
+        Changeset.newChangesetBuilder().setDate(parseDate("2007-01-15").getTime()).setRevision("rev-2").build()));
+  }
+
   private void setChangesets(int... componentRefs) {
     Arrays.stream(componentRefs)
       .forEach(componentRef -> scmInfoRepository.setScmInfo(componentRef,
index fbe3fc3d10563c5cc617f393d606d842914f0ac7..8d5246ef961bd685ddf97f37e01a72686f0c26dc 100644 (file)
@@ -190,7 +190,10 @@ public class PersistFileSourcesStepTest extends BaseStepTest {
       .setAuthor("john")
       .setDate(123456789L)
       .setRevision("rev-1")
-      .build());
+      .build(),
+      Changeset.newChangesetBuilder()
+        .setDate(223456789L)
+        .build());
 
     underTest.execute();
 
@@ -208,12 +211,13 @@ public class PersistFileSourcesStepTest extends BaseStepTest {
     assertThat(data.getLines(0).getScmRevision()).isEqualTo("rev-1");
 
     assertThat(data.getLines(1).getScmAuthor()).isEmpty();
-    assertThat(data.getLines(1).getScmDate()).isEqualTo(0);
+    assertThat(data.getLines(1).getScmDate()).isEqualTo(223456789L);
     assertThat(data.getLines(1).getScmRevision()).isEmpty();
 
     assertThat(data.getLines(2).getScmAuthor()).isEmpty();
     assertThat(data.getLines(2).getScmDate()).isEqualTo(0);
     assertThat(data.getLines(2).getScmRevision()).isEmpty();
+
   }
 
   @Test