public void PostsUpdateWhenTrackedZendeskTicketChanges() { var zendeskApi = new Mock <IZendeskTicketApi>(); var ticket1 = new ZendeskTicket("12345", "description", "open", new ZendeskTicket.Comment[3]); var ticket2 = new ZendeskTicket("12345", "description", "open", new ZendeskTicket.Comment[5]); var persistence = new InMemoryKeyValueStore(); zendeskApi.Setup(x => x.FromId("12345")).ReturnsAsync(ticket1); var commandParser = CommandParser.For("track ZD#12345"); var zendeskTracker = new ZendeskTicketTracker(commandParser, persistence, zendeskApi.Object); zendeskTracker.ProcessMessage(new Message("a-channel", "a-user", "scbot track ZD#12345")); CollectionAssert.IsEmpty(zendeskTracker.ProcessTimerTick().Responses); zendeskApi.Setup(x => x.FromId("12345")).ReturnsAsync(ticket2); var ping = zendeskTracker.ProcessTimerTick().Responses.Single(); Assert.AreEqual("a-channel", ping.Channel); Assert.AreEqual("<https://redgatesupport.zendesk.com/agent/tickets/12345|ZD#12345> (description) updated: 2 comments added", ping.Message); // subsequent ticks should use updated values CollectionAssert.IsEmpty(zendeskTracker.ProcessTimerTick().Responses); }
public void DoesntMentionTheSameTicketTwice() { var api = new Mock <IZendeskTicketApi>(MockBehavior.Strict); var ticket = new ZendeskTicket("34182", "SQL Packager 8 crash", "Closed", new ZendeskTicket.Comment[45]); api.Setup(x => x.FromId("34182")).ReturnsAsync(ticket); var processor = new ZendeskTicketProcessor(api.Object); var result = processor.ProcessMessage(new Message("a-channel", "a-user", string.Format("what is {0} and {0}", "ZD#34182"))); var response = result.Responses.Single(); Assert.AreEqual("<https://redgatesupport.zendesk.com/agent/tickets/34182|ZD#34182> | SQL Packager 8 crash | Closed | 45 comments", response.Message); }
public void CanTrackTicketFromUrl() { var zendeskApi = new Mock <IZendeskTicketApi>(MockBehavior.Strict); var ticket1 = new ZendeskTicket("12345", "description", "open", new ZendeskTicket.Comment[3]); var ticket2 = new ZendeskTicket("12345", "description", "open", new ZendeskTicket.Comment[5]); var persistence = new InMemoryKeyValueStore(); zendeskApi.Setup(x => x.FromId("12345")).ReturnsAsync(ticket1); var commandParser = CommandParser.For("track <https://redgatesupport.zendesk.com/agent/tickets/12345>"); var zendeskTracker = new ZendeskTicketTracker(commandParser, persistence, zendeskApi.Object); var result = zendeskTracker.ProcessMessage(new Message("a-channel", "a-user", @"scbot track <https://redgatesupport.zendesk.com/agent/tickets/12345>")); Assert.AreEqual("Now tracking ZD#12345. To stop tracking, use `untrack ZD#12345`", result.Responses.Single().Message); }
private static string FormatTicket(ZendeskTicket x) { return(string.Format("<{0}|ZD#{1}> | {2} | {3} | {4} {5}", "https://redgatesupport.zendesk.com/agent/tickets/" + x.Id, x.Id, x.Description, x.Status, x.Comments.Count, x.Comments.Count == 1 ? "comment" : "comments")); }
private ZendeskTicket StripCommentText(ZendeskTicket newValue) { return(new ZendeskTicket(newValue.Id, newValue.Description, newValue.Status, newValue.Comments.Select(x => new ZendeskTicket.Comment("<text>", x.Author, x.Avatar)).ToList())); }