Skip to content

Commit

Permalink
Merge pull request #785 from solidify/bugfix/attachment-urls-in-comme…
Browse files Browse the repository at this point in the history
…nts-formatting-fix

Fix incorrect formatting for jira image URLs in comments
  • Loading branch information
Alexander-Hjelm authored Jun 8, 2023
2 parents 44c9bb8 + 0b180c1 commit 0776424
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 5 deletions.
27 changes: 22 additions & 5 deletions src/WorkItemMigrator/WorkItemImport/WitClient/WitClientUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -565,11 +565,19 @@ private void CorrectImagePath(WorkItem wi, WiItem wiItem, WiRevision rev, ref st
throw new ArgumentException(nameof(rev));
}

foreach (var att in wiItem.Revisions.SelectMany(r => r.Attachments.Where(a => a.Change == ReferenceChangeType.Added)))
{
var fileName = att.FilePath.Split('\\')?.Last() ?? string.Empty;
var encodedFileName = HttpUtility.UrlEncode(fileName);
if (textField.Contains(fileName) || textField.IndexOf(encodedFileName, StringComparison.OrdinalIgnoreCase) >= 0 || textField.Contains("_thumb_" + att.AttOriginId))
var filteredRelations = wiItem.Revisions.SelectMany(r => r.Attachments.Where(a => a.Change == ReferenceChangeType.Added));

foreach (var att in filteredRelations)
{
string fileName = att.FilePath.Split('\\')?.Last() ?? string.Empty;
string encodedFileName = EncodeFileNameUsingJiraStandard(fileName);
string restApiUrlOption = "/rest/api/3/attachment/content/" + att.AttOriginId;
if (
textField.Contains(fileName)
|| textField.IndexOf(encodedFileName, StringComparison.OrdinalIgnoreCase) >= 0
|| textField.Contains("_thumb_" + att.AttOriginId)
|| textField.Contains(restApiUrlOption)
)
{
var tfsAtt = IdentifyAttachment(att, wi, isAttachmentMigratedDelegate);

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

public string EncodeFileNameUsingJiraStandard(string fileName)
{
string fileNameEncoded = HttpUtility.UrlEncode(fileName);
fileNameEncoded = fileNameEncoded.Replace("(", "%28");
fileNameEncoded = fileNameEncoded.Replace(")", "%29");
return fileNameEncoded;
}


private void CorrectClosedByAndClosedDate(WiRevision rev, WorkItem wi)
{
var wiState = wi.Fields[WiFieldReference.State].ToString() ?? string.Empty;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -974,5 +974,37 @@ public void When_calling_save_workitem_fields_with_populated_workitem_Then_worki
Assert.That(updatedWI.Fields[WiFieldReference.Priority], Is.EqualTo(createdWI.Fields[WiFieldReference.Priority]));
});
}

[Test]
public void EncodeFileNameUsingJiraStandard_encodes_file_name_with_special_characters()
{
// Arrange
MockedWitClientWrapper witClientWrapper = new MockedWitClientWrapper();
WitClientUtils wiUtils = new WitClientUtils(witClientWrapper);
string fileName = "My File (Special).txt";
string expectedEncodedFileName = "My+File+%28Special%29.txt";

// Act
string encodedFileName = wiUtils.EncodeFileNameUsingJiraStandard(fileName);

// Assert
Assert.AreEqual(expectedEncodedFileName, encodedFileName);
}

[Test]
public void EncodeFileNameUsingJiraStandard_encodes_file_name_with_no_special_characters()
{
// Arrange
MockedWitClientWrapper witClientWrapper = new MockedWitClientWrapper();
WitClientUtils wiUtils = new WitClientUtils(witClientWrapper);
string fileName = "MyFile.txt";
string expectedEncodedFileName = "MyFile.txt";

// Act
string encodedFileName = wiUtils.EncodeFileNameUsingJiraStandard(fileName);

// Assert
Assert.AreEqual(expectedEncodedFileName, encodedFileName);
}
}
}

0 comments on commit 0776424

Please sign in to comment.