Beispiel #1
0
        public async Task ThrowInvalidOperationException_When_NoRatingIsGiven()
        {
            var options = TestUtilities.GetOptions(nameof(ThrowInvalidOperationException_When_NoRatingIsGiven));

            var barReviewTest = new BarReview()
            {
                Bar       = barForTest,
                BarId     = barForTest.BarId,
                Comment   = "Message",
                CreatedOn = DateTime.MinValue,
                Grade     = 0d,
                User      = userForTests,
                UserId    = userForTests.Id
            };

            //using (var arrangeContext = new CMContext(options))
            //{
            //    arrangeContext.Bars.Add(barForTest);
            //    arrangeContext.Users.Add(userForTests);
            //    await arrangeContext.SaveChangesAsync();
            //}

            using (var assertContext = new CMContext(options))
            {
                var sut = new BarManager(assertContext, cocktailManagerMoq.Object, barFactoryMoq.Object);

                await Assert.ThrowsExceptionAsync <InvalidOperationException>(() => sut.CreateBarReviewAsync(barReviewTest.ToDTO()));
            }
        }
        public async Task SetsNewRating_WhenValidModelIsPassed()
        {
            var options = TestUtils.GetOptions(nameof(SetsNewRating_WhenValidModelIsPassed));
            var user    = new AppUser {
                Id = "1"
            };
            var bar = new Bar {
                Id = "2"
            };
            var barReviewDTO = new BarReviewDTO
            {
                Rating      = 8,
                Description = "10",
                UserID      = "1",
                BarId       = "2"
            };
            var review = new BarReview {
                Rating = 10, Description = "0100101", BarId = "2"
            };

            using (var arrangeContext = new CMContext(options))
            {
                var sut = new ReviewServices(arrangeContext);
                arrangeContext.Add(user);
                arrangeContext.Add(bar);
                arrangeContext.Add(review);
                await arrangeContext.SaveChangesAsync();

                await sut.CreateBarReview(barReviewDTO);

                Assert.AreEqual(9, arrangeContext.Bars.First().BarRating);
            }
        }
Beispiel #3
0
        public async Task ShowCorrectMessage_When_ThrowsInvalidOperationException()
        {
            var options = TestUtilities.GetOptions(nameof(ShowCorrectMessage_When_ThrowsInvalidOperationException));

            var message       = "Cannot comment a Bar without giving it a rating!";
            var barReviewTest = new BarReview()
            {
                Bar       = barForTest,
                BarId     = barForTest.BarId,
                Comment   = "Message",
                CreatedOn = DateTime.MinValue,
                Grade     = 0d,
                User      = userForTests,
                UserId    = userForTests.Id
            };

            using (var arrangeContext = new CMContext(options))
            {
                arrangeContext.Bars.Add(barForTest);
                arrangeContext.Users.Add(userForTests);
                await arrangeContext.SaveChangesAsync();
            }

            using (var assertContext = new CMContext(options))
            {
                var sut = new BarManager(assertContext, cocktailManagerMoq.Object, barFactoryMoq.Object);

                var ex = await Assert.ThrowsExceptionAsync <InvalidOperationException>(() => sut.CreateBarReviewAsync(barReviewTest.ToDTO()));

                Assert.AreEqual(message, ex.Message);
            }
        }
Beispiel #4
0
        public void ThrowWhenIdIsNotFound()
        {
            var options  = TestUtilities.GetOptions(nameof(ThrowWhenIdIsNotFound));
            int resultId = -1;
            var review1  = new BarReview
            {
                Id    = resultId,
                BarId = 1,
            };
            var review2 = new BarReview
            {
                Id    = -2,
                BarId = 1,
            };
            var review3 = new BarReview
            {
                Id    = -3,
                BarId = 2,
            };

            using (var actContext = new CocktailDB(options))
            {
                actContext.AddAsync(review1).GetAwaiter();
                actContext.AddAsync(review2).GetAwaiter();
                actContext.AddAsync(review3).GetAwaiter();
                actContext.SaveChangesAsync().GetAwaiter();
            }
            using (var assertContext = new CocktailDB(options))
            {
                var sut = new BarReviewServices(assertContext);
                Assert.ThrowsExceptionAsync <ArgumentNullException>(
                    () => sut.DeleteAsync(int.MaxValue));
            }
        }
        public async Task RemoveLikeBarReview_WhenValidBarIdIsPassed()
        {
            var options = TestUtils.GetOptions(nameof(RemoveLikeBarReview_WhenValidBarIdIsPassed));
            var bar     = new Bar {
                Id = "2"
            };
            var user = new AppUser {
                Id = "1"
            };
            var review1 = new BarReview {
                Id = "1", Rating = 6, Description = "0100101", BarId = "2"
            };
            var review2 = new BarReview {
                Id = "2", Rating = 10, Description = "0100101", BarId = "2"
            };
            var like1 = new BarReviewLike {
                Id = "1", BarReviewID = "1", AppUserID = "1"
            };

            //var like2 = new BarReviewLike { Id = "2", BarReviewID = "2", AppUserID="1" };
            using (var arrangeContext = new CMContext(options))
            {
                var sut = new ReviewServices(arrangeContext);
                arrangeContext.Add(bar);
                arrangeContext.Add(user);
                arrangeContext.Add(review1);
                arrangeContext.Add(like1);
                await arrangeContext.SaveChangesAsync();

                Assert.AreEqual(1, arrangeContext.BarReviewLikes.Count());
                await sut.RemoveBarReviewLike(review1.Id, user.Id);

                Assert.AreEqual(0, arrangeContext.BarReviewLikes.Count());
            }
        }
Beispiel #6
0
        public async Task SetsNewRating_WhenValidBarIdIsPassed()
        {
            var options = TestUtils.GetOptions(nameof(SetsNewRating_WhenValidBarIdIsPassed));

            var bar = new Bar {
                Id = "2"
            };
            var Bar = new Bar
            {
                Id = "1"
            };
            var review1 = new BarReview {
                Rating = 6, Description = "0100101", BarId = "2"
            };
            var review2 = new BarReview {
                Rating = 10, Description = "0100101", BarId = "2"
            };


            using (var arrangeContext = new CMContext(options))
            {
                var sut = new ReviewServices(arrangeContext);
                arrangeContext.Add(bar);
                arrangeContext.Add(review1);
                arrangeContext.Add(review2);
                await arrangeContext.SaveChangesAsync();

                await sut.SetAverrageRatingForBar("2");

                Assert.AreEqual(8, arrangeContext.Bars.First().BarRating);
            }
        }
        public async Task ThrowException_WhenLikeDoesntExist()
        {
            var options = TestUtils.GetOptions(nameof(ThrowException_WhenLikeDoesntExist));

            var bar = new Bar {
                Id = "2"
            };
            var user = new AppUser {
                Id = "1"
            };
            var review1 = new BarReview {
                Id = "1", Rating = 6, Description = "0100101", BarId = "2"
            };
            //var review2 = new BarReview { Id = "2", Rating = 10, Description = "0100101", BarId = "2" };
            var like1 = new BarReviewLike {
                Id = "1", BarReviewID = "1", AppUserID = "1"
            };

            //var like2 = new BarReviewLike { Id = "2", BarReviewID = "2", AppUserID="1" };
            using (var arrangeContext = new CMContext(options))
            {
                var sut = new ReviewServices(arrangeContext);
                arrangeContext.Add(bar);
                arrangeContext.Add(user);
                arrangeContext.Add(review1);
                //arrangeContext.Add(review2);
                //arrangeContext.Add(like1);
                await arrangeContext.SaveChangesAsync();

                var ex = await Assert.ThrowsExceptionAsync <MagicException>(
                    async() => await sut.RemoveBarReviewLike(review1.Id, user.Id)
                    );
            }
        }
        public async Task <IActionResult> Edit(Guid id, [Bind("Id,BarId,UserId,Rating,Comment,DeletedOn,ReviewedOn")] BarReview barReview)
        {
            if (id != barReview.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(barReview);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!BarReviewExists(barReview.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["BarId"]  = new SelectList(_context.Bars, "Id", "Address", barReview.BarId);
            ViewData["UserId"] = new SelectList(_context.Users, "Id", "Email", barReview.UserId);
            return(View(barReview));
        }
        public void ReturnNullWhenBarIdIsNotFound()
        {
            var options = TestUtilities.GetOptions(nameof(ReturnNullWhenBarIdIsNotFound));
            var review1 = new BarReview
            {
                Id    = -1,
                BarId = 1,
            };
            var review2 = new BarReview
            {
                Id    = -2,
                BarId = 1,
            };
            var review3 = new BarReview
            {
                Id    = -3,
                BarId = 2,
            };

            using (var actContext = new CocktailDB(options))
            {
                actContext.AddAsync(review1).GetAwaiter();
                actContext.AddAsync(review2).GetAwaiter();
                actContext.AddAsync(review3).GetAwaiter();
                actContext.SaveChangesAsync().GetAwaiter();
            }
            using (var assertContext = new CocktailDB(options))
            {
                var sut    = new BarReviewServices(assertContext);
                var result = sut.GetBarReviewsCollectionAsync(int.MaxValue).GetAwaiter().GetResult();
                Assert.AreEqual(0, result.Count);
            }
        }
        public async Task ThrowExceptionWithCorrectMessage_WhenUserAlreadyReviewedBar()
        {
            var options = TestUtils.GetOptions(nameof(ThrowExceptionWithCorrectMessage_WhenUserAlreadyReviewedBar));
            var user    = new AppUser {
                Id = "1"
            };
            var bar = new Bar {
                Id = "2"
            };
            var barReviewDTO = new BarReviewDTO
            {
                Rating      = 10,
                Description = "10",
                UserID      = "1",
                BarId       = "2"
            };
            var review = new BarReview {
                Rating = 5, Description = "0100101", UserId = "1", BarId = "2"
            };

            using (var arrangeContext = new CMContext(options))
            {
                var sut = new ReviewServices(arrangeContext);
                arrangeContext.Add(user);
                arrangeContext.Add(bar);
                arrangeContext.Add(review);
                await arrangeContext.SaveChangesAsync();

                var ex = await Assert.ThrowsExceptionAsync <MagicException>(
                    async() => await sut.CreateBarReview(barReviewDTO)
                    );

                Assert.AreEqual("You have already reviewed this bar!", ex.Message);
            }
        }
Beispiel #11
0
        public void CorrectlyDeleteReview()
        {
            var options  = TestUtilities.GetOptions(nameof(CorrectlyDeleteReview));
            int resultId = -1;
            var review1  = new BarReview
            {
                Id    = resultId,
                BarId = 1,
            };
            var review2 = new BarReview
            {
                Id    = -2,
                BarId = 1,
            };
            var review3 = new BarReview
            {
                Id    = -3,
                BarId = 2,
            };

            using (var actContext = new CocktailDB(options))
            {
                actContext.AddAsync(review1).GetAwaiter();
                actContext.AddAsync(review2).GetAwaiter();
                actContext.AddAsync(review3).GetAwaiter();
                actContext.SaveChangesAsync().GetAwaiter();
            }
            using (var assertContext = new CocktailDB(options))
            {
                var sut = new BarReviewServices(assertContext);
                sut.DeleteAsync(resultId).GetAwaiter();
                Assert.IsFalse(assertContext.BarReviews.Contains(review1));
            }
        }
Beispiel #12
0
        public async Task <IActionResult> Review(BarReview barReview, int id)
        {
            var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

            await this.userService.AddBarReview(barReview, id, userId);

            return(RedirectToAction("Index", "Bars"));
        }
 private BarReviewDTO ProjectToViewModel(BarReview r)
 {
     return(new BarReviewDTO
     {
         Id = r.Id,
         Comment = r.Comment,
         Rating = r.Rating,
         Username = r.User.UserName,
         DatePosted = GetPostTimelapse(r.DatePosted)
     });
 }
Beispiel #14
0
        public static BarReview MapDTOToReview(this BarReviewDTO reviewDTO)
        {
            var newReview = new BarReview();

            newReview.BarId       = reviewDTO.BarId;
            newReview.Description = reviewDTO.Description;
            newReview.Rating      = reviewDTO.Rating;
            newReview.UserId      = reviewDTO.UserID;
            newReview.ReviewDate  = DateTime.Now;
            return(newReview);
        }
        public static BarReview BarReviewDTOMapToModel(this BarReviewDTO barReviewDTO)
        {
            var barReview = new BarReview();

            barReview.BarId      = barReviewDTO.BarId;
            barReview.UserId     = barReviewDTO.UserId;
            barReview.Rating     = barReviewDTO.Rating;
            barReview.Comment    = barReviewDTO.Comment;
            barReview.ReviewedOn = DateTime.UtcNow;

            return(barReview);
        }
Beispiel #16
0
        public BarReview Create(string comment, int?rating, string userId, int barId)
        {
            var review = new BarReview
            {
                Comment = comment,
                Rating  = rating,
                UserId  = userId,
                BarId   = barId
            };

            return(review);
        }
        public static BarReview ToEntity(this BarReviewDTO barReviewDTO)
        {
            var barReview = new BarReview
            {
                UserId    = barReviewDTO.UserId,
                BarId     = barReviewDTO.BarId,
                Grade     = barReviewDTO.Grade,
                Comment   = barReviewDTO.Comment,
                CreatedOn = barReviewDTO.DateCreated
            };

            return(barReview);
        }
        public async Task <IActionResult> Create([Bind("Id,BarId,UserId,Rating,Comment,DeletedOn,ReviewedOn")] BarReview barReview)
        {
            if (ModelState.IsValid)
            {
                barReview.Id = Guid.NewGuid();
                _context.Add(barReview);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["BarId"]  = new SelectList(_context.Bars, "Id", "Address", barReview.BarId);
            ViewData["UserId"] = new SelectList(_context.Users, "Id", "Email", barReview.UserId);
            return(View(barReview));
        }
        public static BarReviewDTO ToDTO(this BarReview barReview)
        {
            var barReviewDTO = new BarReviewDTO
            {
                UserId      = barReview.UserId,
                BarId       = barReview.BarId,
                Comment     = barReview.Comment,
                Grade       = barReview.Grade,
                UserName    = barReview.User.UserName,
                UserPicture = barReview.User.Picture,
                DateCreated = barReview.CreatedOn
            };

            return(barReviewDTO);
        }
        public static BarReviewEntity ToEntity(this BarReview contract)
        {
            if (contract == null)
            {
                return(null);
            }

            return(new BarReviewEntity
            {
                UserEntityId = contract.User?.Id,
                BarEntityId = contract.Bar?.Id ?? 0,
                Rating = contract.Rating,
                Review = contract.Review
            });
        }
        public async Task <BarReviewDTO> CreateBarReviewAsync(Guid barId, Guid userId, int rating, string comment)
        {
            var barReviewExists = await _cmContext.BarReviews.AnyAsync(br => br.UserId == userId && br.BarId == barId && br.DeletedOn == null);

            if (barReviewExists)
            {
                throw new ArgumentException("This bar has already been reviewed by the user");
            }

            var bar = await _cmContext.Bars.Where(b => b.Id == barId && b.UnlistedOn == null).FirstOrDefaultAsync();

            if (bar == null)
            {
                throw new ArgumentNullException("Bar is not available.");
            }

            var userExists = await _cmContext.Users.AnyAsync(u => u.Id == userId && u.DeletedOn == null);

            if (!userExists)
            {
                throw new ArgumentNullException("User is not available");
            }
            if (rating < 1 || rating > 5)
            {
                throw new ArgumentOutOfRangeException("Rating must be bewtween 1 and 5.");
            }
            var barReview = new BarReview();

            barReview.BarId      = barId;
            barReview.UserId     = userId;
            barReview.Rating     = rating;
            barReview.Comment    = comment;
            barReview.ReviewedOn = DateTime.UtcNow;
            try
            {
                bar.AvgRating = await this.CalculateAvgRating(barId, rating);

                _cmContext.BarReviews.Add(barReview);
                await _cmContext.SaveChangesAsync();
            }
            catch (Exception)
            {
                throw;
            }
            var barReviewDTO = barReview.BarMapReviewDTO();

            return(barReviewDTO);
        }
        public static BarReviewDTO BarMapReviewDTO(this BarReview barReview)
        {
            var barReviewDTO = new BarReviewDTO();

            barReviewDTO.Id             = barReview.Id;
            barReviewDTO.BarId          = barReview.BarId;
            barReviewDTO.UserId         = barReview.UserId;
            barReviewDTO.Rating         = barReview.Rating;
            barReviewDTO.Comment        = barReview.Comment;
            barReviewDTO.ReviewedOn     = barReview.ReviewedOn;
            barReviewDTO.BarName        = barReview.Bar.Name;
            barReviewDTO.UserName       = barReview.User.UserName;
            barReviewDTO.BarReviewLikes = barReview.BarReviewLikes;

            return(barReviewDTO);
        }
Beispiel #23
0
        public static BarReviewDTO BarMapReviewToDTO(this BarReview review)
        {
            var newReviewDTO = new BarReviewDTO();

            newReviewDTO.Id           = review.Id;
            newReviewDTO.BarId        = review.BarId;
            newReviewDTO.Description  = review.Description;
            newReviewDTO.UserName     = review.User.UserName;
            newReviewDTO.BarName      = review.Bar.Name;
            newReviewDTO.UserID       = review.UserId;
            newReviewDTO.Rating       = review.Rating;
            newReviewDTO.ReviewDate   = review.ReviewDate;
            newReviewDTO.LikeCount    = review.BarReviewLikes.Count;
            newReviewDTO.LikedByUsers = review.BarReviewLikes.Select(b => b.AppUserID).ToList();
            return(newReviewDTO);
        }
        public async Task <BarReview> AddBarReview(BarReview review, int barId, string userId)
        {
            var bar = await this.context.Bars.Where(x => x.Id == barId).SingleOrDefaultAsync();

            bar.Rating = await this.barService.CalculateAverageRating(bar.ToContract(), review.Rating);

            var reviewEntity = review.ToEntity();

            reviewEntity.BarEntityId  = barId;
            reviewEntity.UserEntityId = userId;

            await this.context.BarReviews.AddAsync(reviewEntity);

            this.context.Bars.Update(bar);
            await this.context.SaveChangesAsync();

            return(reviewEntity.ToContract());
        }
Beispiel #25
0
        public GetBarForDetails_Should()
        {
            barForTest = new Bar()
            {
                BarId         = "One",
                Address       = "Solunska 2",
                Information   = "Information",
                MapDirections = "Go south",
                Name          = "Bar",
                Picture       = "Picture"
            };

            user = new User()
            {
                Id       = "One",
                UserName = "******"
            };

            cocktail = new Cocktail()
            {
                Id   = "One",
                Name = "Cocktail"
            };

            barCocktail = new BarCocktail()
            {
                BarId      = barForTest.BarId,
                Bar        = barForTest,
                CocktailId = cocktail.Id,
                Cocktail   = cocktail
            };

            barReview = new BarReview()
            {
                BarId     = barForTest.BarId,
                Bar       = barForTest,
                Comment   = "Comment",
                CreatedOn = DateTime.MinValue,
                Grade     = 5d,
                UserId    = user.Id,
                User      = user
            };
        }
        public async Task GetCorrectCountOfLikes_WhenValidParamethersArePassed()
        {
            var options = TestUtils.GetOptions(nameof(GetCorrectCountOfLikes_WhenValidParamethersArePassed));

            var bar = new Bar {
                Id = "2"
            };
            var user = new AppUser {
                Id = "1"
            };
            var user2 = new AppUser {
                Id = "2"
            };
            var review1 = new BarReview {
                Id = "1", Rating = 6, Description = "0100101", BarId = "2"
            };
            //var review2 = new BarReview { Id = "2", Rating = 10, Description = "0100101", BarId = "2" };
            var like1 = new BarReviewLike {
                Id = "1", BarReviewID = "1", AppUserID = "1"
            };
            var like2 = new BarReviewLike {
                Id = "2", BarReviewID = "1", AppUserID = "2"
            };

            using (var arrangeContext = new CMContext(options))
            {
                var sut = new ReviewServices(arrangeContext);
                arrangeContext.Add(bar);
                arrangeContext.Add(user);
                arrangeContext.Add(user2);
                arrangeContext.Add(review1);
                //arrangeContext.Add(review2);
                arrangeContext.Add(like1);
                await arrangeContext.SaveChangesAsync();

                await sut.LikeBarReview(bar.Id, user.Id);

                var result = await sut.LikeBarReview(bar.Id, user2.Id);

                Assert.AreEqual(2, result);
            }
        }
        public async Task AddReviewToTheCorrectBar()
        {
            var testBarId     = 2;
            var testUserId    = "TestUserId";
            var testBarRating = 5;

            var testBarReview = new BarReview()
            {
                User = new User()
                {
                    Id    = testUserId,
                    Name  = "Pesho",
                    Email = "*****@*****.**"
                },

                Rating = testBarRating,
            };

            var options = TestUtilities.GetOptions(nameof(AddReviewToTheCorrectBar));


            using (var arrangeContext = new AppDBContext(options))
            {
                await arrangeContext.BarReviews.AddAsync(testBarReview.ToEntity());

                await arrangeContext.SaveChangesAsync();
            }

            using (var assertContext = new AppDBContext(options))
            {
                var cocktailService = new CocktailService(assertContext);
                var barService      = new BarService(assertContext);

                var sut = new UserService(assertContext, barService, cocktailService);



                var testReview = await sut.AddBarReview(testBarReview, testBarId, testUserId);

                Assert.AreEqual(testBarRating, testReview.Rating);
            }
        }
Beispiel #28
0
        public CreateBarReviewAsync_Should()
        {
            barForTest = new Bar()
            {
                BarId         = "TwoOne",
                Address       = "Solunska 2",
                Information   = "Information",
                MapDirections = "Go south",
                Name          = "Bar",
                Picture       = "Picture",
                Rating        = 4.5d
            };

            barTwoTest = new Bar()
            {
                BarId         = "Two",
                Address       = "Solunska",
                Information   = "Information",
                MapDirections = "Go south",
                Name          = "Bar",
                Picture       = "Picture",
                Rating        = 4.5d
            };

            userForTests = new User()
            {
                Id       = "TheOne",
                UserName = "******",
                Picture  = "Picture"
            };

            createReviewForTest = new BarReview()
            {
                Bar       = barTwoTest,
                BarId     = barTwoTest.BarId,
                Comment   = "Comment",
                CreatedOn = DateTime.MinValue,
                Grade     = 3.5d,
                User      = userForTests,
                UserId    = userForTests.Id
            };
        }
Beispiel #29
0
        public void ReturnNullWhenIdNotFound()
        {
            var options  = TestUtilities.GetOptions(nameof(ReturnNullWhenIdNotFound));
            int resultId = -1;
            var review   = new BarReview
            {
                Id = resultId,
            };

            using (var actContext = new CocktailDB(options))
            {
                actContext.AddAsync(review).GetAwaiter();
                actContext.SaveChangesAsync().GetAwaiter();
            }
            using (var assertContext = new CocktailDB(options))
            {
                var sut    = new BarReviewServices(assertContext);
                var result = sut.GetBarReviewAsync(int.MaxValue).GetAwaiter().GetResult();
                Assert.IsNull(result);
            }
        }
Beispiel #30
0
        public void ReturnCorrectReview()
        {
            var options  = TestUtilities.GetOptions(nameof(ReturnCorrectReview));
            int resultId = -1;
            var review   = new BarReview
            {
                Id = resultId,
            };

            using (var actContext = new CocktailDB(options))
            {
                actContext.AddAsync(review).GetAwaiter();
                actContext.SaveChangesAsync().GetAwaiter();
            }
            using (var assertContext = new CocktailDB(options))
            {
                var sut    = new BarReviewServices(assertContext);
                var result = sut.GetBarReviewAsync(resultId).GetAwaiter().GetResult();
                Assert.IsNotNull(result);
                Assert.AreEqual(resultId, result.Id);
            }
        }