/// <summary> /// Creates a new instance of cocktail rating. /// </summary> /// <param name="rating">The rating that should be created</param> /// <returns>Data transfer object of the created instance of the rating</returns> public async Task <CocktailRatingDTO> CreateRating(CocktailRatingDTO rating) { var user = await this.context.Users.FirstOrDefaultAsync(u => u.Id == rating.UserId); if (user == null) { throw new ArgumentNullException(Exceptions.NullEntityId); } var cocktatil = await this.context.Cocktails.FirstOrDefaultAsync(c => c.Id == rating.CocktailId); if (cocktatil == null) { throw new ArgumentNullException(Exceptions.NullEntityId); } var newRating = rating.GetEntity(); cocktatil.RatedCount++; cocktatil.RatingSum += rating.Rating; cocktatil.AverageRating = cocktatil.RatingSum / cocktatil.RatedCount; this.context.Users.Update(user); this.context.Cocktails.Update(cocktatil); await this.context.CocktailRatings.AddAsync(newRating); await this.context.SaveChangesAsync(); return(newRating.GetDTO()); }
public async Task CreateRating_CreatesCorrect_WhenParamsAre_Valid() { //Arrange var options = Utils.GetOptions(nameof(CreateRating_CreatesCorrect_WhenParamsAre_Valid)); var cocktail = new Cocktail { Id = Guid.NewGuid(), Name = "Manhattan" }; var user = new User { Id = Guid.NewGuid(), UserName = "******" }; var cocktailRatingDTO = new CocktailRatingDTO { CocktailId = cocktail.Id, UserId = user.Id }; using (var arrangeContext = new CMContext(options)) { await arrangeContext.Users.AddAsync(user); await arrangeContext.Cocktails.AddAsync(cocktail); await arrangeContext.SaveChangesAsync(); } //Act, Assert using (var assertContext = new CMContext(options)) { var sut = new CoktailRatingServices(assertContext); var result = await sut.CreateRating(cocktailRatingDTO); Assert.AreEqual(1, assertContext.CocktailRatings.Count()); Assert.AreEqual("Manhattan", result.Cocktail.Name); Assert.AreEqual("Ivan", result.User.UserName); } }
public async Task CreateRating_Throws_WhenNoBarFound() { //Arrange var options = Utils.GetOptions(nameof(CreateRating_Throws_WhenNoBarFound)); var cocktail = new Cocktail { Id = Guid.NewGuid(), Name = "Manhattan" }; var user = new User { Id = Guid.NewGuid(), UserName = "******" }; var cocktailId = Guid.NewGuid(); var cocktailRatingDTO = new CocktailRatingDTO { CocktailId = cocktailId, UserId = user.Id }; using (var arrangeContext = new CMContext(options)) { await arrangeContext.Users.AddAsync(user); await arrangeContext.Cocktails.AddAsync(cocktail); await arrangeContext.SaveChangesAsync(); } //Act, Assert using (var assertContext = new CMContext(options)) { var sut = new CoktailRatingServices(assertContext); await Assert.ThrowsExceptionAsync <ArgumentNullException>(() => sut.CreateRating(cocktailRatingDTO)); } }
public static CocktailRatingViewModel GetViewModel(this CocktailRatingDTO item) { if (item == null) { throw new ArgumentNullException(); } return(new CocktailRatingViewModel { CocktailId = item.CocktailId, UserId = item.UserId, Rating = item.Rating, }); }
public static CocktailRating GetEntity(this CocktailRatingDTO rating) { if (rating == null) { throw new ArgumentNullException(); } return(new CocktailRating { Cocktail = rating.Cocktail, CocktailId = rating.CocktailId, User = rating.User, UserId = rating.UserId, Rating = rating.Rating, }); }