public async Task <int> Update(ChildUpdateDto updateDto)
        {
            string rootId      = updateDto.Ids.First();
            string childId     = updateDto.Ids.Last();
            var    rootComment = await _bookRootCommentService.GetById(rootId);

            if (rootComment == null)
            {
                return(0);
            }

            var childComment = await FindChild(rootComment.Comments, childId);

            if (childComment == null)
            {
                return(0);
            }

            var children = childComment.Comments.Select(c => _mapper.Map <ChildDto, BookChildComment>(c)).ToList();

            List <(string nestedArrayName, string itemId)> path = updateDto.Ids.Skip(1).Select(x => ("Comments", x)).ToList();

            var updateResult = await _childCommentRepository.SetAsync(
                rootId,
                new BookChildComment()
            {
                Text = updateDto.Text, Comments = children
            },
                path);

            return(Convert.ToInt32(updateResult.MatchedCount));
        }
        public void ChildDeleteValidator_ModelInvalid_ThrowsException()
        {
            var invalidDto = new ChildUpdateDto();
            var result     = _validator.TestValidate(invalidDto);

            result.ShouldHaveAnyValidationError();
        }
示例#3
0
        public async Task <ActionResult <int> > Put([FromBody] ChildUpdateDto updateDto)
        {
            if (updateDto.OwnerId != _userResolverService.GetUserId())
            {
                return(Forbid());
            }
            int number = await _childBookCommentService.Update(updateDto);

            if (number == 0)
            {
                return(NotFound(number));
            }
            return(Ok(number));
        }
        public void ChildDeleteValidator_ModelValid_DontThrowsException()
        {
            var validDto = new ChildUpdateDto()
            {
                Ids = new List <string>()
                {
                    "5e9c9ee859231a63bc853bf0", "5e9c9ee859231a63bc853bf1"
                },
                OwnerId = 1,
                Text    = "Text"
            };
            var result = _validator.TestValidate(validDto);

            result.ShouldNotHaveAnyValidationErrors();
        }
示例#5
0
        public async Task PutCommentByUser_Unauthorised_ReturnsForbidResult()
        {
            ChildUpdateDto updateDto = new ChildUpdateDto()
            {
                Ids = new List <string>()
                {
                    "5e9c9ee859231a63bc853bf0", "5e9c9ee859231a63bc853bf1"
                },
                OwnerId = 1,
                Text    = "Text"
            };

            _mockChildBookCommentService.Setup(s => s.Update(updateDto)).ReturnsAsync(1);
            _mockUserResolverService.Setup(s => s.GetUserId()).Returns(2);

            var putResult = await _bookChildCommentsController.Put(updateDto);

            var forbidResult = putResult.Result as ForbidResult;

            forbidResult.Should().BeOfType <ForbidResult>();
        }
        public async Task UpdateComment_BookChildCommentExistsAndNot_ReturnsNumberOfUpdatedComments(int updateValue, string commentId, int expectedResult)
        {
            ChildUpdateDto updateDto = new ChildUpdateDto()
            {
                Ids = new List <string>()
                {
                    "5e9c9ee859231a63bc853bf0", "5e9c9ee859231a63bc853bf1"
                },
            };
            List <(string, string)> path = new List <(string, string)>()
            {
                ("Comments", "5e9c9ee859231a63bc853bf1")
            };

            _rootRepository.Setup(m => m.GetById(It.IsAny <string>()))
            .ReturnsAsync(new RootDto()
            {
                Comments = new List <ChildDto>()
                {
                    new ChildDto()
                    {
                        Id = "5e9c9ee859231a63bc853bf1", Comments = new List <ChildDto>()
                    },
                }
            });


            _childRepository
            .Setup(s => s.SetAsync(
                       "5e9c9ee859231a63bc853bf0",
                       It.IsAny <BookChildComment>(),
                       path))
            .ReturnsAsync(new UpdateResult.Acknowledged(updateValue, updateValue, commentId));

            var result = await _bookChildCommentService.Update(updateDto);

            result.Should().Be(expectedResult);
        }
示例#7
0
        public async Task PutCommentByUser_NotExists_ReturnsNotFoundObjectResult()
        {
            ChildUpdateDto updateDto = new ChildUpdateDto()
            {
                Ids = new List <string>()
                {
                    "5e9c9ee859231a63bc853bf0", "5e9c9ee859231a63bc853bf1"
                },
                OwnerId = 1,
                Text    = "Text"
            };

            _mockChildBookCommentService.Setup(s => s.Update(updateDto)).ReturnsAsync(0);
            _mockUserResolverService.Setup(s => s.GetUserId()).Returns(1);

            var putResult = await _bookChildCommentsController.Put(updateDto);

            var notFoundObjectResult = putResult.Result as NotFoundObjectResult;

            notFoundObjectResult.Should().BeOfType <NotFoundObjectResult>();
            int updatedNumber = Convert.ToInt32(notFoundObjectResult.Value);

            updatedNumber.Should().Be(0);
        }