public async Task UseCase_WhenNewsAuthorChangedAndNotExistsInDb_ReturnUpdatedNews()
        {
            var oldNews     = new NewsBuilder().Build();
            var fakeRequest = new NewsRequestBuilder(oldNews.Id)
                              .WithTitle("New Title")
                              .WithContent("New Content")
                              .WithAuthorUserName("*****@*****.**")
                              .BuildUpdate();

            var logger    = new Mock <ILogger <UpdateNewsUseCase> >().Object;
            var validator = ValidatorFactory.GetValidValidator <UpdateNewsRequest>();

            var newsRepositoryMock = new Mock <INewsRepository>();

            newsRepositoryMock.Setup(r => r.GetById(fakeRequest.Id)).ReturnsAsync(oldNews);
            var authorRepositoryMock = new Mock <IAuthorRepository>();

            var useCase  = new UpdateNewsUseCase(logger, validator, newsRepositoryMock.Object, authorRepositoryMock.Object);
            var response = await useCase.Execute(fakeRequest);

            response.Status.Should().Be(UseCaseResponseStatus.Success);
            response.Success().Should().BeTrue();

            newsRepositoryMock.Verify(r => r.GetById(fakeRequest.Id), Times.Once);
            newsRepositoryMock.Verify(r => r.Update(It.IsAny <Entities.News>()), Times.Once);
            authorRepositoryMock.Verify(r => r.GeyByUserName(fakeRequest.Author.UserName), Times.Once);
            authorRepositoryMock.Verify(r => r.Save(It.IsAny <Author>()), Times.Once);
        }
Exemplo n.º 2
0
        public async Task UseCase_WhenAuthorNotExists_ReturnSuccessAndCreateAuthor()
        {
            //Given
            var request = new NewsRequestBuilder().BuildCreate();

            var logger    = new Mock <ILogger <CreateNewsUseCase> >().Object;
            var validator = ValidatorFactory.GetValidValidator <CreateNewsRequest>();

            var repositoryMock       = new Mock <INewsRepository>();
            var authorRepositoryMock = new Mock <IAuthorRepository>();

            //When
            var useCase  = new CreateNewsUseCase(logger, validator, repositoryMock.Object, authorRepositoryMock.Object);
            var response = await useCase.Execute(request);

            //Then
            response.Success().Should().BeTrue();
            response.Result.Title.Should().Be(request.Title);
            response.Result.Content.Should().Be(request.Content);
            response.Result.Id.Should().NotBeEmpty();
            response.Result.Author.Should().NotBeNull();
            response.Result.Author.Id.Should().NotBeEmpty();

            repositoryMock.Verify(r => r.Save(It.IsAny <Entities.News>()), Times.Once);
            authorRepositoryMock.Verify(r => r.GeyByUserName(request.Author.UserName), Times.Once);
            authorRepositoryMock.Verify(r => r.Save(It.IsAny <Author>()), Times.Once);
        }
        public async Task UseCase_WhenNewsNotExists_ReturnNotFoundError()
        {
            var oldNews     = new NewsBuilder().Build();
            var fakeRequest = new NewsRequestBuilder(Guid.NewGuid())
                              .WithTitle("New Title")
                              .WithContent("New Content")
                              .WithAuthorUserName("*****@*****.**")
                              .BuildUpdate();

            var logger    = new Mock <ILogger <UpdateNewsUseCase> >().Object;
            var validator = ValidatorFactory.GetValidValidator <UpdateNewsRequest>();

            var repositorymock       = new Mock <INewsRepository>();
            var authorRepositoryMock = new Mock <IAuthorRepository>();


            var useCase  = new UpdateNewsUseCase(logger, validator, repositorymock.Object, authorRepositoryMock.Object);
            var response = await useCase.Execute(fakeRequest);

            response.Status.Should().Be(UseCaseResponseStatus.ResourceNotFountError);
            response.Success().Should().BeFalse();

            repositorymock.Verify(r => r.GetById(fakeRequest.Id), Times.Once);
            repositorymock.Verify(r => r.Update(It.IsAny <Entities.News>()), Times.Never);
            authorRepositoryMock.Verify(r => r.GeyByUserName(fakeRequest.Author.UserName), Times.Never);
            authorRepositoryMock.Verify(r => r.Save(It.IsAny <Author>()), Times.Never);
        }