public async Task Sends_ticket_to_middleware_with_attachments(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Pending.HandedOff] Ticket ticket,
            Comment[] comments)
        {
            // Given
            zendesk.Tickets.Add(ticket);
            zendesk.AddComments(ticket, comments);

            // When
            await sut.ShareTicket(ticket.Id);

            // Then
            var expected = new
            {
                Ticket = new
                {
                    Comments = comments.Select(c => new
                    {
                        c.Id,
                        Attachments = c.Attachments.Select(a => new
                        {
                            Filename = a.FileName,
                            Url      = a.ContentUrl,
                        }),
                    }),
                }
            };

            await middleware.Received().HandOffTicket(
                Verify.That <Middleware.EventWrapper>(
                    body => body.Should().BeEquivalentTo(expected)));
        }
        public async Task Sends_ticket_to_middleware(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Pending.Escalated] Ticket ticket)
        {
            zendesk.Tickets.Add(ticket);

            await sut.ShareTicket(ticket.Id);

            var expectedTicket = new
            {
                Ticket = new
                {
                    ticket.Id,
                    ticket.Status,
                    ticket.Description,
                    ticket.Subject,
                    ticket.CreatedAt,
                }
            };

            await middleware.Received().EscalateTicket(
                Verify.That <Middleware.EventWrapper>(x =>
                                                      x.Should().BeEquivalentTo(expectedTicket)));
        }
        public async Task Sends_all_comments(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Pending.HandedOff] Ticket ticket,
            Comment[] comments)
        {
            comments[0].Public = false;
            comments[1].Public = true;

            zendesk.Tickets.Add(ticket);
            zendesk.AddComments(ticket, comments);

            await sut.ShareTicket(ticket.Id);

            var expectedTicket = new
            {
                Ticket = new
                {
                    Comments = comments.Select(x =>
                                               new
                    {
                        x.Id,
                        x.Body,
                    }),
                }
            };

            await middleware.Received().HandOffTicket(
                Verify.That <Middleware.EventWrapper>(x =>
                                                      x.Should().BeEquivalentTo(expectedTicket)));
        }
        public async Task Sends_ticket_to_middleware_with_no_comments(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Pending.Solved] Ticket ticket,
            Comment[] comments)
        {
            // Given
            zendesk.Tickets.Add(ticket);
            zendesk.AddComments(ticket, comments);

            // When
            await sut.ShareTicket(ticket.Id);

            // Then
            var mwt = new
            {
                Ticket = new
                {
                    Comments = Array.Empty <Middleware.Model.Comments>(),
                }
            };

            await middleware.Received().SolveTicket(
                Verify.That <Middleware.EventWrapper>(
                    body => body.Should().BeEquivalentTo(mwt)));
        }
        public async Task Ignores_tickets_without_sharing_tags(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            Ticket ticket)
        {
            ticket.Tags.Clear();
            zendesk.Tickets.Add(ticket);

            await sut.ShareTicket(ticket.Id);

            await middleware.DidNotReceive().SolveTicket(Arg.Any <Middleware.EventWrapper>());
        }
示例#6
0
        public MockMiddleware()
        {
            server = FluentMockServer.Start(new FluentMockServerSettings
            {
                StartAdminInterface = true,
            });

            server
            .Given(Request.Create().WithPath("/event").UsingAnyMethod())
            .RespondWith(Response.Create().WithSuccess());

            client = RestClient.For <Middleware.IApi>(server.Urls[0]);

            admin = RestClient.For <IFluentMockServerAdmin>(server.Urls[0]);
        }
        public async Task Sends_nothing_to_middleware_when_there_are_no_tagged_comments(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Frozen] AuditedComment comment,
            [Pending.Escalated] Ticket ticket
            )
        {
            // Given
            comment.AuditTagEvent.Value = "";
            zendesk.Tickets.Add(ticket);

            // When
            await sut.ShareTicket(ticket.Id);

            // Then
            await middleware.DidNotReceive().EscalateTicket(Arg.Any <Middleware.EventWrapper>());
        }
        public void Marks_ticket_as_sharing_before_sending_to_middleware(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Pending.Escalated] Ticket ticket)
        {
            zendesk.Tickets.Add(ticket);

            middleware.When(x => x.EscalateTicket(Arg.Any <Middleware.EventWrapper>()))
            .Do(_ => throw new Exception("Stop test at Middleware step"));

            sut.Invoking(s => s.ShareTicket(ticket.Id))
            .Should().Throw <Exception>().WithMessage("Stop test at Middleware step");

            zendesk.Tickets.First(x => x.Id == ticket.Id)
            .Tags
            .Should().NotContain($"pending_middleware_escalated".ToLower())
            .And.Contain($"sending_middleware_escalated".ToLower());
        }
        public async Task Sends_ticket_to_middleware_with_tagged_comment(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Frozen] AuditedComment comment,
            [Pending.Escalated] Ticket ticket)
        {
            // Given
            var auditTagEvent = comment.AuditTagEvent.Value = "escalated_tag";

            zendesk.Tickets.Add(ticket);

            // When
            await sut.ShareTicket(ticket.Id);

            // Then
            var mwt = new { Ticket = new { Comments = new[] { new { comment.Id } } } };

            await middleware.Received().EscalateTicket(
                Verify.That <Middleware.EventWrapper>(x => x.Should().BeEquivalentTo(mwt)));
        }
        public async Task Sends_ticket_to_middleware_with_organisation(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Pending.Escalated] Ticket ticket,
            Organization org)
        {
            ticket.OrganizationId = org.Id;
            zendesk.Tickets.Add(ticket);
            zendesk.Organizations.Add(org);

            await sut.ShareTicket(ticket.Id);

            var mwt = new
            {
                Ticket = new
                {
                    Organization = new
                    {
                        org.Id,
                        org.Name,
                        OrganizationFields = new
                        {
                            org.OrganizationFields.MainPhone,
                            org.OrganizationFields.AddressLine1,
                            org.OrganizationFields.AddressLine2,
                            org.OrganizationFields.AddressLine3,
                            org.OrganizationFields.City,
                            org.OrganizationFields.County,
                            org.OrganizationFields.Postcode,
                            org.OrganizationFields.OrganisationStatus,
                            org.OrganizationFields.OrganisationType,
                        }
                    }
                }
            };

            await middleware.Received().EscalateTicket(Verify.That <Middleware.EventWrapper>(x => x.Should().BeEquivalentTo(mwt)));
        }
        public async Task Sends_ticket_to_middleware_with_requester(
            [Frozen] FakeZendeskApi zendesk,
            [Frozen] Middleware.IApi middleware,
            Watcher sut,
            [Pending.Escalated] Ticket ticket,
            User reporter)
        {
            ticket.RequesterId = reporter.Id;
            zendesk.Tickets.Add(ticket);
            zendesk.Users.Add(reporter);

            await sut.ShareTicket(ticket.Id);

            var mwt = new
            {
                Ticket = new
                {
                    Requester = new
                    {
                        reporter.Id,
                        reporter.Name,
                        reporter.Email,
                        reporter.Phone,
                        UserFields = new
                        {
                            reporter.UserFields.AddressLine1,
                            reporter.UserFields.AddressLine2,
                            reporter.UserFields.AddressLine3,
                            reporter.UserFields.City,
                            reporter.UserFields.County,
                            reporter.UserFields.Postcode,
                        }
                    }
                }
            };

            await middleware.Received().EscalateTicket(Verify.That <Middleware.EventWrapper>(x => x.Should().BeEquivalentTo(mwt)));
        }
 public Watcher(ISharingTickets zendesk, Middleware.IApi middleware, ILogger <Watcher> logger)
 {
     this.zendesk    = zendesk ?? throw new ArgumentNullException(nameof(zendesk));
     this.middleware = middleware ?? throw new ArgumentNullException(nameof(middleware));
     this.logger     = logger;
 }
 public Watcher(ISharingTickets zendesk, Middleware.IApi middleware)
     : this(zendesk, middleware, NullLogger <Watcher> .Instance)
 {
 }