public async Task GivenValidUpdateRequest_WhenTheArticleDoesNotExist_ReturnsErrorViewModelWithNotFound()
        {
            // Arrange
            var updateArticleCommand = new UpdateArticleCommand
            {
                Slug    = "this-is-not-an-article",
                Article = new UpdateArticleDto
                {
                    Body  = "This is the new body!",
                    Title = "My new title!"
                }
            };
            var requestContent = await ContentHelper.GetRequestContentWithAuthorization(updateArticleCommand, Client, IntegrationTestConstants.SecondaryUser);

            // Act
            var response = await Client.PutAsync($"{ArticlesEndpoint}/{updateArticleCommand.Slug}", requestContent);

            var responseContent = await ContentHelper.GetResponseContent <ErrorViewModel>(response);

            // Assert
            response.StatusCode.ShouldBe(HttpStatusCode.NotFound);
            responseContent.Errors.ShouldNotBeNull();
        }
Ejemplo n.º 2
0
        public void AddOrUpdate(ArticleModel model)
        {
            Article article = new Article(
                model.Id
                , model.Author
                , model.Title
                , model.TextSection
                , model.Content
                , Enum.Parse <ArticleType>(model.ArticleType)
                , Convert.ToBoolean(model.IsDraft)
                , model.IsSendEmail);

            if (article.Id > 0)
            {
                UpdateArticleCommand updateArticleCommand = new UpdateArticleCommand(article);
                _eventBus.Publish(updateArticleCommand);
            }
            else
            {
                CreateArticleCommand createArticleCommand = new CreateArticleCommand(article);
                _eventBus.Publish(createArticleCommand);
            }
        }
        public async Task GivenValidRequest_WhenTheUserOwnsTheArticle_ReturnsUpdatedArticleResponse()
        {
            // Arrange, retrieve the original article information
            var stubArticleDto = new UpdateArticleDto
            {
                Body        = "This isn't my article!",
                Description = "Or is it?",
                Title       = "I'm a hacker trying to hack hacky articles about hacking."
            };

            var updateArticleCommand = new UpdateArticleCommand
            {
                Slug    = "why-beer-is-gods-gift-to-the-world",
                Article = stubArticleDto
            };

            // Act
            var request = new UpdateArticleCommandHandler(_logger, Context, CurrentUserContext, Mapper, MachineDateTime);
            var result  = await request.Handle(updateArticleCommand, CancellationToken.None);

            // Assert
            result.ShouldNotBeNull();
            result.ShouldBeOfType <ArticleViewModel>();
            result.Article.Body.ShouldBe(stubArticleDto.Body);
            result.Article.Description.ShouldBe(stubArticleDto.Description);
            result.Article.Title.ShouldBe(stubArticleDto.Title);
            result.Article.TagList.ShouldContain("beer");

            // Validate the article in the DB context
            var updatedArticle = Context.Articles.FirstOrDefault(a =>
                                                                 string.Equals(a.Slug, stubArticleDto.Title.ToSlug(), StringComparison.OrdinalIgnoreCase));

            updatedArticle.ShouldNotBeNull();
            updatedArticle.Body.ShouldBe(stubArticleDto.Body);
            updatedArticle.Description.ShouldBe(stubArticleDto.Description);
            updatedArticle.Title.ShouldBe(stubArticleDto.Title);
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> UpdateArticle([FromBody] UpdateArticleCommand command)
        {
            try
            {
                var response = await _mediator.Send(command);

                if (response != null)
                {
                    if (response.IsSuccessful)
                    {
                        return(Ok());
                    }
                    else
                    {
                        return(BadRequest(response.FailureReason));
                    }
                }
            }
            catch (Exception ex)
            {
                //  _logger.LogError();
            }
            return(BadRequest());
        }
        public async Task TestHandle_UserIsNotAuthor_ShouldThrowBadRequestException(string slug)
        {
            // Arrange
            var article = new Article(slug, null, null, new DateTime(),
                                      new UserProfile(string.Empty, string.Empty, string.Empty));

            Context.Articles.Add(article);
            await Context.SaveChangesAsync();

            var currentUserMock = new Mock <ICurrentUserService>();

            var command = new UpdateArticleCommand
            {
                Slug = slug
            };

            var sut = new UpdateArticleCommand.Handler(Context, currentUserMock.Object);

            // Act
            var act = new Func <Task <Unit> >(async() => await sut.Handle(command, CancellationToken.None));

            // Assert
            act.Should().Throw <BadRequestException>();
        }
        public async Task Update_InvalidObject_ReturnsFalse()
        {
            //Arrange
            var articleForUpdate = new ArticleForUpdateDto()
            {
                Id                = 999,
                Name1             = "1st article Updated",
                SupplierId        = "sup id",
                SupplierReference = "sup ref",
                PurchasePrice     = 99.99M
            };
            var updateArticleCommand = new UpdateArticleCommand(_unitOfWorkMock.Object, _writeMapper);

            _articleRepositoryMock.Setup(r => r.GetArticleByIdAsync(articleForUpdate.Id)).Returns(Task.FromResult(_testArticles.First()));
            _unitOfWorkMock.Setup(uow => uow.Commit()).Returns(Task.FromResult(false));

            //Act
            var result = await updateArticleCommand.Execute(articleForUpdate);

            //Assert
            _articleRepositoryMock.Verify(r => r.GetArticleByIdAsync(It.IsAny <int>()), Times.Once);
            _articleRepositoryMock.Verify(r => r.Update(It.IsAny <Article>()), Times.Once);
            Assert.That(result, Is.EqualTo(false));
        }
Ejemplo n.º 7
0
        public void Update(UpdateArticleCommand command)
        {
            command.Validate();

            if (AddNotifications(command))
            {
                return;
            }

            ArticleCategory    category = _categoryRepository.GetById(command.CategoryId);
            Article            article  = _articleRepository.GetById(command.ArticleId);
            LedgerIdentityUser user     = _identityResolver.GetUser();

            if (NotifyNullCategory(category) || NotifyNullArticle(article))
            {
                return;
            }

            article = new Article(command.ArticleId, command.Slug, command.Title, command.Body, command.CategoryId, user.Id);

            _articleRepository.Update(article);

            Commit();
        }
Ejemplo n.º 8
0
        public void TestUpdateArticleCommand_ArticleNotFound()
        {
            var mediator = new Mock <IMediator>();

            var articleRepo = new Mock <IArticleRepo>();

            articleRepo.Setup(x => x.GetById(It.IsAny <Guid>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult((Article)null));

            var author = new Author()
            {
                Id = Guid.NewGuid(), FirstName = "Firstname", LastName = "Lastname"
            };
            var authorRepo = new Mock <IAuthorRepo>();

            authorRepo.Setup(x => x.GetById(It.IsAny <Guid>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(author));

            var updateCommand = new UpdateArticleCommand()
            {
                Id = Guid.NewGuid(), AuthorId = author.Id, Heading = "heading", Text = "Text", Year = 2020
            };
            var handler = new UpdateArticleCommand.Handler(articleRepo.Object, authorRepo.Object, mediator.Object);

            Assert.ThrowsAsync <NotFoundException>(() => handler.Handle(updateCommand, new CancellationToken()));
        }
Ejemplo n.º 9
0
 public async Task <HandleResultDto> EditArticle([FromBody] UpdateArticleCommand cmd)
 {
     return(await _mediator.Send(cmd, HttpContext.RequestAborted));
 }
Ejemplo n.º 10
0
        public async Task <ActionResult <Article> > Update([FromBody] UpdateArticleCommand request)
        {
            var article = await mediator.Send(request);

            return(Ok());
        }
        public Task <Article> Handle(UpdateArticleCommand request, CancellationToken cancellationToken)
        {
            request.Article.UpdatedTs = DateTime.UtcNow;

            return(_dbContext.WithConnectionAsync(connection => connection.QueryFirstAsync <Article>(UpdateSql, request.Article)));
        }
Ejemplo n.º 12
0
 public async Task <ArticleViewModel> UpdateArticle([FromBody] UpdateArticleCommand command, string slug)
 {
     _logger.LogInformation($"Updating article [{slug}]");
     command.Slug = slug;
     return(await Mediator.Send(command));
 }
Ejemplo n.º 13
0
 public async Task <ArticleDetailWrapper> UpdateArticle([FromRoute] string slug, [FromBody] UpdateArticleCommand command)
 {
     command.Article.Slug = slug;
     return(await _mediator.Send(command));
 }
Ejemplo n.º 14
0
        public void CreateArticleCommandValidationShouldReturnFalse()
        {
            var request = new UpdateArticleCommand();

            updateArticleCommandValidator.Validate(request).IsValid.Should().BeFalse();
        }
Ejemplo n.º 15
0
 public async Task <Response <int> > Update(UpdateArticleCommand command)
 {
     return(await Mediator.Send(command));
 }
Ejemplo n.º 16
0
        public Task <ResultWrapper <UpdateArticleOutput> > Handle(UpdateArticleCommand request, CancellationToken cancellationToken)
        {
            ResultWrapper <UpdateArticleOutput> updateArticleResult = new ResultWrapper <UpdateArticleOutput>();

            try
            {
                using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    TArticle tArticle = _dbContext.TArticle
                                        .Include(x => x.TArticleSports)
                                        .FirstOrDefault(x => x.Id == request.Id);

                    if (tArticle == null)
                    {
                        updateArticleResult.Status  = false;
                        updateArticleResult.Message = "this Article doesn't exists!";
                        return(Task.FromResult(updateArticleResult));
                    }
                    tArticle.Title   = request.Title;
                    tArticle.Summary = request.Summary;
                    tArticle.Image   = request.Image;
                    tArticle.Content = request.Content;
                    tArticle.Image   = request.Image;
                    tArticle.Enabled = request.Enabled;
                    _dbContext.TArticle.Update(tArticle);
                    _dbContext.SaveChanges();

                    // Article Sports
                    List <TArticleSport> ArticleSports = _dbContext.TArticleSport.Where(x => x.TArticle.Id == tArticle.Id).ToList();
                    _dbContext.TArticleSport.RemoveRange(ArticleSports.Where(x => !request.Sports.Contains(x.TSportId)));

                    int selectedSportsCount = _dbContext.TSport.Where(x => request.Sports.Contains(x.Id)).Count();
                    if (selectedSportsCount != request.Sports.Count)
                    {
                        updateArticleResult.Status  = false;
                        updateArticleResult.Message = "Selected Sports are invalid!";
                        return(Task.FromResult(updateArticleResult));
                    }
                    foreach (int SportId in request.Sports.Where(x => !ArticleSports.Any(z => z.TSportId == x)))
                    {
                        _dbContext.TArticleSport.Add(new TArticleSport()
                        {
                            TArticleId = tArticle.Id,
                            TSportId   = SportId
                        });
                    }
                    _dbContext.SaveChanges();

                    transaction.Complete();
                    updateArticleResult.Status = true;
                    updateArticleResult.Result = new UpdateArticleOutput()
                    {
                        Id = tArticle.Id
                    };
                }
            }
            catch (Exception ex)
            {
                updateArticleResult.Status  = false;
                updateArticleResult.Message = ex.Message;
            }
            return(Task.FromResult(updateArticleResult));
        }
Ejemplo n.º 17
0
        public async Task <IActionResult> Update([FromBody] UpdateArticleCommand command)
        {
            await Mediator.Send(command);

            return(NoContent());
        }
Ejemplo n.º 18
0
 public async Task <ActionResult <ArticleDto> > Update(
     [FromRoute] int id,
     [FromBody] UpdateArticleCommand command)
 {
     return(Ok(await Mediator.Send(command)));
 }
Ejemplo n.º 19
0
        public async Task <IActionResult> Update([FromBody] UpdateArticleCommand updateArticlesCommand)
        {
            ResultWrapper <UpdateArticleOutput> updateArticlesResult = await _mediator.Send(updateArticlesCommand);

            return(Ok(updateArticlesResult));
        }