/// <summary> /// Creates a new instance of bar 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 <BarRatingDTO> CreateRating(BarRatingDTO rating) { var user = await this.context.Users.FirstOrDefaultAsync(u => u.Id == rating.UserId); if (user == null) { throw new ArgumentNullException(Exceptions.NullEntityId); } var bar = await this.context.Bars.FirstOrDefaultAsync(c => c.Id == rating.BarId); if (bar == null) { throw new ArgumentNullException(Exceptions.NullEntityId); } var newRating = rating.GetEntity(); bar.RatedCount++; bar.RatingSum += rating.Rating; bar.AverageRating = bar.RatingSum / bar.RatedCount; this.context.Users.Update(user); this.context.Bars.Update(bar); await this.context.AddAsync(newRating); await this.context.SaveChangesAsync(); return(newRating.GetDTO()); }
public async Task CreateRating_Throws_WhenNoBarFound() { //Arrange var options = Utils.GetOptions(nameof(CreateRating_Throws_WhenNoBarFound)); var bar = new Bar { Id = Guid.NewGuid(), Name = "Manhattan" }; var user = new User { Id = Guid.NewGuid(), UserName = "******" }; var barId = Guid.NewGuid(); var barRatingDTO = new BarRatingDTO { BarId = barId, UserId = user.Id }; using (var arrangeContext = new CMContext(options)) { await arrangeContext.Users.AddAsync(user); await arrangeContext.Bars.AddAsync(bar); await arrangeContext.SaveChangesAsync(); } //Act, Assert using (var assertContext = new CMContext(options)) { var sut = new BarRatingServices(assertContext); await Assert.ThrowsExceptionAsync <ArgumentNullException>(() => sut.CreateRating(barRatingDTO)); } }
public async Task CreateRating_CreatesCorrect_WhenParamsAre_Valid() { //Arrange var options = Utils.GetOptions(nameof(CreateRating_CreatesCorrect_WhenParamsAre_Valid)); var bar = new Bar { Id = Guid.NewGuid(), Name = "Manhattan" }; var user = new User { Id = Guid.NewGuid(), UserName = "******" }; var barRatingDTO = new BarRatingDTO { BarId = bar.Id, UserId = user.Id }; using (var arrangeContext = new CMContext(options)) { await arrangeContext.Users.AddAsync(user); await arrangeContext.Bars.AddAsync(bar); await arrangeContext.SaveChangesAsync(); } //Act, Assert using (var assertContext = new CMContext(options)) { var sut = new BarRatingServices(assertContext); var result = await sut.CreateRating(barRatingDTO); Assert.AreEqual(1, assertContext.BarRatings.Count()); Assert.AreEqual("Manhattan", result.Bar.Name); Assert.AreEqual("Ivan", result.User.UserName); } }
public static BarRatingViewModel GetViewModel(this BarRatingDTO item) { if (item == null) { throw new ArgumentNullException(); } return(new BarRatingViewModel { BarId = item.BarId, UserId = item.UserId, Rating = item.Rating, }); }
public static BarRating GetEntity(this BarRatingDTO rating) { if (rating == null) { throw new ArgumentNullException(); } return(new BarRating { Bar = rating.Bar, BarId = rating.BarId, User = rating.User, UserId = rating.UserId, Rating = rating.Rating, }); }