Beispiel #1
0
        public async Task EditMethodWhenBookExists_ShouldRedirectToEditPageWithBookModel()
        {
            var book = new Book();

            _bookService.Setup(mock => mock.GetBookByIdAsync(1)).ReturnsAsync(book);
            _bookService.Setup((mock => mock.getAuthors())).Returns(Task.FromResult(_authors));

            var result = await _booksController.Edit(1);

            var viewResult = result as ViewResult;
            var model      = viewResult.Model as Book;

            viewResult.ViewName.Should().Be("Edit");
            model.Should().BeEquivalentTo(book);
        }
Beispiel #2
0
        public void BookEditReturnsView()
        {
            ApplicationUser user = new ApplicationUser()
            {
                Id        = principal.Identity.GetUserId(),
                Email     = principal.Identity.GetUserName(),
                UserName  = principal.Identity.GetUserName(),
                FirstName = "User",
                LastName  = "Name"
            };

            dbContext.ApplicationUsers.Add(user);

            Book book = new Book()
            {
                Id   = 1,
                User = user,
                ApplicationUserId = principal.Identity.GetUserId(),
                Title             = "Thing Explainer",
                Isbn           = "9780544668256",
                TotalPageCount = 64,
                ThumbnailLink  = "http://books.google.com/books/content?id=T5xXrgEACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api"
            };

            dbContext.Books.Add(book);

            //Act
            ViewResult result = controller.Edit(1) as ViewResult;

            //Assert
            Assert.IsNotNull(result);
        }
        public async Task Edit_BookWithIdDoesntExist_ReturnsNotFoundView()
        {
            var book1 = new Book()
            {
                name  = "Higuraszki",
                genre = "Horrorek",
                year  = 2015
            };
            var book2 = new Book()
            {
                name  = "Wrobiona w magię",
                genre = "Fantasy",
                year  = 2018
            };

            var service = new Mock <IBookRepository>();

            service.Setup(x => x.GetBook(1)).ReturnsAsync(book1);
            service.Setup(x => x.GetBook(2)).ReturnsAsync(book2);
            var controller = new BooksController(service.Object);

            var result = await controller.Edit(2137, book1);

            var viewResult = (ViewResult)result;

            Assert.AreEqual("NotFound", viewResult.ViewName);
        }
        public async Task Edit_NewBookInfoValid_ReturnsRedirectToResultAction()
        {
            var book1 = new Book()
            {
                name  = "Higuraszki",
                genre = "Horrorek",
                year  = 2015
            };
            var book1Changed = new Book()
            {
                name  = "Higurashi",
                genre = "Horror",
                year  = 2015
            };

            var service = new Mock <IBookRepository>();

            service.Setup(x => x.GetBook(0)).ReturnsAsync(book1);
            service.Setup(x => x.BookExists(0)).Returns(true);

            var controller = new BooksController(service.Object);

            var result = await controller.Edit(0, book1Changed);

            Assert.IsInstanceOfType(result, typeof(RedirectToActionResult));
        }
        public async Task Edit_NewBookInfoInvalid_ReturnsObjectWithNewWrongData()
        {
            var book1 = new Book()
            {
                name  = "Higuraszki",
                genre = "Horrorek",
                year  = 2015
            };
            var book1Changed = new Book()
            {
                name  = "higurashi",
                genre = "horror",
                year  = 2015
            };

            var service = new Mock <IBookRepository>();

            service.Setup(x => x.GetBook(0)).ReturnsAsync(book1);
            service.Setup(x => x.BookExists(0)).Returns(true);

            var controller = new BooksController(service.Object);

            controller.ModelState.AddModelError("Nope", "Głupotę walnąłeś");

            var result = await controller.Edit(0, book1Changed);

            var viewResult = (ViewResult)result;
            var model      = (viewResult).Model as Book;

            Assert.AreEqual(book1Changed, model);
        }
Beispiel #6
0
        public async Task Edit_modifies_Book_and_redirects_to_Index_if_valid()
        {
            var userId        = "foxyboots9-guid";
            var mockDbContext = new MockContext();
            var controller    = new BooksController(mockDbContext.Object, () => userId);

            var originalBook = mockDbContext.MockBooks.Object.FirstOrDefault(b => b.ID == 21);
            var book         = new Book
            {
                ID     = originalBook.ID,
                Title  = originalBook.Title,
                Author = originalBook.Author,
                Genre  = originalBook.Genre,
                ISBN   = originalBook.ISBN,
                Rating = originalBook.Rating
            };

            controller.ModelState.Clear();
            var result = await controller.Edit(book) as RedirectToRouteResult;

            Assert.IsNotNull(result);
            Assert.AreEqual(result.RouteValues["action"], "Index");

            mockDbContext.Verify(m => m.SaveChangesAsync(), Times.AtLeastOnce());
        }
        public async Task Edit_BookIdExists_ReturnsSameBook()
        {
            var book1 = new Book()
            {
                name  = "Higuraszki",
                genre = "Horrorek",
                year  = 2015
            };
            var book2 = new Book()
            {
                name  = "Wrobiona w magię",
                genre = "Fantasy",
                year  = 2018
            };

            var service = new Mock <IBookRepository>();

            service.Setup(x => x.GetBook(1)).ReturnsAsync(book1);
            service.Setup(x => x.GetBook(2)).ReturnsAsync(book2);
            var controller = new BooksController(service.Object);

            var result = await controller.Edit(1);

            var viewResult = (ViewResult)result;
            var model      = (viewResult).Model as Book;

            Assert.AreEqual(book1, model);
        }
        public async Task Edit_BookExistsWithInvalidData_ReturnsSameModel()
        {
            var invalidBook = new Book()
            {
                id    = 0,
                name  = "costam",
                genre = "chcialbys",
                year  = 1999
            };
            var books = new List <Book>()
            {
                invalidBook
            };

            var service = new Mock <IBookRepository>();

            service.Setup(x => x.GetBook(0)).ReturnsAsync(invalidBook);
            var controller = new BooksController(service.Object);

            controller.ModelState.AddModelError("PogieloCie", "TakSieNieRobi");

            var result = await controller.Edit(0, invalidBook);

            var viewResult = (ViewResult)result;
            var model      = (viewResult).Model as Book;

            Assert.AreEqual(invalidBook, model);
        }
Beispiel #9
0
        public void BooksControllerEdit()
        {
            var booksController = new BooksController(null);

            var result = booksController.Edit(null);

            Assert.IsNotNull(result);
        }
Beispiel #10
0
        public void Edit_throws_NotFound_if_not_found()
        {
            var mockContext = new MockContext();
            var controller  = new BooksController(mockContext.Object);

            var httpException = Assert.ThrowsAsync <HttpException>(async() => await controller.Edit(-1));

            Assert.That(httpException.GetHttpCode(), Is.EqualTo((int)HttpStatusCode.NotFound));
        }
Beispiel #11
0
        public void Edit_throws_BadRequest_if_no_Id_passed()
        {
            var mockContext = new MockContext();
            var controller  = new BooksController(mockContext.Object);

            var httpException = Assert.ThrowsAsync <HttpException>(async() => await controller.Edit((int?)null));

            Assert.That(httpException.GetHttpCode(), Is.EqualTo((int)HttpStatusCode.BadRequest));
        }
        public void EditGetViewLoad()
        {
            //act
            ViewResult result = controller.Edit(101) as ViewResult;

            //assert
            Assert.AreEqual("Edit", result.ViewName);
        }
Beispiel #13
0
        public void Edit_throws_Forbidden_if_not_mine()
        {
            var userId        = "foxyboots9-guid";
            var mockDbContext = new MockContext();
            var controller    = new BooksController(mockDbContext.Object, () => userId);

            var httpException = Assert.ThrowsAsync <HttpException>(async() => await controller.Edit(4));

            Assert.That(httpException.GetHttpCode(), Is.EqualTo((int)HttpStatusCode.Forbidden));
        }
        public void Edit_ExistingBook_ShowsBookDetails()
        {
            // Given
            var context        = new Models.ApplicationDbContext();
            var bookController = new BooksController(context);

            // When
            var result = bookController.Edit(1);

            // Assert
        }
        public void Edit_ExistingBook_ShouldReturnOkObjectResult()
        {
            var book = new BookToEdit()
            {
                ISBN = "ABC123", Name = "Clean Code"
            };

            var result = _controller.Edit("1", book);

            result.ISBN.Should().Be(book.ISBN);
        }
Beispiel #16
0
        public void EditNoId()
        {
            // arrange
            int?id = null;

            // act
            var result = (ViewResult)controller.Edit(id);

            // assert
            Assert.AreEqual("Error", result.ViewName);
        }
Beispiel #17
0
        public void EditBookShouldNotSaveWhenBookIsInvalid()
        {
            var book = new Book();
            var mockedRepo = new Mock<IRepository>();
            var booksController = new BooksController(mockedRepo.Object);
            mockedRepo.Setup(repo => repo.Edit(book));
            booksController.ModelState.AddModelError("test error", "test exception");

            var result = (ViewResult)booksController.Edit(book);

            mockedRepo.Verify(repo => repo.Edit(book), Times.Never(), "failing model validation should prevent updating book");
            Assert.AreEqual("There were problems saving this book", booksController.TempData["flash"]);
        }
Beispiel #18
0
        public void Edit_ValidModelState_ReturnsRedirectToIndex()
        {
            // Arrange
            _mockRepo.Setup(repo => repo.GetAll()).Returns(GetTestData());
            _mockUnitOfWork.Setup(uow => uow.Books).Returns(_mockRepo.Object);
            var book = new BookViewModel()
            {
                BookId    = 1,
                Title     = "New Title",
                Publisher = "ABC Publisher",
                Language  = "English",
                ISBN      = "123456789"
            };

            // Act
            var result = _controller.Edit(book);

            // Assert
            var viewResult = Assert.IsType <RedirectToActionResult>(result);

            Assert.Equal("Index", viewResult.ActionName);
        }
        public async Task EditOnGet_WhenEntityExists_ReturnsViewResult()
        {
            //Arrange
            TestDbSeeder.Initialize(_db);
            TestDbSeeder.SeedBooks(_db);

            //Act
            var bookId = 1;
            var result = await _controller.Edit(bookId);

            //Assert
            var book = await _db.Books.FirstOrDefaultAsync(b => b.Id == bookId);

            Assert.NotNull(book);

            var viewResult = Assert.IsType <ViewResult>(result);
            var model      = Assert.IsAssignableFrom <BookViewModel>(viewResult.Model);

            Assert.Equal(book.Id, model.Id);
            Assert.Equal(book.Isbn, model.Isbn);
            Assert.Equal(book.Title, model.Title);
            Assert.Equal(book.Author, model.Author);
        }
Beispiel #20
0
        public void Edit()
        {
            // Lets create a valid book objct to add into
            Book editedBook = new Book {
                Id = 1, BookName = "Book1", Authorname = "John"
            };

            //Lets create a edit using controller
            controller.Edit(editedBook);

            List <Book> bookList = _booksRepo.GetAllBooks();

            CollectionAssert.Contains(bookList, editedBook);
        }
Beispiel #21
0
        public async Task Edit_returns_ViewResult_if_mine()
        {
            var userId        = "foxyboots9-guid";
            var mockDbContext = new MockContext();
            var controller    = new BooksController(mockDbContext.Object, () => userId);

            var result = await controller.Edit(21) as ViewResult;

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(Book), result.Model);

            var model = result.Model as Book;

            Assert.AreEqual(model.ID, 21);
        }
        public void EditBookShouldNotSaveWhenBookIsInvalid()
        {
            var book            = new Book();
            var bookInformation = new BookInformation(book);
            var mockedRepo      = new Mock <Repository>();
            var booksController = new BooksController(mockedRepo.Object);

            mockedRepo.Setup(repo => repo.Edit(book));
            booksController.ModelState.AddModelError("test error", "test exception");

            var result = (ViewResult)booksController.Edit(bookInformation);

            mockedRepo.Verify(repo => repo.Edit(book), Times.Never(), "failing model validation should prevent updating book");
            Assert.AreEqual("There were problems saving this book", booksController.TempData["flashError"]);
        }
Beispiel #23
0
        public void TestEditBooks()
        {
            var mock = new Mock <IBookService>();

            int id = 3;

            mock.Setup(m => m.GetBookById(It.Is <Int32>(i => i == id))).Returns(books.Find(b => b.BookId == id));

            BooksController controller = new BooksController(mock.Object);

            var result = controller.Edit(mock.Object.GetBookById(id)) as RedirectToRouteResult;

            Assert.AreEqual("Details", result.RouteValues["action"]);
            Assert.AreEqual(id, result.RouteValues["id"]);
        }
        public void ShouldUpdateBookOnEditPost()
        {
            var editedBook = new Book {
                Id = 1, Title = "A book"
            };
            var editedBookInformation = new BookInformation(editedBook);
            var mockedRepo            = GetMockedRepo();

            mockedRepo.Setup(repo => repo.Edit(editedBook));
            var booksController = new BooksController(mockedRepo.Object);

            var viewResult = (RedirectToRouteResult)booksController.Edit(editedBookInformation);

            mockedRepo.Verify(repo => repo.Edit <Book>(editedBook), Times.Once());
            Assert.AreEqual("Updated A book successfully", booksController.TempData["flashSuccess"]);
            Assert.AreEqual(1, viewResult.RouteValues["id"]);
        }
        public void ShouldReturnEditPageOnGetEdit()
        {
            var book = new Book {
                Id = 1, Title = "A book"
            };
            var mockedRepo = new Mock <Repository>();

            mockedRepo.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var booksController = new BooksController(mockedRepo.Object);

            var editABookView = booksController.Edit(1);
            var model         = (BookInformation)editABookView.Model;

            Assert.AreEqual("PUT", booksController.ViewBag.Method);
            Assert.AreEqual("Edit a Book", booksController.ViewBag.Title);
            Assert.AreEqual(book.Title, model.Model.Title);
        }
Beispiel #26
0
        public void TestEditMethod()
        {
            Books books = new Books {
                BookId = 1, BookTitle = "Harry Porter", Price = 10
            };

            //Mock IRepository of books
            Mock <IRepository <Books> > mockBooksController = new Mock <IRepository <Books> >();

            mockBooksController.Setup(b => b.Update(It.IsAny <Books>())).Callback <Books>(s => books = s);

            //Pass in the IRepository books
            BooksController booksController = new BooksController(mockBooksController.Object);
            var             result          = booksController.Edit(books) as RedirectToRouteResult;

            Assert.AreEqual(result.RouteValues["action"], "Index");
        }
Beispiel #27
0
        public void TestDeleteMethod()
        {
            Books book = new Books {
                BookId = 1, BookTitle = "Harry Porter", Price = 10
            };

            //Mock IRepository of books
            Mock <IRepository <Books> > mockBooksController = new Mock <IRepository <Books> >();

            mockBooksController.Setup(b => b.GetByID(It.IsAny <int>())).Returns(book);

            //Pass in the IRepository books
            BooksController booksController = new BooksController(mockBooksController.Object);
            ViewResult      result          = booksController.Edit(1) as ViewResult;

            Assert.AreEqual(book, result.Model);
        }
        public void ShouldEditBookWhenIsbnIsNull()
        {
            var book = new Book {
                Id = 1, Isbn = null
            };
            var mockedRepo = new Mock <Repository>();

            mockedRepo.Setup(repo => repo.Search(It.IsAny <Expression <Func <Book, bool> > >()))
            .Returns(new List <Book> {
                book
            });
            mockedRepo.Setup(repo => repo.Edit(book));
            var booksController = new BooksController(mockedRepo.Object);

            booksController.Edit(new BookInformation(book));

            mockedRepo.Verify(repo => repo.Edit(book), Times.Once());
        }
        public void Books_Edit_Post()
        {
            // Arrange
            Source source  = GetTestSource();
            var    sources = GetTestSourceSet();
            Book   book    = GetTestBook(source);
            var    db      = new Mock <IPersonalInformationManagerContext>();

            db.Setup(e => e.Sources).Returns(sources);
            db.Setup(e => e.SetModified(It.IsAny <Book>()));
            db.Setup(e => e.SaveChanges()).Returns(1);
            BooksController controller = new BooksController(db.Object);

            // Act
            var result = (RedirectToRouteResult)controller.Edit(book, null);

            // Assert
            Assert.AreEqual("Index", result.RouteValues["action"]);
        }
        public void ShouldUpdateBookOnEditPostWithIsbnUnchanged()
        {
            var bookforEditing = new Book {
                Id = 1, Title = "A book", Isbn = "11111"
            };
            var mockedRepo    = new Mock <Repository>();
            var existingBooks = new List <Book> {
                bookforEditing
            };

            mockedRepo.Setup(repo => repo.Search(It.IsAny <Expression <Func <Book, bool> > >()))
            .Returns((Expression <Func <Book, bool> > predicate) => existingBooks.Where(predicate.Compile()).ToList());
            bookforEditing.Title = "Changed Book Name";
            var booksController = new BooksController(mockedRepo.Object);

            booksController.Edit(new BookInformation(bookforEditing));

            mockedRepo.Verify(repo => repo.Edit(bookforEditing), Times.Once(), "Book Should be Edited");
        }
Beispiel #31
0
        public async Task Edit_returns_Edit_view_if_model_invalid()
        {
            var userId        = "foxyboots9-guid";
            var mockDbContext = new MockContext();
            var controller    = new BooksController(mockDbContext.Object, () => userId);

            var book = mockDbContext.MockBooks.Object.FirstOrDefault(b => b.ID == 43);

            book.Title = null;

            controller.ModelState.AddModelError("Title", "Title is required");
            var result = await controller.Edit(book) as ViewResult;

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(Book), result.Model);
            Assert.AreEqual(book, result.Model);

            mockDbContext.Verify(m => m.SetModified(It.IsAny <Book>()), Times.Never());
            mockDbContext.Verify(m => m.SaveChangesAsync(), Times.Never());
        }
Beispiel #32
0
        public void ShouldUpdateBookOnEditPost()
        {
            var editedBook = new Book { Id = 1, Title = "A book" };
            var mockedRepo = new Mock<IRepository>();
            mockedRepo.Setup(repo => repo.Edit(editedBook));
            var booksController = new BooksController(mockedRepo.Object);

            var viewResult = (RedirectToRouteResult)booksController.Edit(editedBook);

            mockedRepo.Verify(repo => repo.Edit<Book>(editedBook), Times.Once());
            Assert.AreEqual("Updated A book successfully", booksController.TempData["flash"]);
            Assert.AreEqual(1, viewResult.RouteValues["id"]);
        }
Beispiel #33
0
        public void ShouldReturnEditPageOnGetEdit()
        {
            var book = new Book { Id = 1, Title = "A book" };
            var mockedRepo = new Mock<IRepository>();
            mockedRepo.Setup(repo => repo.Get<Book>(book.Id)).Returns(book);
            var booksController = new BooksController(mockedRepo.Object);

            var editABookView = booksController.Edit(1);
            var model = (Book)editABookView.Model;

            Assert.AreEqual("Edit a Book", booksController.ViewBag.Title);
            Assert.AreEqual(book.Title, model.Title);
        }
        public void ShouldEditBookWhenIsbnIsNull()
        {
            var book = new Book { Id = 1, Isbn = null };
            var mockedRepo = new Mock<Repository>();
            mockedRepo.Setup(repo => repo.Search(It.IsAny<Expression<Func<Book, bool>>>()))
                .Returns(new List<Book> { book });
            mockedRepo.Setup(repo => repo.Edit(book));
            var booksController = new BooksController(mockedRepo.Object);

            booksController.Edit(new BookInformation(book));

            mockedRepo.Verify(repo => repo.Edit(book), Times.Once());
        }
        public void ShouldNotUpdateBookOnEditPostIfIsbnIsChangedAndIsDuplicate()
        {
            const string isbnForAlreadyExistingBook = "12345";
            var bookforEditing = new Book { Id = 1, Title = "A book", Isbn = "11111" };
            var bookAlreadyExistingInDb = new Book { Id = 2, Title = "Another book", Isbn = isbnForAlreadyExistingBook};
            var mockedRepo = new Mock<Repository>();
            mockedRepo.Setup(repo => repo.Search(It.IsAny<Expression<Func<Book, bool>>>()))
                .Returns(new List<Book> { bookAlreadyExistingInDb, bookforEditing });
            bookforEditing.Isbn = isbnForAlreadyExistingBook;
            var booksController = new BooksController(mockedRepo.Object);

            booksController.Edit(new BookInformation(bookforEditing));

            mockedRepo.Verify(repo => repo.Edit(bookforEditing), Times.Never(), "A book whose ISBN number is edited and duplicates an already existing ISBN number should not be saved to the database");
            Assert.AreEqual("The Book Edit was not saved because the provided ISBN number already exists", booksController.TempData["flashError"], "should return the error message in the model");
        }
        public void ShouldUpdateBookOnEditPostWithIsbnUnchanged()
        {
            var bookforEditing = new Book { Id = 1, Title = "A book", Isbn = "11111" };
            var mockedRepo = new Mock<Repository>();
            var existingBooks = new List<Book> {bookforEditing};
            mockedRepo.Setup(repo => repo.Search(It.IsAny<Expression<Func<Book, bool>>>()))
                .Returns((Expression<Func<Book, bool>> predicate) => existingBooks.Where(predicate.Compile()).ToList());
            bookforEditing.Title = "Changed Book Name";
            var booksController = new BooksController(mockedRepo.Object);

            booksController.Edit(new BookInformation(bookforEditing));

            mockedRepo.Verify(repo => repo.Edit(bookforEditing), Times.Once(), "Book Should be Edited");
        }