Beispiel #1
0
        private async Task BacklogItems_Can_Be_Queried_By_Mentioned_Users(string message, string[] mentionedUsers)
        {
            // GIVEN 3 users
            var refUsers = await CreateTestUsers();

            // and 2 tickets
            var ticketRef = await CreateSampleBug();

            await CreateSampleBug();

            // WHEN adding a new comment
            var dto = new CommentAddUpdRequest {
                Message = message
            };
            await _commentCommandService.Create(ticketRef.Id !, dto);

            await SaveChanges();

            // THEN
            // the ticket can be queried by the mentioned users
            foreach (var referencedUser in mentionedUsers)
            {
                var user = refUsers.Single(u => u.FullName == referencedUser);
                _currentUser = user;

                var tickets = await _queryBacklogItemService.GetList(new BacklogItemListGetRequest { MentionsOfTheCurrentUserOnly = true });

                Assert.Equal(1, tickets.TotalRecords);
            }
        }
Beispiel #2
0
        private async Task Updated_Comment_Message_Gets_Persisted()
        {
            // GIVEN a 'bug' with a comment
            var ticketRef = await CreateSampleBug();

            var commentRef = (await _commentCommandService.Create(ticketRef.Id !, new CommentAddUpdRequest {
                Message = "Test"
            })).Value;

            await SaveChanges();

            // WHEN changing the message of the comment
            var dto = new CommentAddUpdRequest
            {
                Message = "Test (Updated)"
            };
            var commentUpdatedRef = await _commentCommandService.Update(ticketRef.Id !, commentRef.CommentId !, dto);

            await SaveChanges();

            // THEN
            // the operation is successful
            Assert.True(commentUpdatedRef.IsSuccess);
            Assert.Equal(commentRef.CommentId, commentUpdatedRef.Value.CommentId);

            // the comment has the right message
            var ticket = (await _queryService.GetById(ticketRef.Id !)).Value;

            Assert.NotNull(ticket);
            var comment = ticket !.Comments !.Entries.Single();

            Assert.Equal("Test (Updated)", comment.Message);
        }
Beispiel #3
0
        private CommentAddUpdRequest ConvertToComment(CommentResponse comment, IList <UserReference> userReferences)
        {
            var matches    = _mentionRegex.Matches(comment.Body);
            var references = matches.Distinct().Select(m => m.Value).ToArray();

            // Replace referred users to random users
            var body = comment.Body;

            foreach (var reference in references)
            {
                body = body.Replace(reference, userReferences.OrderBy(x => Guid.NewGuid()).First().MentionedName);
            }

            var dto = new CommentAddUpdRequest {
                Message = body
            };

            return(dto);
        }
Beispiel #4
0
 public Task <ActionResult <BacklogItemCommentReference> > Update([FromServices] IBacklogItemCommentCommandService service,
                                                                  [FromRoute] string backlogItemId,
                                                                  [FromRoute] string commentId,
                                                                  CommentAddUpdRequest dto)
 => service.Update(backlogItemId, commentId, dto).ToActionResultOfT();
Beispiel #5
0
        public async Task <IDomainResult <BacklogItemCommentReference> > Update(string backlogItemId, string commentId, CommentAddUpdRequest dto)
        {
            var ticketRes = await GetEntity(backlogItemId);

            if (!ticketRes.IsSuccess)
            {
                return(ticketRes.To <BacklogItemCommentReference>());
            }
            var ticket = ticketRes.Value;

            var comment = ticket.Comments.SingleOrDefault(c => c.Id == commentId);

            if (comment == null)
            {
                return(DomainResult.NotFound <BacklogItemCommentReference>("Comment not found"));
            }

            var currentUser = await _userResolver.GetCurrentUserReference();

            if (comment.Author.Id != currentUser.Id.GetShortId())
            {
                return(DomainResult.Failed <BacklogItemCommentReference>("Cannot edit comments of other users"));
            }

            var mentionedUsers = await _mentionedUserResolver.GetMentionedUsers(dto.Message);

            comment.Message          = dto.Message;
            comment.MentionedUserIds = mentionedUsers.Any() ? mentionedUsers : null;
            comment.LastModified     = DateTime.UtcNow;

            ticket.AddHistoryRecord(currentUser, "Updated a comment");

            return(DomainResult.Success(ToLastCommentReference(ticket)));
        }
Beispiel #6
0
        public async Task <IDomainResult <BacklogItemCommentReference> > Create(string backlogItemId, CommentAddUpdRequest dto)
        {
            var ticketRes = await GetEntity(backlogItemId);

            if (!ticketRes.IsSuccess)
            {
                return(ticketRes.To <BacklogItemCommentReference>());
            }
            var ticket = ticketRes.Value;

            var mentionedUsers = await _mentionedUserResolver.GetMentionedUsers(dto.Message);

            var currentUser = await _userResolver.GetCurrentUserReference();

            var comment = new Comment
            {
                Author           = currentUser,
                Message          = dto.Message,
                MentionedUserIds = mentionedUsers.Any() ? mentionedUsers : null,
            };

            ticket.Comments.Add(comment);

            ticket.AddHistoryRecord(currentUser, "Added a comment");

            return(DomainResult.Success(ToLastCommentReference(ticket)));
        }