예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
 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"));
 }
예제 #5
0
 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()));
 }