Skip to content

Commit

Permalink
Starter for increasing date fix #1660
Browse files Browse the repository at this point in the history
Related Work Items: #166
  • Loading branch information
MrHinsh committed Mar 12, 2024
1 parent 7296d2e commit 08e9a6a
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MigrationTools.DataContracts;
Expand Down Expand Up @@ -30,19 +31,21 @@ private static TfsRevisionManagerOptions GetTfsRevisionManagerOptions()
return migrationConfig;
}

private static WorkItemData GetWorkItemWithRevisions(DateTime currentDateTime, int startHours = 1, int endHours = 1)
private static WorkItemData GetWorkItemWithRevisions(DateTime currentDateTime, int startHours = 1, int endHours = 1, bool dateIncreasing = true)
{
var fakeWorkItem = new WorkItemData();
fakeWorkItem.Id = Guid.NewGuid().ToString();
fakeWorkItem.Revisions = new System.Collections.Generic.SortedDictionary<int, RevisionItem>();
for (int i = startHours; i < endHours + startHours; i++)
{
fakeWorkItem.Revisions.Add(i, new RevisionItem() { Index = i, Number = i, ChangedDate = currentDateTime.AddHours(-i) });
DateTime dateTime = dateIncreasing ? currentDateTime.AddHours(-i) : currentDateTime;
fakeWorkItem.Revisions.Add(i, new RevisionItem() { Index = i, Number = i, ChangedDate = dateTime, OriginalChangedDate = dateTime });
}

return fakeWorkItem;
}


[TestMethod(), TestCategory("L0"), TestCategory("AzureDevOps.ObjectModel")]
public void TfsRevisionManagerInSync1()
{
Expand Down Expand Up @@ -177,5 +180,33 @@ public void TfsRevisionManagerMaxRevision59()
Assert.AreEqual(5, revs.Count);
}

[TestMethod(), TestCategory("L0"), TestCategory("AzureDevOps.ObjectModel")]
public void TfsRevisionManagerDatesMustBeIncreasing()
{
var peOptions = GetTfsRevisionManagerOptions();
var processorEnricher = Services.GetRequiredService<TfsRevisionManager>();
processorEnricher.Configure(peOptions);

var currentDateTime = DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime.AddHours(-1000), 1, 10, false);

var revs = processorEnricher.GetRevisionsToMigrate(source, null);
Assert.AreEqual(true, CheckDateIncreasing(revs));
}

private static bool CheckDateIncreasing(List<RevisionItem> revs)
{
DateTime lastDatetime = DateTime.MinValue;
bool increasing = true;
foreach (var rev in revs)
{
if (rev.ChangedDate == lastDatetime)
{
increasing = false;
}
lastDatetime = rev.ChangedDate;
}
return increasing;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ private SortedDictionary<int, RevisionItem> GetRevisionItems(RevisionCollection
Index = x.Index,
Number = (int)x.Fields["System.Rev"].Value,
ChangedDate = (DateTime)x.Fields["System.ChangedDate"].Value,
OriginalChangedDate = (DateTime)x.Fields["System.ChangedDate"].Value,
Type = x.Fields["System.WorkItemType"].Value as string,
Fields = GetFieldItems(x.Fields)
}).ToList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
Expand Down Expand Up @@ -77,6 +78,9 @@ public List<RevisionItem> GetRevisionsToMigrate(WorkItemData sourceWorkItem, Wor
{
// Revisions have been sorted already on object creation. Values of the Dictionary are sorted by RevisionItem.Number
var sortedRevisions = sourceWorkItem.Revisions.Values.ToList();

EnforceDatesMustBeIncreasing(sortedRevisions);

LogDebugCurrentSortedRevisions(sourceWorkItem, sortedRevisions);
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate: Raw Source {sourceWorkItem} Has {sortedRevisions} revisions", sourceWorkItem.Id, sortedRevisions.Count);

Expand All @@ -91,6 +95,21 @@ public List<RevisionItem> GetRevisionsToMigrate(WorkItemData sourceWorkItem, Wor
return sortedRevisions;
}

private void EnforceDatesMustBeIncreasing(List<RevisionItem> sortedRevisions)
{
Log.LogDebug("TfsRevisionManager::EnforceDatesMustBeIncreasing");
DateTime lastDateTime = DateTime.MinValue;
foreach (var revision in sortedRevisions)
{
if (revision.OriginalChangedDate == lastDateTime || revision.OriginalChangedDate < lastDateTime)
{
revision.ChangedDate = lastDateTime.AddSeconds(1);
Log.LogDebug("TfsRevisionManager::EnforceDatesMustBeIncreasing[{revision}]::Fix", revision.Number);
}
lastDateTime = revision.ChangedDate;
}
}

private void LogDebugCurrentSortedRevisions(WorkItemData sourceWorkItem, List<RevisionItem> sortedRevisions)
{
Log.LogInformation("Found {RevisionsCount} revisions to migrate on Work item:{sourceWorkItemId}", sortedRevisions.Count, sourceWorkItem.Id);
Expand Down
2 changes: 2 additions & 0 deletions src/MigrationTools/DataContracts/RevisionItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ public class RevisionItem
public int Index { get; set; }
public int Number { get; set; }
public DateTime ChangedDate { get; set; }

public DateTime OriginalChangedDate { get; set; }
public string Type { get; set; }
public Dictionary<string, FieldItem> Fields { get; set; }
public Dictionary<string, EnricherData> EnricherData { get; set; }
Expand Down

0 comments on commit 08e9a6a

Please sign in to comment.