Example #1
0
        public async Task ReturnFalse_WhenBarDoesntExist()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(ReturnFalse_WhenBarDoesntExist));

            using (var context = new BCcontext(options))
            {
            }

            var mockMapper    = new Mock <IBarMapper>();
            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut    = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var result = await sut.BarExistsByName("BestBar");

                Assert.AreEqual(result, false);
            }
        }
        public async Task ThrowArgumentNullException_WhenArgumentNull()
        {
            //Arrange
            var options = Utils.GetOptions("RecordsBar_WhenBarDoesntExist");


            using (var context = new BCcontext(options))
            {
            }

            var mockMapper    = new Mock <IBarMapper>();
            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);

                await Assert.ThrowsExceptionAsync <ArgumentNullException>(async() => await sut.CreateAsync(null));
            }
        }
Example #3
0
        public async Task ThrowArgumentException_IfParameterIncorect()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(ThrowArgumentException_IfParameterIncorect));

            using (var context = new BCcontext(options))
            {
            }

            var mockMapper    = new Mock <IBarMapper>();
            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);

                await Assert.ThrowsExceptionAsync <ArgumentException>(async() => await sut.GetAllAsync("a", "10", string.Empty, "asc", true));

                await Assert.ThrowsExceptionAsync <ArgumentException>(async() => await sut.GetAllAsync("0", "a", string.Empty, "asc", true));
            }
        }
        public void ReturnsCorrectCount()
        {
            //Arrange
            var bars = new List <ShishaBar>()
            {
                new ShishaBar(),
                new ShishaBar()
            }.AsQueryable();
            var mockedBarsRepo = new Mock <IEntityFrameworkRepository <ShishaBar> >();

            mockedBarsRepo.Setup(x => x.All).Returns(bars);
            var mockedData = new Mock <IShishaTimeData>();

            mockedData.Setup(x => x.Bars).Returns(mockedBarsRepo.Object);
            var service = new BarsService(mockedData.Object);
            int count;

            //Act
            service.GetBarsWithPaging(out count, 1, 5);

            //Arrange
            Assert.AreEqual(2, count);
        }
        public async Task ReturnNull_WhenBarDoesntExist()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(ReturnNull_WhenBarDoesntExist));

            using (var context = new BCcontext(options))
            {
            }

            var bar = new BarDTO()
            {
                Name       = "BestBarAgain",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
                Address    = "Галичица 17",
                Country    = "България",
                District   = "Лозенец",
                Email      = "*****@*****.**",
                Phone      = "088888888",
                Town       = "София"
            };

            var mockMapper    = new Mock <IBarMapper>();
            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut    = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var result = await sut.UpdateAsync(Guid.NewGuid(), bar);

                Assert.AreEqual(result, null);
            }
        }
        public async Task GetDefinedBarCocktails_WhenSuccessful()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(GetDefinedBarCocktails_WhenSuccessful));

            var record = new Bar()
            {
                Name       = "BestBar",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
                Address    = "Галичица 17.",
                Country    = "България.",
                District   = "Лозенец.",
                Email      = "*****@*****.**",
                Phone      = "088888888.",
                Town       = "София.",
                LocationId = null,
            };

            var cocktailList = new List <Cocktail>();

            for (int i = 1; i <= 20; i++)
            {
                var cocktail = new Cocktail()
                {
                    Name        = "BestCocktail" + i,
                    Rating      = 4,
                    TimesRated  = 1,
                    ImageSrc    = null,
                    IsDeleted   = false,
                    IsAlcoholic = false
                };

                cocktailList.Add(cocktail);
            }

            using (var context = new BCcontext(options))
            {
                await context.Bars.AddAsync(record);

                await context.Cocktails.AddRangeAsync(cocktailList);

                await context.SaveChangesAsync();

                var bar = await context.Bars.FirstOrDefaultAsync();

                var cocktails = await context.Cocktails.ToListAsync();

                foreach (var item in cocktails)
                {
                    var join = new CocktailBar()
                    {
                        Bar      = bar,
                        Cocktail = item,
                    };

                    await context.CocktailBars.AddAsync(join);
                }

                await context.SaveChangesAsync();
            }

            var mockMapper    = new Mock <IBarMapper>();
            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();



            coctailMapper.Setup((x) => x.MapEntityToDTO(It.IsAny <Cocktail>()))
            .Returns((Cocktail b) => new CocktailDTO()
            {
                Id          = b.Id,
                Name        = b.Name,
                Rating      = b.Rating,
                TimesRated  = b.TimesRated,
                ImageSrc    = b.ImageSrc,
                IsDeleted   = b.IsDeleted,
                IsAlcoholic = b.IsAlcoholic
            });

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut      = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var dbResult = await context.CocktailBars
                               .Include(c => c.Cocktail)
                               .Skip(8).Take(8)
                               .ToListAsync();

                var dbBar = await context.Bars.FirstOrDefaultAsync();

                var result = await sut.GetCocktailsAsync(dbBar.Id, "1", "8", null, true);

                Assert.AreEqual(result.Count(), dbResult.Count());
                foreach (var item in dbResult)
                {
                    Assert.IsNotNull(result.FirstOrDefault(r => r.Name == item.Cocktail.Name));
                }
            }
        }
        public async Task ThrowArgumentException_WhenParametersIncorrect()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(ThrowArgumentException_WhenParametersIncorrect));

            var record = new Bar()
            {
                Name       = "BestBar",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
                Address    = "Галичица 17.",
                Country    = "България.",
                District   = "Лозенец.",
                Email      = "*****@*****.**",
                Phone      = "088888888.",
                Town       = "София.",
                LocationId = null,
            };

            var cocktailList = new List <Cocktail>();

            for (int i = 1; i <= 20; i++)
            {
                var cocktail = new Cocktail()
                {
                    Name        = "BestCocktail" + i,
                    Rating      = 4,
                    TimesRated  = 1,
                    ImageSrc    = null,
                    IsDeleted   = false,
                    IsAlcoholic = false
                };

                cocktailList.Add(cocktail);
            }

            using (var context = new BCcontext(options))
            {
                await context.Bars.AddAsync(record);

                await context.Cocktails.AddRangeAsync(cocktailList);

                await context.SaveChangesAsync();

                var bar = await context.Bars.FirstOrDefaultAsync();

                var cocktails = await context.Cocktails.ToListAsync();

                foreach (var item in cocktails)
                {
                    var join = new CocktailBar()
                    {
                        Bar      = bar,
                        Cocktail = item,
                    };

                    await context.CocktailBars.AddAsync(join);
                }

                await context.SaveChangesAsync();
            }

            var mockMapper    = new Mock <IBarMapper>();
            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();



            coctailMapper.Setup((x) => x.MapEntityToDTO(It.IsAny <Cocktail>()))
            .Returns((Cocktail b) => new CocktailDTO()
            {
                Id          = b.Id,
                Name        = b.Name,
                Rating      = b.Rating,
                TimesRated  = b.TimesRated,
                ImageSrc    = b.ImageSrc,
                IsDeleted   = b.IsDeleted,
                IsAlcoholic = b.IsAlcoholic
            });

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut   = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var dbBar = await context.Bars.FirstOrDefaultAsync();

                await Assert.ThrowsExceptionAsync <ArgumentException>(async() => await sut.GetCocktailsAsync(dbBar.Id, string.Empty, "8", null, true));
            }
        }
Example #8
0
        public async Task ReturnUndeletedRecords_IfNotAdmin()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(ReturnUndeletedRecords_IfNotAdmin));

            var barList = new List <Bar>();

            for (int i = 1; i <= 20; i++)
            {
                var bar = new Bar()
                {
                    Name       = "BestBar" + i,
                    Rating     = 4,
                    TimesRated = 1,
                    ImageSrc   = null,
                    IsDeleted  = false,
                    Address    = "Street " + i,
                    Country    = "България",
                    District   = "District " + i,
                    Email      = "*****@*****.**",
                    Phone      = "+ " + i + "8888888",
                    Town       = "София",
                    LocationId = null,
                };

                if (i % 2 == 0)
                {
                    bar.IsDeleted = true;
                }

                barList.Add(bar);
            }

            using (var context = new BCcontext(options))
            {
                await context.Bars.AddRangeAsync(barList);

                await context.SaveChangesAsync();
            }

            var mockMapper = new Mock <IBarMapper>();


            mockMapper.Setup((x) => x.MapEntityToDTO(It.IsAny <Bar>()))
            .Returns((Bar b) => new BarDTO()
            {
                Id         = b.Id,
                Name       = b.Name,
                Rating     = b.Rating,
                TimesRated = b.TimesRated,
                ImageSrc   = b.ImageSrc,
                IsDeleted  = b.IsDeleted,
                Address    = b.Address,
                Country    = b.Country,
                District   = b.District,
                Email      = b.Email,
                LocationId = b.LocationId,
                Phone      = b.Phone,
                Town       = b.Town
            });

            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut    = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var result = await sut.GetAllAsync("0", "20", string.Empty, "asc", false);

                Assert.AreEqual(result.Count(), 10);
                Assert.AreEqual(result.Any(b => b.IsDeleted == true), false);
            }
        }
Example #9
0
        public async Task ReturnBarDTO_WhenGetSuccesfull()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(ReturnBarDTO_WhenGetSuccesfull));

            var record = new Bar()
            {
                Name       = "BestBar",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
                Address    = "Галичица 17.",
                Country    = "България.",
                District   = "Лозенец.",
                Email      = "*****@*****.**",
                Phone      = "088888888.",
                Town       = "София.",
                LocationId = null,
            };

            using (var context = new BCcontext(options))
            {
                await context.Bars.AddAsync(record);

                await context.SaveChangesAsync();
            }

            var mockMapper = new Mock <IBarMapper>();


            mockMapper.Setup((x) => x.MapEntityToDTO(It.IsAny <Bar>()))
            .Returns((Bar b) => new BarDTO()
            {
                Id         = b.Id,
                Name       = b.Name,
                Rating     = b.Rating,
                TimesRated = b.TimesRated,
                ImageSrc   = b.ImageSrc,
                IsDeleted  = b.IsDeleted,
                Address    = b.Address,
                Country    = b.Country,
                District   = b.District,
                Email      = b.Email,
                LocationId = b.LocationId,
                Phone      = b.Phone,
                Town       = b.Town
            });

            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();


            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut      = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var dbResult = await context.Bars.FirstOrDefaultAsync(b => b.Name == "BestBar");

                var result = await sut.GetAsync(dbResult.Id);

                Assert.IsInstanceOfType(result, typeof(BarDTO));
            }
        }
        public async Task ChangeRating_IfAlreadyRatedButNotTimesRated()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(ChangeRating_IfAlreadyRatedButNotTimesRated));

            var record = new Bar()
            {
                Name       = "BestBar",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
                Address    = "Галичица 17.",
                Country    = "България.",
                District   = "Лозенец.",
                Email      = "*****@*****.**",
                Phone      = "088888888.",
                Town       = "София.",
                LocationId = null,
            };

            var user = new User()
            {
                UserName     = "******",
                Email        = "*****@*****.**",
                PasswordHash = "pass",
            };

            using (var context = new BCcontext(options))
            {
                await context.Bars.AddAsync(record);

                await context.Users.AddAsync(user);

                await context.SaveChangesAsync();

                var barRating = new UserBarRating();
                barRating.Bar = await context.Bars.FirstOrDefaultAsync(b => b.Name == "BestBar");

                barRating.User = await context.Users.FirstOrDefaultAsync(u => u.UserName == "UserName");

                barRating.Rating = 4;

                await context.BarRatings.AddAsync(barRating);

                await context.SaveChangesAsync();
            }

            var mockMapper = new Mock <IBarMapper>();


            mockMapper.Setup((x) => x.MapEntityToDTO(It.IsAny <Bar>()))
            .Returns((Bar b) => new BarDTO()
            {
                Id         = b.Id,
                Name       = b.Name,
                Rating     = b.Rating,
                TimesRated = b.TimesRated,
                ImageSrc   = b.ImageSrc,
                IsDeleted  = b.IsDeleted,
                Address    = b.Address,
                Country    = b.Country,
                District   = b.District,
                Email      = b.Email,
                LocationId = b.LocationId,
                Phone      = b.Phone,
                Town       = b.Town
            });

            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut      = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var dbResult = await context.Bars.FirstOrDefaultAsync(b => b.Name == "BestBar");

                var dbUser = await context.Users.FirstOrDefaultAsync(u => u.UserName == "UserName");

                var result = await sut.RateBarAsync(dbResult.Id, dbUser.Id, 2);

                dbResult = await context.Bars.FirstOrDefaultAsync(b => b.Name == "BestBar");

                Assert.AreEqual(dbResult.TimesRated, 1);
                Assert.AreEqual(dbResult.Rating, 2);
            }
        }
        public async Task RemoveCocktail_WhenSuccessful()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(RemoveCocktail_WhenSuccessful));

            var record = new Bar()
            {
                Name       = "BestBar",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
                Address    = "Галичица 17.",
                Country    = "България.",
                District   = "Лозенец.",
                Email      = "*****@*****.**",
                Phone      = "088888888.",
                Town       = "София.",
                LocationId = null,
            };

            var cocktail1 = new Cocktail()
            {
                Name       = "SomeCocktail",
                Rating     = 3,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
            };

            var cocktail2 = new Cocktail()
            {
                Name       = "SomeOtherCocktail",
                Rating     = 3,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
            };

            using (var context = new BCcontext(options))
            {
                await context.Cocktails.AddAsync(cocktail1);

                await context.Cocktails.AddAsync(cocktail2);

                await context.Bars.AddAsync(record);

                await context.SaveChangesAsync();

                var conection1 = new CocktailBar()
                {
                    Cocktail = await context.Cocktails.FirstOrDefaultAsync(c => c.Name == "SomeCocktail"),
                    Bar      = await context.Bars.FirstOrDefaultAsync(b => b.Name == "BestBar")
                };
                var conection2 = new CocktailBar()
                {
                    Cocktail = await context.Cocktails.FirstOrDefaultAsync(c => c.Name == "SomeOtherCocktail"),
                    Bar      = await context.Bars.FirstOrDefaultAsync(b => b.Name == "BestBar")
                };
                await context.CocktailBars.AddAsync(conection1);

                await context.CocktailBars.AddAsync(conection2);

                await context.SaveChangesAsync();
            }



            var bar = new BarDTO()
            {
                Name       = "BestBarAgain",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
                Address    = "Галичица 17",
                Country    = "България",
                District   = "Лозенец",
                Email      = "*****@*****.**",
                Phone      = "088888888",
                Town       = "София",
                Cocktails  = new List <CocktailBarDTO>()
            };

            var mockMapper = new Mock <IBarMapper>();


            mockMapper.Setup((x) => x.MapEntityToDTO(It.IsAny <Bar>()))
            .Returns((Bar b) => new BarDTO()
            {
                Id         = b.Id,
                Name       = b.Name,
                Rating     = b.Rating,
                TimesRated = b.TimesRated,
                ImageSrc   = b.ImageSrc,
                IsDeleted  = b.IsDeleted,
                Address    = b.Address,
                Country    = b.Country,
                District   = b.District,
                Email      = b.Email,
                LocationId = b.LocationId,
                Phone      = b.Phone,
                Town       = b.Town
            });

            mockMapper.Setup((x) => x.MapDTOToEntity(It.IsAny <BarDTO>()))
            .Returns((BarDTO b) => new Bar()
            {
                Id         = b.Id,
                Name       = b.Name,
                Rating     = b.Rating,
                TimesRated = b.TimesRated,
                ImageSrc   = b.ImageSrc,
                IsDeleted  = b.IsDeleted,
                Address    = b.Address,
                Country    = b.Country,
                District   = b.District,
                Email      = b.Email,
                LocationId = b.LocationId,
                Phone      = b.Phone,
                Town       = b.Town,
            });

            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var contextCoctail1 = await context.Cocktails.FirstOrDefaultAsync(c => c.Name == "SomeCocktail");

                var cocktailBarDTO1 = new CocktailBarDTO()
                {
                    CocktailId   = contextCoctail1.Id,
                    CocktailName = contextCoctail1.Name,
                    Remove       = false
                };
                var contextCoctail2 = await context.Cocktails.FirstOrDefaultAsync(c => c.Name == "SomeOtherCocktail");

                var cocktailBarDTO2 = new CocktailBarDTO()
                {
                    CocktailId   = contextCoctail2.Id,
                    CocktailName = contextCoctail2.Name,
                    Remove       = true
                };
                bar.Cocktails.Add(cocktailBarDTO1);
                bar.Cocktails.Add(cocktailBarDTO2);
                var sut         = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var dbResultOld = await context.Bars.FirstOrDefaultAsync(b => b.Name == "BestBar");

                var result = await sut.UpdateAsync(dbResultOld.Id, bar);

                var dbResult = await context.Bars.Include(b => b.Cocktails).FirstOrDefaultAsync(b => b.Name == "BestBarAgain");

                Assert.AreEqual(dbResult.Name, bar.Name);
                Assert.AreEqual(dbResult.Rating, bar.Rating);
                Assert.AreEqual(dbResult.TimesRated, bar.TimesRated);
                Assert.AreEqual(dbResult.ImageSrc, bar.ImageSrc);
                Assert.AreEqual(dbResult.IsDeleted, bar.IsDeleted);
                Assert.AreEqual(dbResult.Address, bar.Address);
                Assert.AreEqual(dbResult.Country, bar.Country);
                Assert.AreEqual(dbResult.District, bar.District);
                Assert.AreEqual(dbResult.Email, bar.Email);
                Assert.AreEqual(dbResult.Phone, bar.Phone);
                Assert.AreEqual(dbResult.Town, bar.Town);
                Assert.AreEqual(dbResult.Cocktails.Count(), 1);
                Assert.AreEqual(dbResult.Cocktails.Where(c => c.CocktailId == contextCoctail1.Id).Count(), 1);
            }
        }
        public async Task RecordsBar_WhenBarDoesntExist()
        {
            //Arrange
            var options = Utils.GetOptions("RecordsBar_WhenBarDoesntExist");


            using (var context = new BCcontext(options))
            {
            }

            var bar = new BarDTO()
            {
                Name       = "BestBar",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = false,
                Address    = "Галичица 17",
                Country    = "България",
                District   = "Лозенец",
                Email      = "*****@*****.**",
                Phone      = "088888888",
                Town       = "София"
            };

            var mockMapper = new Mock <IBarMapper>();


            mockMapper.Setup((x) => x.MapEntityToDTO(It.IsAny <Bar>()))
            .Returns((Bar b) => new BarDTO()
            {
                Id         = b.Id,
                Name       = b.Name,
                Rating     = b.Rating,
                TimesRated = b.TimesRated,
                ImageSrc   = b.ImageSrc,
                IsDeleted  = b.IsDeleted,
                Address    = b.Address,
                Country    = b.Country,
                District   = b.District,
                Email      = b.Email,
                LocationId = b.LocationId,
                Phone      = b.Phone,
                Town       = b.Town
            });

            mockMapper.Setup((x) => x.MapDTOToEntity(It.IsAny <BarDTO>()))
            .Returns((BarDTO b) => new Bar()
            {
                Id         = b.Id,
                Name       = b.Name,
                Rating     = b.Rating,
                TimesRated = b.TimesRated,
                ImageSrc   = b.ImageSrc,
                IsDeleted  = b.IsDeleted,
                Address    = b.Address,
                Country    = b.Country,
                District   = b.District,
                Email      = b.Email,
                LocationId = b.LocationId,
                Phone      = b.Phone,
                Town       = b.Town
            });

            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                await sut.CreateAsync(bar);

                var dbResult = await context.Bars.FirstOrDefaultAsync(x => x.Name == bar.Name);

                Assert.AreEqual(dbResult.Name, bar.Name);
                Assert.AreEqual(dbResult.Rating, bar.Rating);
                Assert.AreEqual(dbResult.TimesRated, bar.TimesRated);
                Assert.AreEqual(dbResult.ImageSrc, bar.ImageSrc);
                Assert.AreEqual(dbResult.IsDeleted, bar.IsDeleted);
                Assert.AreEqual(dbResult.Address, bar.Address);
                Assert.AreEqual(dbResult.Country, bar.Country);
                Assert.AreEqual(dbResult.District, bar.District);
                Assert.AreEqual(dbResult.Email, bar.Email);
                Assert.AreEqual(dbResult.Phone, bar.Phone);
                Assert.AreEqual(dbResult.Town, bar.Town);
            }
        }
Example #13
0
        public async Task ReturnsMostRatedInOrderOfRating()
        {
            var options = Utils.GetOptions(nameof(ReturnsMostRatedInOrderOfRating));

            var barList = new List <Bar>();

            for (int i = 1; i <= 3; i++)
            {
                var bar = new Bar()
                {
                    Name       = "BestBar" + i,
                    Rating     = 3,
                    TimesRated = i,
                    ImageSrc   = null,
                    IsDeleted  = false,
                    Address    = "Street " + i,
                    Country    = "България",
                    District   = "District " + i,
                    Email      = "*****@*****.**",
                    Phone      = "+ " + i + "8888888",
                    Town       = "София",
                    LocationId = null,
                };

                barList.Add(bar);
            }

            using (var context = new BCcontext(options))
            {
                await context.Bars.AddRangeAsync(barList);

                await context.SaveChangesAsync();
            }

            var mockMapper = new Mock <IBarMapper>();


            mockMapper.Setup((x) => x.MapEntityToDTO(It.IsAny <Bar>()))
            .Returns((Bar b) => new BarDTO()
            {
                Id         = b.Id,
                Name       = b.Name,
                Rating     = b.Rating,
                TimesRated = b.TimesRated,
                ImageSrc   = b.ImageSrc,
                IsDeleted  = b.IsDeleted,
                Address    = b.Address,
                Country    = b.Country,
                District   = b.District,
                Email      = b.Email,
                LocationId = b.LocationId,
                Phone      = b.Phone,
                Town       = b.Town
            });

            var http          = new Mock <IHttpClientFactory>();
            var coctailMapper = new Mock <ICocktailMapper>();

            //Act & Assert
            using (var context = new BCcontext(options))
            {
                var sut    = new BarsService(context, mockMapper.Object, http.Object, coctailMapper.Object);
                var result = await sut.GetBestBarsAsync();

                var ordered = result.OrderBy(o => o.TimesRated).ThenByDescending(o => o.Rating).ToList();

                Assert.AreEqual(result.Count(), 3);
                CollectionAssert.AreEqual(result.ToList(), ordered);
            }
        }