Example #1
0
        public async Task <ServiceResponse <GetBookDto> > UpdateBook(UpdateBookDto updatedBook)
        {
            ServiceResponse <GetBookDto> response = new ServiceResponse <GetBookDto>();

            try
            {
                Book dbBook = await _context.Books.FirstOrDefaultAsync(b => b.Id == updatedBook.Id);

                dbBook.ElementName     = updatedBook.ElementName;
                dbBook.Description     = updatedBook.Description;
                dbBook.Finished        = updatedBook.Finished;
                dbBook.PublishedDate   = updatedBook.PublishedDate;
                dbBook.PagesNumber     = updatedBook.PagesNumber;
                dbBook.Publisher       = updatedBook.Publisher;
                dbBook.CategoryId      = updatedBook.CategoryId;
                dbBook.Author          = updatedBook.Author;
                dbBook.ElementCategory = await _context.Categories.FirstOrDefaultAsync(c => c.Id == dbBook.CategoryId);

                _context.Books.Update(dbBook);
                await _context.SaveChangesAsync();

                response.Data = _mapper.Map <GetBookDto>(dbBook);
            }

            catch (Exception ex)
            {
                response.Sucess  = false;
                response.Message = ex.Message;
            }

            return(response);
        }
        public async Task <IActionResult> UpdateBook(Guid id, UpdateBookDto dto)
        {
            if (id != dto.Id)
            {
                return(BadRequest("The ID in the url doesn't match the ID in the request"));
            }

            var book = _dbContext.Books.FirstOrDefault(book => book.Id == id);

            if (book == null)
            {
                return(BadRequest($"Book with ID {id} doesn't exist in the database"));
            }

            _mapper.Map(dto, book);

            try
            {
                await _dbContext.SaveChangesAsync();
            }
            catch (Exception)
            {
                throw;
            }

            return(NoContent());
        }
        public async Task GivenValidData_WhenUpdateBook_ThenReturnUpdatedRecord()
        {
            // arrange
            const int bookId     = 1;
            var       updateBook = new UpdateBookDto
            {
                Title    = "Updated book",
                Author   = "John Doe",
                Category = "Fantasy"
            };

            // act
            var result = await _controller.UpdateBook(bookId, updateBook);

            // assert
            result.ShouldNotBeNull();
            result.BookId.ShouldBe(1);
            result.Author.ShouldNotBeNull();
            result.Author.ShouldBe("John Doe");
            result.Title.ShouldNotBeNull();
            result.Title.ShouldBe("Updated book");
            result.Category.ShouldNotBeNull();
            result.Category.ShouldBe("Fantasy");
            _mockService.Verify(x => x.UpdateBook(It.IsAny <int>(), It.IsAny <UpdateBookDto>()), Times.Once());
        }
        public void Update_update_book_properly()
        {
            //Arrange
            BookCategory category = new BookCategory()
            {
                Title = "dummy-category-title",
            };

            context.Manipulate(_ => _.BookCategories.Add(category));
            Book book = new Book()
            {
                Title      = "dummy-title",
                AgeRange   = AgeRange.oneToTen,
                CategoryId = category.Id,
            };

            context.Manipulate(_ => _.Books.Add(book));
            UpdateBookDto dto = new UpdateBookDto()
            {
                Title      = "dummy-book-title",
                AgeRange   = AgeRange.oneToTen,
                CategoryId = category.Id,
            };

            //Act
            int actualReturnedId = sut.Update(book.Id, dto);

            //Assert
            var expected = readContext.Books.Single(_ => _.Id == actualReturnedId);

            expected.Title.Should().Be(dto.Title);
            expected.AgeRange.Should().Be(dto.AgeRange);
            expected.CategoryId.Should().Be(dto.CategoryId);
        }
Example #5
0
        public ActionResult UpdateBook(int id, UpdateBookDto updateBook)
        {
            var bookFromRepo = _repository.GetBookById(id);

            if (bookFromRepo is null)
            {
                return(NotFound());
            }

            //refatorar em um atualizador de livros
            var bookByTitle = _repository.GetBookByTitle(updateBook.Title);

            if (!(bookByTitle is null))
            {
                if (!bookByTitle.Equals(bookFromRepo))
                {
                    ModelState.AddModelError("duplicate", $"{updateBook.Title} already exists");
                    return(ValidationProblem(ModelState));
                }
            }
            bookFromRepo.Title = updateBook.Title;
            _repository.UpdateBook(bookFromRepo);
            _repository.SaveChanges();
            return(NoContent());
        }
        public ServiceResponse <GetBookDto> UpdateBook(UpdateBookDto updateBook)
        {
            ServiceResponse <GetBookDto> serviceResponse = new ServiceResponse <GetBookDto>();

            try
            {
                Book foundBook = dataContext.Books.FirstOrDefault(b => b.Id == updateBook.Id);
                foundBook.Name        = updateBook.Name;
                foundBook.Description = updateBook.Description;
                foundBook.Author      = updateBook.Author;
                foundBook.Price       = updateBook.Price;
                foundBook.CategoryId  = updateBook.CategoryId;

                dataContext.Books.Update(foundBook);
                dataContext.SaveChanges();

                serviceResponse.Data    = mapper.Map <GetBookDto>(foundBook);
                serviceResponse.Message = "Book updated successfully";
            }
            catch (Exception)
            {
                serviceResponse.Success = false;
                serviceResponse.Message = "Requested book not found";
            }

            return(serviceResponse);
        }
        public IActionResult UpdateBookForAuthor(Guid authorId, Guid id, [FromBody] UpdateBookDto book)
        {
            if (book == null)
            {
                return(BadRequest());
            }

            if (!this.repository.AuthorExists(authorId))
            {
                return(NotFound());
            }

            var bookEntity = this.repository.GetBookForAuthor(authorId, id);

            if (bookEntity == null)
            {
                return(NotFound());
            }

            Mapper.Map(book, bookEntity);

            this.repository.UpdateBookForAuthor(bookEntity);

            if (!this.repository.Save())
            {
                throw new Exception($"Updating book {id}  for author {authorId} failed");
            }

            return(NoContent());
        }
Example #8
0
        public async Task Test3()
        {
            // arrange
            Seeder.SeedDatabase(_context);
            const int firstBookId  = 1;
            var       bookToUpdate = new UpdateBookDto()
            {
                Title    = "title updated",
                Author   = "author updated",
                Category = "category updated"
            };

            // act
            var result = await _bookRepository.UpdateBook(firstBookId, bookToUpdate);

            // assert
            result.ShouldNotBeNull();
            result.BookId.ShouldBe(firstBookId);
            result.Author.ShouldNotBeNull();
            result.Author.ShouldBe(bookToUpdate.Author);
            result.Title.ShouldNotBeNull();
            result.Title.ShouldBe(bookToUpdate.Title);
            result.Category.ShouldNotBeNull();
            result.Category.ShouldBe(bookToUpdate.Category);
            await _context.Database.EnsureDeletedAsync();
        }
Example #9
0
        public async Task <bool> UpdateBook(Guid id, UpdateBookDto model, string fields)
        {
            var book = await _service.Query(id, false);

            book.UpdateTime = DateTime.Now;
            return(await _service.Update(CommonClass.SetModelValue(model, book, fields)));
        }
Example #10
0
        public async void UpdateBook_ShouldReturnNoContent()
        {
            var getAllBooksResponse = await _httpClient.GetAsync("api/Book");

            var books = await DeserializeJson <ViewBookDto[]>(getAllBooksResponse);

            var oldBook = books[2];

            var dto = new UpdateBookDto
            {
                Id = oldBook.Id,
                //Title = oldBook.Title,
                Author = "J.R. Tolkien",
                //Edition = oldBook.Edition,
                //Price = oldBook.Price,
                //YearWritten = oldBook.YearWritten
            };

            var content = SerializeJson(dto);

            var response = await _httpClient.PutAsync($"api/Book/{oldBook.Id}", content);

            response.StatusCode.Should().Be(HttpStatusCode.NoContent);

            var getBookResponse = await _httpClient.GetAsync($"api/Book/{oldBook.Id}");

            var book = await DeserializeJson <ViewBookDto>(getBookResponse);

            book.Author.Should().Be("J.R. Tolkien");
        }
        public async Task <ServiceResult> Update(UpdateBookDto book)
        {
            try
            {
                var storedBook = await _unitOfWork.Repository <Book>().GetById(book.Id);

                if (storedBook == null)
                {
                    return(Error("There is not such book"));
                }

                var newBook = new Book
                {
                    Id          = storedBook.Id,
                    Title       = book.Title,
                    Description = book.Description,
                    Year        = book.Year,
                    Pages       = book.Pages
                };

                _unitOfWork.Repository <Book>().Update(newBook);
                await _unitOfWork.SaveAsync();

                return(Success());
            }
            catch
            {
                return(Error <Book>("Can't update book"));
            }
        }
Example #12
0
        public void UpdateBook_ExistingBook_ReturnsGetBookDto()
        {
            AddBookDto newBook = BookTestData.AddBookDto();

            mapperMock.Setup(m => m.Map <Book>(It.IsAny <AddBookDto>())).Returns(BookTestData.Book());
            mapperMock.Setup(m => m.Map <UpdateBookDto>(It.IsAny <GetBookDto>())).Returns(BookTestData.AddBookDtoToUpdateBookDtoMapping());
            mapperMock.Setup(m => m.Map <GetBookDto>(It.IsAny <Book>())).Returns(BookTestData.AddBookDtoToGetBookDtoMapping());

            BookService bookService = new BookService(mapperMock.Object, dbContextMock.Object);

            ServiceResponse <List <GetBookDto> > addBookResponse = bookService.AddBook(newBook);
            GetBookDto addedBook = addBookResponse.Data.First();

            UpdateBookDto updatedBook = mapperMock.Object.Map <UpdateBookDto>(addedBook);

            updatedBook.Price = 900;

            ServiceResponse <GetBookDto> updatedBookResponse = bookService.UpdateBook(updatedBook);
            GetBookDto savedBook = updatedBookResponse.Data;

            Assert.That(updatedBookResponse.Success, Is.EqualTo(true));
            Assert.That(updatedBookResponse, Is.InstanceOf <ServiceResponse <GetBookDto> >());
            Assert.That(savedBook, Is.InstanceOf <GetBookDto>());
            Assert.That(savedBook.Price, Is.EqualTo(updatedBook.Price));
        }
Example #13
0
 public IActionResult Put(int id,
                          [FromBody] UpdateBookDto dto,
                          [FromServices] IUpdateBookCommand command)
 {
     dto.Id = id;
     _executor.ExecuteCommand(command, dto);
     return(NoContent());
 }
        // When[("مشخصات کتاب با عنوان جنگ جهانی دوم را به، عنوان خلاصه جنگ جهانی دوم تغییر میدهم")]
        private void When()
        {
            UpdateBookDto dto = new UpdateBookDto()
            {
                Title = "خلاصه جنگ جهانی دوم",
            };

            actualRecordId = sut.Update(book.Id, dto);
        }
Example #15
0
        public int Update(int id, UpdateBookDto dto)
        {
            Book theBook = _bookRepository.FindById(id);

            theBook.Title    = dto.Title;
            theBook.AgeRange = dto.AgeRange;
            _unitOfWork.Complete();
            return(theBook.Id);
        }
Example #16
0
        public async Task <IActionResult> UpdateBook(UpdateBookDto book)
        {
            ServiceResponse <GetBookDto> response = await _bookService.UpdateBook(book);

            if (response.Data == null)
            {
                return(NotFound(response));
            }
            return(Ok(response));
        }
        public IActionResult UpdateBook(UpdateBookDto updatedBook)
        {
            ServiceResponse <GetBookDto> response = bookService.UpdateBook(updatedBook);

            if (response.Data == null)
            {
                return(NotFound(response));
            }
            return(Ok(response));
        }
Example #18
0
        public void Update(int bookShopId, int bookId, UpdateBookDto updateBookDto)
        {
            var bookShop = GetBookShopIncludeBooksById(bookShopId);
            var book     = GetBookFromBookShopById(bookShop, bookId);

            book.Description = updateBookDto.Description;
            book.Price       = updateBookDto.Price;

            _dbContext.SaveChanges();
        }
Example #19
0
        public IActionResult UpdateBookForAuthor(Guid authorId, Guid id, [FromBody] UpdateBookDto model)
        {
            if (model == null)
            {
                return(BadRequest());
            }

            if (model.Description == model.Title)
            {
                ModelState.AddModelError(nameof(UpdateBookDto), "Description should be different from Title.");
            }

            if (!ModelState.IsValid)
            {
                return(new UnprocessableEntityObjectResult(ModelState));
            }

            if (!_libraryRepository.AuthorExists(authorId))
            {
                return(NotFound());
            }

            var book = _libraryRepository.GetBookForAuthor(authorId, id);

            if (book == null)
            {
                var bookToAdd = Mapper.Map <Book>(model);
                bookToAdd.Id = id;

                _libraryRepository.AddBookForAuthor(authorId, bookToAdd);

                if (!_libraryRepository.Save())
                {
                    throw new Exception($"Upserting book {id} for author {authorId} failed on save.");
                }

                var addedBook = Mapper.Map <BookDto>(bookToAdd);

                return(CreatedAtRoute("GetBookForAuthor", new
                {
                    authorId, id = addedBook.Id
                }, addedBook));
            }

            Mapper.Map(model, book);

            _libraryRepository.UpdateBookForAuthor(book);

            if (!_libraryRepository.Save())
            {
                throw new Exception($"Update book {id} for author {authorId} failed on save.");
            }

            return(NoContent());
        }
Example #20
0
        public IActionResult UpdateBook([FromBody] UpdateBookDto updateBookDto)
        {
            var updatedBook = _bookService.UpdateBook(updateBookDto);

            if (updatedBook == null)
            {
                return(NotFound("Book or Author with those credentials does not exists, please try again."));
            }

            return(Ok(updatedBook));
        }
Example #21
0
        /// <inheritdoc />
        public async Task <Book> UpdateBook(int id, UpdateBookDto bookToUpdate)
        {
            var foundBook = await GetBookById(id);

            foundBook.Title    = bookToUpdate.Title;
            foundBook.Author   = bookToUpdate.Author;
            foundBook.Category = bookToUpdate.Category;

            await _context.SaveChangesAsync();

            return(foundBook);
        }
Example #22
0
        public async void Update_failed_update_when_book_not_exists()
        {
            BookCategory bookCategory = BookCategoryFactory.GenerateBookCategory();

            _context.Manipulate(_ => _.BookCategories.Add(bookCategory));
            UpdateBookDto dto = BookDtoFactory.GenerateUpdateBookDto(bookCategory.Id,
                                                                     20, "dummy-author", "dummy-name");

            Func <Task> expected = () => _sut.UpdateBook(1, dto);

            expected.Should().ThrowExactly <FailedBookUpdateWhenBookNotExistsException>();
        }
        public void UpdateBook_NonExistingBook_ReturnsNotFound()
        {
            mockService.Setup(s => s.UpdateBook(It.IsAny <UpdateBookDto>()))
            .Returns(BookTestData.UpdateBookServiceResponseNullData());

            BookController bookController = new BookController(mockService.Object);

            UpdateBookDto updatedBook = BookTestData.UpdateBookDto();
            var           result      = bookController.UpdateBook(updatedBook);

            Assert.That(result, Is.InstanceOf <NotFoundObjectResult>());
        }
Example #24
0
        public void UpdateBook_NonExistingBook_ReturnsNotFound()
        {
            dbContext.Database.EnsureDeleted();
            dbContext.Database.EnsureCreated();

            BookService    bookService    = new BookService(mapper, dbContext);
            BookController bookController = new BookController(bookService);

            UpdateBookDto updatedBook = GetUpdateBookDto();
            var           result      = bookController.UpdateBook(updatedBook);

            Assert.That(result, Is.InstanceOf <NotFoundObjectResult>());
        }
Example #25
0
        public void UpdateBook_NonExistingBook_ReturnsError()
        {
            UpdateBookDto updatedBook = BookTestData.UpdateBookDto();

            BookService bookService = new BookService(mapperMock.Object, dbContextMock.Object);

            ServiceResponse <GetBookDto> updatedBookResponse = bookService.UpdateBook(updatedBook);
            GetBookDto savedBook = updatedBookResponse.Data;

            Assert.That(updatedBookResponse.Success, Is.EqualTo(false));
            Assert.That(updatedBookResponse, Is.InstanceOf <ServiceResponse <GetBookDto> >());
            Assert.That(updatedBookResponse.Data, Is.EqualTo(null));
        }
Example #26
0
        public async Task <IActionResult> CreateBookAsybc(int authorId, UpdateBookDto bookDto)
        {
            var book = mapper.Map <Book>(bookDto);

            book.AuthorId = authorId;
            repositoryWrapper.Book.Create(book);
            if (await repositoryWrapper.Book.SaveAsync())
            {
                var bookCreate = mapper.Map <BookDto>(book);
                return(CreatedAtRoute(nameof(GetBookAsync), new { authorId = bookCreate.AuthorId, bookId = bookCreate.BookId }, bookCreate));
            }
            return(BadRequest());
        }
Example #27
0
        public async Task <IActionResult> Update(UpdateBookDto updateBookDto)
        {
            try
            {
                var updatedBook = await bookService.UpdateAsync(updateBookDto);

                return(Ok(updatedBook));
            }
            catch (NotFoundException)
            {
                return(NotFound());
            }
        }
Example #28
0
        public void UpdateBook(Guid bookId, UpdateBookDto dto)
        {
            var sql = "UPDATE Book SET BookName=@bookName, ISBN=@isbn, DateIssued=@dateIssued, Description=@description WHERE BookId=@id";

            _dbConnection.Execute(sql, new
            {
                id          = bookId,
                bookName    = dto.BookName,
                isbn        = dto.ISBN,
                dateIssued  = dto.DateIssued,
                description = dto.Description
            });
        }
Example #29
0
        public async Task <BookDto> UpdateBookAsync(int id, UpdateBookDto updateBook)
        {
            var bookEntity = await _unitOfWork.Books.FindAsync(id);

            _mapper.Map(updateBook, bookEntity);

            if (updateBook.Image != null)
            {
                string uploadsFolder = @"E:\me\epam\EpamBookShop\src\BookShopClient\src\assets\images";
                System.IO.File.Delete(String.Concat(uploadsFolder, updateBook.ExistingImagePath.Substring(10)));
                string uniqueFileName = Guid.NewGuid().ToString() + "_" + updateBook.Image.FileName;
                string filePath       = Path.Combine(uploadsFolder, uniqueFileName);
                using (var fileStream = new FileStream(filePath, FileMode.Create))
                {
                    updateBook.Image.CopyTo(fileStream);
                }

                bookEntity.ImageUrl = "~/images/" + uniqueFileName;
            }
            else
            {
                bookEntity.ImageUrl = updateBook.ExistingImagePath;
            }

            var bookAuthors = new List <BookAuthor>()
            {
                new BookAuthor()
                {
                    AuthorId = updateBook.AuthorId,
                    Book     = bookEntity
                }
            };

            _unitOfWork.BookAuthors.AddRange(bookAuthors);

            var bookCategories = new List <BookCategory>()
            {
                new BookCategory()
                {
                    CategoryId = updateBook.CategoryId,
                    Book       = bookEntity
                }
            };

            _unitOfWork.BookCategories.AddRange(bookCategories);

            await _unitOfWork.CommitAsync();

            return(_mapper.Map <Book, BookDto>(bookEntity));
        }
        public async Task <IActionResult> Update(long id, [FromBody] UpdateBookDto bookDto)
        {
            var location = GetControllerActionNames();

            try
            {
                _logger.LogInfo(GenerateLogMessage(location, MESSAGE_UPDATE_ATTEMPTED, id));
                if (id < 0 || bookDto == null)
                {
                    _logger.LogError(GenerateLogMessage(location, MESSAGE_UPDATE_BAD_DATA, id));
                    return(BadRequest());
                }

                if (!ModelState.IsValid)
                {
                    _logger.LogError(GenerateLogMessage(location, MESSAGE_UPDATE_BAD_DATA, id));
                    return(BadRequest());
                }

                if (!await _bookRepository.IsInDatabase(id))
                {
                    _logger.LogError(GenerateLogMessage(location, MESSAGE_UPDATE_ID_NOT_FOUND, id));
                    return(BadRequest());
                }

                //var book = _mapper.Map<Book>(bookDto);
                // Update values passed to objects dto, null properties are replaced by the current value of each property
                var book = await _bookRepository.FindById(id);

                book.Image   = bookDto.Image ?? book.Image;
                book.Title   = bookDto.Title ?? book.Title;
                book.Price   = bookDto.Price ?? book.Price;
                book.Summary = bookDto.Summary ?? book.Summary;

                var isSuccess = await _bookRepository.Update(book);

                if (isSuccess)
                {
                    _logger.LogInfo(GenerateLogMessage(location, MESSAGE_UPDATE_SUCCESSFUL, id));
                    return(NoContent());
                }

                _logger.LogError(GenerateLogMessage(location, MESSAGE_UPDATE_FAILED));
                return(BadRequest());
            }
            catch (Exception e)
            {
                return(InternalError(GenerateLogMessage(location, e)));
            }
        }