Ejemplo n.º 1
0
        public async Task <IHttpActionResult> GetBookDetail(int id)
        {
            BookDetailDto book = await db.Books.Include(x => x.Author).Where(x => x.BookId == id).Select(AsBookDetailDto).FirstOrDefaultAsync();

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

            return(Ok(book));
        }
Ejemplo n.º 2
0
        public async Task PutBook_ShouldUpdateBook_IfBookExistsInDatabase()
        {
            var book = new BookDetailDto {
                Id = 103, Author = "Ralls, Kim", Title = "New testing", Price = 100.1m, PublishDate = DateTime.Now
            };

            using (var client = NewHttpClient())
            {
                var resp = await client.PutAsJsonAsync("api/books/103", book);

                resp.EnsureSuccessStatusCode();
            }
        }
Ejemplo n.º 3
0
        public async Task <IHttpActionResult> GetBook(int id)
        {
            Book book = await db.Books.Include(b => b.Author).SingleOrDefaultAsync(b => b.Id == id);

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

            BookDetailDto bd = Mapper.Map <Book, BookDetailDto>(book);

            return(Ok(bd));
        }
Ejemplo n.º 4
0
        public IHttpActionResult PostBook(BookDetailDto book)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var bookModel = book.ToModel();

            db.Books.Add(bookModel);
            db.SaveChanges();
            var res = CreatedAtRoute("DefaultApi", new { controller = "Books", id = bookModel.BookId }, book);

            return(res);
        }
        public async Task GetBook_ShouldReturnBook_IfProvidedValidBookId()
        {
            BookDetailDto expectedBook   = db.AddNewBookWithAllFields(DateTime.Now);
            int           expectedBookId = expectedBook.Id;

            using (var client = NewHttpClient())
            {
                var resp = await client.GetAsync("books/" + expectedBookId);

                resp.EnsureSuccessStatusCode();
                var book = await resp.Content.ReadAsAsync <BookDto>();

                Assert.AreEqual <BookDto>(BooksConverter.BookDetailToBook(expectedBook), book);
            }
        }
Ejemplo n.º 6
0
        public async Task PostBook_ShouldCreateNewBookAndRetutnItsDto()
        {
            var book = new BookDetailDto {
                Id = 105, Author = "Ralls, Kim", Title = "Integration testing", Price = 100.1m, PublishDate = DateTime.Now
            };

            using (var client = NewHttpClient())
            {
                var resp = await client.PostAsJsonAsync("api/books", book);

                resp.EnsureSuccessStatusCode();
                var result = await resp.Content.ReadAsAsync <BookDetailDto>();

                Assert.AreEqual(result.Title, book.Title);
            }
        }
Ejemplo n.º 7
0
        public async Task <IHttpActionResult> PutBook(int id, BookDetailDto bookDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != bookDto.Id)
            {
                return(BadRequest());
            }



            if (bookDto.AuthorId == 0)
            {
                Author newAu = new Author
                {
                    Name = bookDto.AuthorName
                };
                IHttpActionResult result = await new AuthorsController().PostAuthor(newAu);
                bookDto.AuthorId = newAu.Id;
            }

            Book book = Mapper.Map <BookDetailDto, Book>(bookDto);

            book.Id = bookDto.Id;
            db.Entry(book).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!BookExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Ejemplo n.º 8
0
        private BookDetailDto addNewBookWithAllFields()
        {
            int           bookId  = GetMaxBookExternalId() + 1;
            BookDetailDto newBook = new BookDetailDto
            {
                Id          = bookId,
                Author      = "Ralls, Kim",
                Title       = "Integration testing",
                Price       = 100.1m,
                Genre       = "Genre",
                Description = "Description",
                PublishDate = DateTime.Now
            };

            db.Books.Add(newBook.ToModel());
            db.SaveChanges();
            return(newBook);
        }
        public async Task PutBook_ShouldReturnError_IfProvidedInvalidBookId()
        {
            int           bookId      = db.NextBookExternalId();
            BookDetailDto updatedBook = new BookDetailDto
            {
                Id          = bookId,
                Author      = "Ralls, Kim",
                Title       = "Testing title",
                Price       = 99.9m,
                Description = "abcde",
                Genre       = "new genre",
                PublishDate = new DateTime(2016, 9, 20, 10, 10, 10)
            };

            using (var client = NewHttpClient()) {
                var resp = await client.PutAsJsonAsync("books/" + bookId.ToString(), updatedBook);

                //Not sure this is the best Assertion
                Assert.AreEqual(System.Net.HttpStatusCode.InternalServerError, resp.StatusCode);
            }
        }
Ejemplo n.º 10
0
        public async Task <IHttpActionResult> GetBookDetail(int id)
        {
            BookDetailDto bookDetailDto = await db.Books.
                                          Where(x => x.BookId == id).
                                          Include(x => x.Author).
                                          Select(x => new BookDetailDto()
            {
                Author      = x.Author.Name,
                Description = x.Description,
                Genre       = x.Genre,
                Price       = x.Price,
                PublishDate = x.PublishDate,
                Title       = x.Title
            }).FirstOrDefaultAsync();

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

            return(Ok(bookDetailDto));
        }
Ejemplo n.º 11
0
        public IHttpActionResult PutBook(int id, [FromBody] BookDetailDto bookDeatil)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != bookDeatil.Id)
            {
                return(BadRequest());
            }

            var originalBook = db.Books.Single(b => b.ExternalId == bookDeatil.Id);

            var updatedBook = bookDeatil.ToModel();

            updatedBook.BookId = originalBook.BookId;
            db.Entry(originalBook).CurrentValues.SetValues(updatedBook);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!BookExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public async Task PutBook_ShouldUpdateBook_IfBookExistsInDatabase()
        {
            int           bookId       = db.AddNewBookWithAllFields(DateTime.Now).Id;
            BookDetailDto bookToUpdate = new BookDetailDto {
                Id          = bookId,
                Author      = "Ralls, Kim",
                Title       = "Testing title",
                Price       = 99.9m,
                Description = "abcde",
                Genre       = "new genre",
                PublishDate = new DateTime(2016, 9, 20, 10, 10, 10)
            };

            using (var client = NewHttpClient())
            {
                var resp = await client.PutAsJsonAsync("books/" + bookId.ToString(), bookToUpdate);

                resp.EnsureSuccessStatusCode();

                var updatedBook = db.GetDetailBookByExternalId(bookId);

                Assert.AreEqual <BookDetailDto>(bookToUpdate, updatedBook);
            }
        }
Ejemplo n.º 13
0
 private BookDto BookDetailToBook(BookDetailDto book)
 {
     return(new BookDto {
         Id = book.Id, Author = book.Author, Genre = book.Genre, Title = book.Title
     });
 }