Files
C4IT-F4SD-Client/F4SD.Cockpit.Client.Test/Basics/Helper/TicketExternalLinkHelperTest.cs

122 lines
3.8 KiB
C#

using C4IT.FASD.Base;
using FasdDesktopUi.Basics.Helper;
namespace F4SD.Cockpit.Client.Test.Basics.Helper;
public class TicketExternalLinkHelperTest
{
[Fact]
public void HasValidUserIdentity_NullIdentities_ReturnsFalse()
{
var relation = CreateTicketRelation();
Assert.False(TicketExternalLinkHelper.HasValidUserIdentity(relation));
}
[Fact]
public void HasValidUserIdentity_EmptyUserId_ReturnsFalse()
{
var relation = CreateTicketRelation();
relation.Identities =
[
new cF4sdIdentityEntry { Class = enumFasdInformationClass.Ticket, Id = relation.id },
new cF4sdIdentityEntry { Class = enumFasdInformationClass.User, Id = Guid.Empty }
];
Assert.False(TicketExternalLinkHelper.HasValidUserIdentity(relation));
}
[Fact]
public void HasValidUserIdentity_ValidUserId_ReturnsTrue()
{
var relation = CreateTicketRelation();
relation.Identities =
[
new cF4sdIdentityEntry { Class = enumFasdInformationClass.User, Id = Guid.NewGuid() }
];
Assert.True(TicketExternalLinkHelper.HasValidUserIdentity(relation));
}
[Fact]
public void TryGetTicketLink_UsesProvidedPreviewLink()
{
var relation = CreateTicketRelation();
relation.Infos = new Dictionary<string, string>
{
["DirectLinkPreview"] = "https://m42.example/wm/ticket/preview"
};
var result = TicketExternalLinkHelper.TryGetTicketLink(relation, null, out var ticketLink);
Assert.True(result);
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]
public void TryGetTicketLink_BuildsPreviewLinkForOverviewRelation()
{
var relation = CreateTicketRelation();
relation.Infos = new Dictionary<string, string>
{
["ActivityType"] = "SPSActivityTypeIncident"
};
var result = TicketExternalLinkHelper.TryGetTicketLink(relation, "m42.example", out var ticketLink);
Assert.True(result);
Assert.Equal(
$"https://m42.example/wm/app-ServiceDesk/notSet/preview-object/SPSActivityTypeIncident/{relation.id:D}/0/",
ticketLink);
}
[Fact]
public void TryGetTicketLink_UsesDefaultTicketActivityType()
{
var relation = CreateTicketRelation();
var result = TicketExternalLinkHelper.TryGetTicketLink(relation, "https://m42.example/", out var ticketLink);
Assert.True(result);
Assert.Contains("/SPSActivityTypeTicket/", ticketLink);
}
[Fact]
public void TryGetTicketLink_MissingTicketId_ReturnsFalse()
{
var relation = CreateTicketRelation();
relation.id = Guid.Empty;
var result = TicketExternalLinkHelper.TryGetTicketLink(relation, "https://m42.example", out var ticketLink);
Assert.False(result);
Assert.Null(ticketLink);
}
private static cF4sdApiSearchResultRelation CreateTicketRelation()
{
return new cF4sdApiSearchResultRelation
{
Type = enumF4sdSearchResultClass.Ticket,
Name = "TCK00001",
DisplayName = "TCK00001",
id = Guid.NewGuid()
};
}
}