Exemplo n.º 1
0
        protected virtual async Task OnIssueCreated(IssueCreatedEventArgs args, CancellationToken token)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            if (string.IsNullOrWhiteSpace(args.ReferenceId))
            {
                throw new ArgumentException("ReferenceId cannot be empty");
            }

            using (LogContext.PushProperty("IssueId", args.ReferenceId))
            {
                int?userId;
                try
                {
                    userId = string.IsNullOrWhiteSpace(args.RequestorEmail)
                    ? null : await GetOrCreateUserIdAsync(args.RequestorEmail, args.RequestorGivenName, args.RequestorSurnName, args.RequestorTelephone);
                }
                catch (Exception err)
                {
                    userId = null;
                    _logger.Warning(err, "Error retrieving user details for {EmailAddress}", args.RequestorEmail);
                }

                int ownerPersonId = userId.GetValueOrDefault();

                Issue oldIssue = null;
                oldIssue = await GetIssueByIncidentId(args.ReferenceId);

                if (oldIssue != null)
                {
                    _logger.Information("Found Issue {IssueId} in database, old status {IssueStatus}, new status {newIssueStatus}", args.ReferenceId, oldIssue.RemedyStatus, args.RemedyStatus);
                    await _issueRepository.DeleteIssueAsync(oldIssue, token);
                }

                try
                {
                    var issue = Issue.Create(args.Title, args.Description, args.ReferenceId, args.RemedyStatus, args.RequestorDisplayName, args.AssigneeEmail, args.AssigneeGroup, args.CreatedDate, args.Urgency, ownerPersonId);
                    _logger.Information("Saving Issue {IssueId} to database", args.ReferenceId);
                    await _issueRepository.AddIssueAsync(issue, token);
                }
                catch (Exception err)
                {
                    _logger.Error(err, "Unable to set work item id to Issue. Will retry later. Error was: {ErrorMessage}",
                                  err.Message);
                    throw;
                }
            }
        }
        public void CanSendCreateIssueMessage()
        {
            var messenger = serviceProvider.GetRequiredService <IIssueMessageSender>();
            IssueCreatedEventArgs issueEvent = new IssueCreatedEventArgs()
            {
                Title         = "A test issue",
                Description   = "This is an issue created when running integration tests.",
                AssigneeEmail = "*****@*****.**",
                RemedyStatus  = "Created",
                ReferenceId   = "INC000123"
            };

            //Func<Task> asyncFunction = async () =>
            //{
            //    await messenger.SendIssueCreatedAsync(issueEvent);
            //};
            //asyncFunction.Should().NotThrow<Exception>();
        }