Skip to content

Commit 34c8019

Browse files
Merge pull request #1041 from solidify/bugfix/ensure-fields-on-state-change-return-if-no-state
Bugfix/ensure fields on state change return if no state
2 parents 78525e9 + 5e897b4 commit 34c8019

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

src/WorkItemMigrator/WorkItemImport/WitClient/WitClientUtils.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
1+
using Microsoft.TeamFoundation.Common;
2+
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
23
using Microsoft.VisualStudio.Services.WebApi;
34
using Microsoft.VisualStudio.Services.WebApi.Patch;
45
using Microsoft.VisualStudio.Services.WebApi.Patch.Json;
@@ -804,6 +805,11 @@ private void CorrectClosedByAndClosedDate(WiRevision rev, WorkItem wi)
804805
}
805806
var revState = rev.Fields.GetFieldValueOrDefault<string>(WiFieldReference.State) ?? string.Empty;
806807

808+
if (wiState.IsNullOrEmpty())
809+
{
810+
return;
811+
}
812+
807813
if (
808814
(
809815
wiState.Equals(Done, StringComparison.InvariantCultureIgnoreCase)
@@ -838,6 +844,11 @@ private void CorrectActivatedByAndActivatedDate(WiRevision rev, WorkItem wi)
838844
}
839845
var revState = rev.Fields.GetFieldValueOrDefault<string>(WiFieldReference.State) ?? string.Empty;
840846

847+
if (wiState.IsNullOrEmpty())
848+
{
849+
return;
850+
}
851+
841852
if (!wiState.Equals(New, StringComparison.InvariantCultureIgnoreCase) && revState.Equals(New, StringComparison.InvariantCultureIgnoreCase))
842853
{
843854
rev.Fields.Add(new WiField() { ReferenceName = WiFieldReference.ActivatedDate, Value = "" });
@@ -863,6 +874,11 @@ private void CorrectResolvedByAndResolvedDate(WiRevision rev, WorkItem wi)
863874
}
864875
var revState = rev.Fields.GetFieldValueOrDefault<string>(WiFieldReference.State) ?? string.Empty;
865876

877+
if (wiState.IsNullOrEmpty())
878+
{
879+
return;
880+
}
881+
866882
if ((wiState.Equals(Resolved, StringComparison.InvariantCultureIgnoreCase)
867883
|| wiState.Equals(Done, StringComparison.InvariantCultureIgnoreCase)
868884
|| wiState.Equals(Closed, StringComparison.InvariantCultureIgnoreCase))

src/WorkItemMigrator/tests/Migration.Wi-Import.Tests/WitClient/WitClientUtilsTests.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,43 @@ public void When_calling_ensure_fields_on_a_closed_user_Story_with_Then_closed_d
396396
});
397397
}
398398

399+
[Test]
400+
public void When_calling_ensure_fields_on_a_wi_with_no_state_field_Then_no_execption_is_thrown_and_no_revision_fields_are_set()
401+
{
402+
MockedWitClientWrapper witClientWrapper = new MockedWitClientWrapper();
403+
WitClientUtils wiUtils = new WitClientUtils(witClientWrapper);
404+
405+
WiRevision rev = new WiRevision
406+
{
407+
Fields = new List<WiField>(),
408+
Index = 1
409+
};
410+
411+
WiField revState = new WiField
412+
{
413+
ReferenceName = WiFieldReference.State,
414+
Value = "New"
415+
};
416+
rev.Fields.Add(revState);
417+
418+
WorkItem createdWI = wiUtils.CreateWorkItem("User Story", false);
419+
420+
wiUtils.EnsureFieldsOnStateChange(rev, createdWI);
421+
422+
Assert.DoesNotThrow(() => wiUtils.EnsureFieldsOnStateChange(rev, createdWI));
423+
424+
Assert.Multiple(() =>
425+
{
426+
Assert.That(rev.Fields.GetFieldValueOrDefault<string>(WiFieldReference.State), Is.EqualTo("New"));
427+
Assert.That(rev.Fields.Where(f => f.ReferenceName.Equals(WiFieldReference.ClosedDate)).Count, Is.EqualTo(0));
428+
Assert.That(rev.Fields.Where(f => f.ReferenceName.Equals(WiFieldReference.ClosedBy)).Count, Is.EqualTo(0));
429+
Assert.That(rev.Fields.Where(f => f.ReferenceName.Equals(WiFieldReference.ActivatedDate)).Count, Is.EqualTo(0));
430+
Assert.That(rev.Fields.Where(f => f.ReferenceName.Equals(WiFieldReference.ActivatedBy)).Count, Is.EqualTo(0));
431+
Assert.That(rev.Fields.Where(f => f.ReferenceName.Equals(WiFieldReference.ResolvedDate)).Count, Is.EqualTo(0));
432+
Assert.That(rev.Fields.Where(f => f.ReferenceName.Equals(WiFieldReference.ResolvedBy)).Count, Is.EqualTo(0));
433+
});
434+
}
435+
399436
[Test]
400437
public void When_calling_ensure_classification_fields_with_empty_args_Then_an_exception_is_thrown()
401438
{

0 commit comments

Comments
 (0)