public async Task <IActionResult> PurchaseBook(string bookId) { if (bookId == null) { this.ShowErrorMessage(NotificationMessages.PurchaseErrorMessage); return(this.RedirectToAction("Index", "Home")); } var isPurchased = await this.purchasesService.UserHasPurchasedBookAsync(bookId, this.User.Identity.Name); if (isPurchased) { return(this.RedirectToAction("Details", "Books", new { id = bookId })); } var purchase = new PurchaseCreateServiceModel { BookId = bookId, PurchaseDate = DateTime.UtcNow, UserName = this.User.Identity.Name }; var isSuccess = await this.purchasesService.CreateAsync(purchase); if (!isSuccess) { this.ShowErrorMessage(NotificationMessages.PurchaseErrorMessage); return(this.RedirectToAction("Index", "Home")); } this.ShowSuccessMessage(NotificationMessages.PurchaseSuccessMessage); return(this.RedirectToAction("My")); }
public async Task CreateAsync_WithNonexistentUser_ReturnsFalse() { // Arrange var context = this.NewInMemoryDatabase(); var testBook = new Book(); await context.Books.AddAsync(testBook); await context.SaveChangesAsync(); var serviceModel = new PurchaseCreateServiceModel { UserName = "******", BookId = testBook.Id, PurchaseDate = DateTime.UtcNow }; var purchasesService = new PurchasesService(context); // Act var result = await purchasesService.CreateAsync(serviceModel); // Assert Assert.False(result); Assert.False(await context.Purchases.AnyAsync()); }
public async Task CreateAsync_WithNonexistentBook_ReturnsFalse() { // Arrange var context = this.NewInMemoryDatabase(); var testUser = new KnigaUser { UserName = "******" }; await context.Users.AddAsync(testUser); await context.SaveChangesAsync(); var serviceModel = new PurchaseCreateServiceModel { UserName = testUser.UserName, BookId = Guid.NewGuid().ToString(), PurchaseDate = DateTime.UtcNow }; var purchasesService = new PurchasesService(context); // Act var result = await purchasesService.CreateAsync(serviceModel); // Assert Assert.False(result); Assert.False(await context.Purchases.AnyAsync()); }
public async Task <bool> CreateAsync(PurchaseCreateServiceModel model) { if (!this.IsEntityStateValid(model)) { return(false); } var user = await this.Context.Users.SingleOrDefaultAsync(u => u.UserName == model.UserName); // Verify that the user exists, the book exists, and that the book has not already been purchased by the user if (user == null || !await this.Context.Books.AnyAsync(b => b.Id == model.BookId) || await this.Context.Purchases.AnyAsync(bt => bt.BookId == model.BookId && bt.UserId == user.Id)) { return(false); } var purchase = Mapper.Map <Purchase>(model); purchase.UserId = user.Id; await this.Context.Purchases.AddAsync(purchase); await this.Context.SaveChangesAsync(); return(true); }
public async Task CreateAsync_WithExistingPurchase_ReturnsFalse() { // Arrange var context = this.NewInMemoryDatabase(); var testUser = new KnigaUser { UserName = "******" }; var testBook = new Book(); await context.Books.AddAsync(testBook); await context.Users.AddAsync(testUser); var purchase = new Purchase { UserId = testUser.Id, BookId = testBook.Id, PurchaseDate = DateTime.UtcNow }; await context.Purchases.AddAsync(purchase); await context.SaveChangesAsync(); var serviceModel = new PurchaseCreateServiceModel { UserName = testUser.UserName, BookId = testBook.Id, PurchaseDate = DateTime.UtcNow }; var purchasesService = new PurchasesService(context); // Act var result = await purchasesService.CreateAsync(serviceModel); // Assert Assert.False(result); Assert.True(await context.Purchases.AnyAsync(p => p.User.UserName == testUser.UserName)); Assert.Equal(1, await context.Purchases.CountAsync()); }
public async Task CreateAsync_WithCorrectModel_WorksCorrectly() { // Arrange var context = this.NewInMemoryDatabase(); var testUser = new KnigaUser { UserName = "******" }; var testBook = new Book(); await context.Books.AddAsync(testBook); await context.Users.AddAsync(testUser); await context.SaveChangesAsync(); var serviceModel = new PurchaseCreateServiceModel { UserName = testUser.UserName, BookId = testBook.Id, PurchaseDate = DateTime.UtcNow }; var purchasesService = new PurchasesService(context); // Act var result = await purchasesService.CreateAsync(serviceModel); // Assert Assert.True(result); var purchase = await context.Purchases.SingleOrDefaultAsync(); Assert.NotNull(purchase); Assert.Equal(testUser.Id, purchase.UserId); Assert.Equal(testBook.Id, purchase.BookId); Assert.Equal(serviceModel.PurchaseDate, purchase.PurchaseDate); }