using PnvPanel.Domain.Exceptions; using PnvPanel.Domain.Support; using Xunit; namespace PnvPanel.Domain.Tests.Support; public class SupportTicketTests { [Fact] public void CreateBugReport_SetsOpenStatus() { var userId = Guid.NewGuid(); var ticket = SupportTicket.CreateBugReport(userId); Assert.Equal(userId, ticket.UserId); Assert.Equal(TicketType.BugReport, ticket.Type); Assert.Equal(TicketStatus.Open, ticket.Status); Assert.Null(ticket.RequestedDays); } [Fact] public void CreateExtensionRequest_SetsRequestedDays() { var userId = Guid.NewGuid(); var ticket = SupportTicket.CreateExtensionRequest(userId, 14); Assert.Equal(userId, ticket.UserId); Assert.Equal(TicketType.ExtensionRequest, ticket.Type); Assert.Equal(TicketStatus.Open, ticket.Status); Assert.Equal(14, ticket.RequestedDays); } [Fact] public void Resolve_WhenOpen_SetsResolved() { var ticket = SupportTicket.CreateBugReport(Guid.NewGuid()); ticket.Resolve(); Assert.Equal(TicketStatus.Resolved, ticket.Status); } [Fact] public void Resolve_WhenNotOpen_Throws() { var ticket = SupportTicket.CreateBugReport(Guid.NewGuid()); ticket.Resolve(); Assert.Throws(() => ticket.Resolve()); } [Fact] public void Close_WhenOpen_SetsClosed() { var ticket = SupportTicket.CreateBugReport(Guid.NewGuid()); ticket.Close(); Assert.Equal(TicketStatus.Closed, ticket.Status); } [Fact] public void Close_WhenResolved_SetsClosed() { var ticket = SupportTicket.CreateBugReport(Guid.NewGuid()); ticket.Resolve(); ticket.Close(); Assert.Equal(TicketStatus.Closed, ticket.Status); } [Fact] public void Close_WhenAlreadyClosed_Throws() { var ticket = SupportTicket.CreateBugReport(Guid.NewGuid()); ticket.Close(); Assert.Throws(() => ticket.Close()); } [Fact] public void Reopen_WhenResolved_SetsOpen() { var ticket = SupportTicket.CreateBugReport(Guid.NewGuid()); ticket.Resolve(); ticket.Reopen(); Assert.Equal(TicketStatus.Open, ticket.Status); } [Fact] public void Reopen_WhenOpen_Throws() { var ticket = SupportTicket.CreateBugReport(Guid.NewGuid()); Assert.Throws(() => ticket.Reopen()); } [Fact] public void Reopen_WhenClosed_Throws() { var ticket = SupportTicket.CreateBugReport(Guid.NewGuid()); ticket.Close(); Assert.Throws(() => ticket.Reopen()); } }