fix(search): preserve configured ticket links

This commit is contained in:
Meik
2026-07-13 11:55:00 +02:00
parent 997dcee78f
commit b3520f8865
2 changed files with 19 additions and 10 deletions

View File

@@ -53,6 +53,21 @@ public class TicketExternalLinkHelperTest
Assert.Equal("https://m42.example/wm/ticket/preview", ticketLink.TrimEnd('/')); Assert.Equal("https://m42.example/wm/ticket/preview", ticketLink.TrimEnd('/'));
} }
[Fact]
public void TryGetTicketLink_PreservesConfiguredTicketLink()
{
var relation = CreateTicketRelation();
relation.Infos = new Dictionary<string, string>
{
["TicketLink"] = "matrix42-client://ticket/TCK00001"
};
var result = TicketExternalLinkHelper.TryGetTicketLink(relation, null, out var ticketLink);
Assert.True(result);
Assert.Equal("matrix42-client://ticket/TCK00001", ticketLink);
}
[Fact] [Fact]
public void TryGetTicketLink_BuildsPreviewLinkForOverviewRelation() public void TryGetTicketLink_BuildsPreviewLinkForOverviewRelation()
{ {

View File

@@ -65,8 +65,8 @@ namespace FasdDesktopUi.Basics.Helper
if (relation == null || relation.Type != enumF4sdSearchResultClass.Ticket) if (relation == null || relation.Type != enumF4sdSearchResultClass.Ticket)
return false; return false;
if (TryGetHttpLink(relation, "TicketLink", out ticketLink) || if (TryGetConfiguredLink(relation, "TicketLink", out ticketLink) ||
TryGetHttpLink(relation, "DirectLinkPreview", out ticketLink)) TryGetConfiguredLink(relation, "DirectLinkPreview", out ticketLink))
{ {
return true; return true;
} }
@@ -90,19 +90,13 @@ namespace FasdDesktopUi.Basics.Helper
return true; return true;
} }
private static bool TryGetHttpLink(cF4sdApiSearchResultRelation relation, string key, out string ticketLink) private static bool TryGetConfiguredLink(cF4sdApiSearchResultRelation relation, string key, out string ticketLink)
{ {
ticketLink = null; ticketLink = null;
if (relation?.Infos?.TryGetValue(key, out var configuredLink) != true || string.IsNullOrWhiteSpace(configuredLink)) if (relation?.Infos?.TryGetValue(key, out var configuredLink) != true || string.IsNullOrWhiteSpace(configuredLink))
return false; return false;
if (!Uri.TryCreate(configuredLink, UriKind.Absolute, out var linkUri) || ticketLink = configuredLink;
(linkUri.Scheme != Uri.UriSchemeHttp && linkUri.Scheme != Uri.UriSchemeHttps))
{
return false;
}
ticketLink = linkUri.AbsoluteUri;
return true; return true;
} }