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 { ["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 { ["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 { ["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() }; } }