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));
            }
        }