/// <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());
        }
Example #2
0
        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));
            }
        }
Example #3
0
        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,
            });
        }