Beispiel #1
0
        public void UpdateBook_ValidBook_Success()
        {
            // Arrange
            var bookRequestDtos = new BookRequestDto
            {
                Id            = 100,
                Name          = "Book 2",
                CatId         = 1,
                ISBN          = "1213244234",
                PublishedDate = new DateTime(2019, 10, 1)
            };
            var bookResponseDtos = new BookResponseDto
            {
                Id            = 100,
                Name          = "Book 2",
                CatId         = 1,
                ISBN          = "1213244234",
                PublishedDate = new DateTime(2019, 11, 1)
            };

            _bookServiceMock.Setup(c => c.Update(bookRequestDtos.Id, bookRequestDtos)).Returns(bookResponseDtos);
            _booksApiController = new BooksApiController(_bookServiceMock.Object);
            // Act
            var result = _booksApiController.Put(bookRequestDtos.Id, bookRequestDtos);
            // Assert
            var resultStatusCode = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).StatusCode;
            var resultValue      = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).Value;

            Assert.Equal((int)HttpStatusCode.Accepted, resultStatusCode);
            Assert.Equal(bookResponseDtos, resultValue);
        }
Beispiel #2
0
        /// <summary>
        /// Updates the specified book.
        /// </summary>
        /// <param name="id">The book identifier.</param>
        /// <param name="requestDto">The request dto.</param>
        /// <returns>Updated book</returns>
        public async Task <BookResponseDto> Update(int id, BookRequestDto requestDto, string uploadedImageUrl)
        {
            BookResponseDto book       = null;
            SqlConnection   connection = _dBContext.GetConnection();
            SqlCommand      command    = new SqlCommand("sp_books_update", connection)
            {
                CommandType = System.Data.CommandType.StoredProcedure
            };

            command.Parameters.AddWithValue("@id", id);
            command.Parameters.AddWithValue("@description", requestDto.Description);
            command.Parameters.AddWithValue("@author", requestDto.Author);
            command.Parameters.AddWithValue("@title", requestDto.Title);
            command.Parameters.AddWithValue("@image", uploadedImageUrl);
            command.Parameters.AddWithValue("@price", requestDto.Price);
            command.Parameters.AddWithValue("@quantity", requestDto.Quantity);
            await connection.OpenAsync();

            using (SqlDataReader reader = await command.ExecuteReaderAsync())
            {
                while (await reader.ReadAsync())
                {
                    book = MapReaderTobook(reader);
                }
            }
            await connection.CloseAsync();

            return(book);
        }
Beispiel #3
0
        public async Task CreateBook_ValidBook_Success()
        {
            // Arrange
            var bookRequestDtos = new BookRequestDto
            {
                Id    = 0,
                Name  = "Book 1",
                CatId = 1,
                ISBN  = "1213244234"
            };
            var bookResponseDtos = new BookResponseDto
            {
                Id    = 100,
                Name  = "Book 1",
                CatId = 1,
                ISBN  = "1213244234"
            };

            _bookServiceMock.Setup(c => c.CreateAsync(bookRequestDtos)).ReturnsAsync(bookResponseDtos);
            _booksApiController = new BooksApiController(_bookServiceMock.Object);
            // Act
            var result = await _booksApiController.Post(bookRequestDtos);

            // Assert
            var resultStatusCode = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).StatusCode;
            var resultValue      = (BookResponseDto)((Microsoft.AspNetCore.Mvc.ObjectResult)result).Value;

            Assert.Equal((int)HttpStatusCode.Created, resultStatusCode);
            Assert.Equal(bookResponseDtos, resultValue);
        }
Beispiel #4
0
        public async Task BorrowABook_BookExistFailedToBorrow_NoContent()
        {
            // Arrange
            var bookId             = 1;
            var userId             = "2";
            var bookLendingRequest = new BookLendingRequestDto
            {
                BookId = bookId,
                Id     = 1,
                UserId = userId
            };

            var bookInfo = new BookResponseDto
            {
                Id             = bookId,
                Name           = "Book 1",
                PublishedDate  = new DateTime(2015, 10, 1),
                Available2Lend = true
            };

            _bookServiceMock.Setup(c => c.GetByIdAsync(bookLendingRequest.BookId)).ReturnsAsync(bookInfo);
            _bookLendingServiceMock.Setup(c => c.BookLending(bookLendingRequest)).ReturnsAsync((BookLendingResponseDto)null);
            _bookLendingApiController = new BookLendingApiController(_bookLendingServiceMock.Object, _bookServiceMock.Object);
            // Act
            var result = await _bookLendingApiController.Post(bookLendingRequest);

            // Assert
            var resultStatus = ((Microsoft.AspNetCore.Mvc.NoContentResult)result).StatusCode;

            Assert.Equal((int)HttpStatusCode.NoContent, resultStatus);
        }
Beispiel #5
0
        private bool BookResponseEquals(BookResponseDto leftBook, BookResponseDto rightBook) => Equals(leftBook.GetType()
                                                                                                       .GetProperties()
                                                                                                       .FirstOrDefault(prop =>
        {
            var leftValue  = prop.GetValue(leftBook, null);
            var rightValue = prop.GetValue(rightBook, null);

            return(prop.Name == "Id" ? (Guid)leftValue != (Guid)rightValue : leftValue != rightValue);
        }), null);
Beispiel #6
0
        public async Task <IActionResult> AddBook([FromForm] BookRequestDto requestDto)
        {
            string          email       = (string)HttpContext.Items["email"];
            BookResponseDto responseDto = await _service.AddBook(requestDto, email);

            return(Ok(new Response <BookResponseDto> {
                StatusCode = (int)HttpStatusCode.OK,
                Message = ResponseMessage.BOOK_ADDED,
                Data = responseDto
            }));
        }
Beispiel #7
0
        public async Task PostAsync_ReturnCreatedBook()
        {
            var requestDto  = new BookRequestDto();
            var responseDto = new BookResponseDto();

            _booksService.Setup(bs => bs.PostAsync(requestDto)).ReturnsAsync(responseDto);

            var result = await _booksController.PostAsync(requestDto);

            Assert.That(result.Value, Is.EqualTo(responseDto));
            _booksService.Verify(bs => bs.PostAsync(requestDto));
        }
Beispiel #8
0
        public async Task GetAsync_ReturnBook()
        {
            var bookDto = new BookResponseDto();
            var bookId  = Guid.NewGuid();

            _booksService.Setup(bs => bs.GetAsync(bookId)).ReturnsAsync(bookDto);

            var result = await _booksController.GetAsync(bookId);

            Assert.That(result.Value, Is.EqualTo(bookDto));
            _booksService.Verify(bs => bs.GetAsync(It.IsAny <Guid>()));
        }
Beispiel #9
0
        /// <summary>
        /// Performs business logic while adding book.
        /// </summary>
        /// <param name="requestDto">The request dto.</param>
        /// <returns>BookResponseDto object</returns>
        /// <exception cref="BookstoreException">Invalid data</exception>
        public async Task <BookResponseDto> AddBook(BookRequestDto requestDto, string email)
        {
            try
            {
                string uploadedImageUrl = await _cloudService.UpdloadToCloud(requestDto.Image, email);

                int id = await _repository.Insert(requestDto, uploadedImageUrl);

                BookResponseDto response = _mapper.Map <BookResponseDto>(requestDto);
                response.Id    = id;
                response.Image = uploadedImageUrl;
                return(response);
            }
            catch (SqlException e) when(e.Number == SqlErrorNumbers.CONSTRAINT_VOILATION)
            {
                throw new BookstoreException("Invalid data");
            }
        }
Beispiel #10
0
        public async Task <IActionResult> GetBook(int id)
        {
            BookResponseDto book = await _service.Get(id);

            if (book == null)
            {
                return(NotFound(new Response <BookResponseDto>
                {
                    StatusCode = (int)HttpStatusCode.NotFound,
                    Message = ResponseMessage.BOOK_NOT_FOUND,
                    Data = book
                }));
            }
            return(Ok(new Response <BookResponseDto>
            {
                StatusCode = (int)HttpStatusCode.OK,
                Message = ResponseMessage.SUCCESSFUL,
                Data = book
            }));
        }
Beispiel #11
0
        public async Task <IActionResult> UpdateBook(int id, [FromForm] BookRequestDto requestDto)
        {
            string          email = (HttpContext.Items["email"]).ToString();
            BookResponseDto book  = await _service.Update(id, requestDto, email);

            if (book == null)
            {
                return(NotFound(new Response <BookResponseDto>
                {
                    StatusCode = (int)HttpStatusCode.NotFound,
                    Message = ResponseMessage.BOOK_NOT_FOUND,
                    Data = book
                }));
            }
            return(Ok(new Response <BookResponseDto>
            {
                StatusCode = (int)HttpStatusCode.OK,
                Message = ResponseMessage.BOOK_UPDATED,
                Data = book
            }));
        }
Beispiel #12
0
        public async Task GetBook_BySlug_Success()
        {
            var bookSlug         = Guid.NewGuid().ToString();
            var bookResponseDtos = new BookResponseDto
            {
                Id   = 3,
                Name = "Book 3",
                ISBN = "243547645664"
            };

            _bookServiceMock.Setup(c => c.GetBySlugAsync(bookSlug)).ReturnsAsync(bookResponseDtos);
            _booksApiController = new BooksApiController(_bookServiceMock.Object);
            // Act
            var result = await _booksApiController.Get(bookSlug);

            // Assert
            var resultValue  = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).Value;
            var resultStatus = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).StatusCode;

            Assert.Equal((int)HttpStatusCode.OK, resultStatus);
            Assert.Equal(bookResponseDtos, resultValue);
        }
Beispiel #13
0
        public async Task GetBook_ById_Success()
        {
            var bookIdStr        = "2";
            var bookResponseDtos = new BookResponseDto
            {
                Id   = int.Parse(bookIdStr),
                Name = "Book 2",
                ISBN = "243547645664"
            };

            _bookServiceMock.Setup(c => c.GetByIdAsync(bookResponseDtos.Id)).ReturnsAsync(bookResponseDtos);
            _booksApiController = new BooksApiController(_bookServiceMock.Object);
            // Act
            var result = await _booksApiController.Get(bookIdStr);

            // Assert
            var resultValue  = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).Value;
            var resultStatus = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).StatusCode;

            Assert.Equal((int)HttpStatusCode.OK, resultStatus);
            Assert.Equal(bookResponseDtos, resultValue);
        }
Beispiel #14
0
        /// <summary>
        /// Gets the specified book from database.
        /// </summary>
        /// <param name="id">The identifier.</param>
        /// <returns>Book with given id</returns>
        public async Task <BookResponseDto> Get(int id)
        {
            BookResponseDto book       = null;
            SqlConnection   connection = _dBContext.GetConnection();
            SqlCommand      command    = new SqlCommand("sp_books_detailed_view", connection)
            {
                CommandType = System.Data.CommandType.StoredProcedure
            };

            command.Parameters.AddWithValue("@id", id);
            await connection.OpenAsync();

            using (SqlDataReader reader = await command.ExecuteReaderAsync())
            {
                while (await reader.ReadAsync())
                {
                    book = MapReaderTobook(reader);
                }
            }
            await connection.CloseAsync();

            return(book);
        }
Beispiel #15
0
        public async void ExistingAuthorPublishABook()
        {
            // Arrange
            var authorId = Guid.NewGuid();
            var request  = new PublishBookRequestDto
            {
                Title   = "New Title",
                Summary = "Summary",
                Genre   = "Action"
            };
            var expected = new BookResponseDto
            {
                Title   = "New Title",
                Summary = "Summary",
                Genre   = "Action",
                Id      = Guid.NewGuid()
            };

            _mockAuthorRepository
            .Setup(repo => repo.GetFirstOrDefault(aut => aut.Id == authorId))
            .ReturnsAsync(new Author());
            _mockBookRepository
            .Setup(repo => repo.Create(It.IsAny <Book>(), true))
            .ReturnsAsync(new Book {
                Title = expected.Title, Summary = expected.Summary, Genre = expected.Genre, Id = expected.Id
            });
            _mockAuthorBookRepository
            .Setup(repo => repo.Create(It.IsAny <AuthorBook>(), true))
            .ReturnsAsync(new AuthorBook());
            var authorService = SetupService();

            // Act
            var actual = await authorService.PublishBook(authorId, request);

            // Assert
            Assert.True(BookResponseEquals(expected, actual));
        }