Skip to content

Commit 0776424

Browse files
Merge pull request #785 from solidify/bugfix/attachment-urls-in-comments-formatting-fix
Fix incorrect formatting for jira image URLs in comments
2 parents 44c9bb8 + 0b180c1 commit 0776424

File tree

2 files changed

+54
-5
lines changed

2 files changed

+54
-5
lines changed

src/WorkItemMigrator/WorkItemImport/WitClient/WitClientUtils.cs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -565,11 +565,19 @@ private void CorrectImagePath(WorkItem wi, WiItem wiItem, WiRevision rev, ref st
565565
throw new ArgumentException(nameof(rev));
566566
}
567567

568-
foreach (var att in wiItem.Revisions.SelectMany(r => r.Attachments.Where(a => a.Change == ReferenceChangeType.Added)))
569-
{
570-
var fileName = att.FilePath.Split('\\')?.Last() ?? string.Empty;
571-
var encodedFileName = HttpUtility.UrlEncode(fileName);
572-
if (textField.Contains(fileName) || textField.IndexOf(encodedFileName, StringComparison.OrdinalIgnoreCase) >= 0 || textField.Contains("_thumb_" + att.AttOriginId))
568+
var filteredRelations = wiItem.Revisions.SelectMany(r => r.Attachments.Where(a => a.Change == ReferenceChangeType.Added));
569+
570+
foreach (var att in filteredRelations)
571+
{
572+
string fileName = att.FilePath.Split('\\')?.Last() ?? string.Empty;
573+
string encodedFileName = EncodeFileNameUsingJiraStandard(fileName);
574+
string restApiUrlOption = "/rest/api/3/attachment/content/" + att.AttOriginId;
575+
if (
576+
textField.Contains(fileName)
577+
|| textField.IndexOf(encodedFileName, StringComparison.OrdinalIgnoreCase) >= 0
578+
|| textField.Contains("_thumb_" + att.AttOriginId)
579+
|| textField.Contains(restApiUrlOption)
580+
)
573581
{
574582
var tfsAtt = IdentifyAttachment(att, wi, isAttachmentMigratedDelegate);
575583

@@ -596,6 +604,15 @@ private void CorrectImagePath(WorkItem wi, WiItem wiItem, WiRevision rev, ref st
596604
}
597605
}
598606

607+
public string EncodeFileNameUsingJiraStandard(string fileName)
608+
{
609+
string fileNameEncoded = HttpUtility.UrlEncode(fileName);
610+
fileNameEncoded = fileNameEncoded.Replace("(", "%28");
611+
fileNameEncoded = fileNameEncoded.Replace(")", "%29");
612+
return fileNameEncoded;
613+
}
614+
615+
599616
private void CorrectClosedByAndClosedDate(WiRevision rev, WorkItem wi)
600617
{
601618
var wiState = wi.Fields[WiFieldReference.State].ToString() ?? string.Empty;

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -974,5 +974,37 @@ public void When_calling_save_workitem_fields_with_populated_workitem_Then_worki
974974
Assert.That(updatedWI.Fields[WiFieldReference.Priority], Is.EqualTo(createdWI.Fields[WiFieldReference.Priority]));
975975
});
976976
}
977+
978+
[Test]
979+
public void EncodeFileNameUsingJiraStandard_encodes_file_name_with_special_characters()
980+
{
981+
// Arrange
982+
MockedWitClientWrapper witClientWrapper = new MockedWitClientWrapper();
983+
WitClientUtils wiUtils = new WitClientUtils(witClientWrapper);
984+
string fileName = "My File (Special).txt";
985+
string expectedEncodedFileName = "My+File+%28Special%29.txt";
986+
987+
// Act
988+
string encodedFileName = wiUtils.EncodeFileNameUsingJiraStandard(fileName);
989+
990+
// Assert
991+
Assert.AreEqual(expectedEncodedFileName, encodedFileName);
992+
}
993+
994+
[Test]
995+
public void EncodeFileNameUsingJiraStandard_encodes_file_name_with_no_special_characters()
996+
{
997+
// Arrange
998+
MockedWitClientWrapper witClientWrapper = new MockedWitClientWrapper();
999+
WitClientUtils wiUtils = new WitClientUtils(witClientWrapper);
1000+
string fileName = "MyFile.txt";
1001+
string expectedEncodedFileName = "MyFile.txt";
1002+
1003+
// Act
1004+
string encodedFileName = wiUtils.EncodeFileNameUsingJiraStandard(fileName);
1005+
1006+
// Assert
1007+
Assert.AreEqual(expectedEncodedFileName, encodedFileName);
1008+
}
9771009
}
9781010
}

0 commit comments

Comments
 (0)