Exemple #1
0
 protected override void Because_of()
 {
     _destination = Mapper.Map <BarDTO>(new Bar {
         Foos = new Foo[5]
     });
 }
        public async Task ReturnBarDTO_WhenSuccesfull()
        {
            //Arrange
            var options = Utils.GetOptions(nameof(ReturnBarDTO_WhenSuccesfull));


            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);
                var result = await sut.CreateAsync(bar);

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

                Assert.IsInstanceOfType(result, typeof(BarDTO));
            }
        }
 public Task <Bar> Update(BarDTO bar)
 {
     throw new NotImplementedException();
 }
        public async Task UndeletesBar_WhenBarExistAsync()
        {
            //Arrange
            var options = Utils.GetOptions("UndeletesBar_WhenBarExist");

            var record = new Bar()
            {
                Name       = "BestBar",
                Rating     = 4,
                TimesRated = 1,
                ImageSrc   = null,
                IsDeleted  = true,
                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 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, record.Name);
                Assert.AreEqual(dbResult.Rating, record.Rating);
                Assert.AreEqual(dbResult.TimesRated, record.TimesRated);
                Assert.AreEqual(dbResult.ImageSrc, record.ImageSrc);
                Assert.AreEqual(dbResult.IsDeleted, false);
                Assert.AreEqual(dbResult.Address, record.Address);
                Assert.AreEqual(dbResult.Country, record.Country);
                Assert.AreEqual(dbResult.District, record.District);
                Assert.AreEqual(dbResult.Email, record.Email);
                Assert.AreEqual(dbResult.Phone, record.Phone);
                Assert.AreEqual(dbResult.Town, record.Town);
            }
        }
        /// <summary>
        /// Update the bar
        /// </summary>
        /// <param name="id">bar ID, Guid</param>
        /// <param name="barDTO">Object of updated information, BarDTO</param>
        /// <returns>The bar, DTO</returns>
        public async Task <BarDTO> UpdateAsync(Guid id, BarDTO barDTO)
        {
            try
            {
                var bar = await _context.Bars
                          .FirstOrDefaultAsync(b => b.Id == id);

                if (bar == null)
                {
                    return(null);
                }

                bar.Address  = barDTO.Address;
                bar.Country  = barDTO.Country;
                bar.District = barDTO.District;
                bar.Email    = barDTO.Email;
                bar.ImageSrc = barDTO.ImageSrc;
                bar.Name     = barDTO.Name;
                bar.Phone    = barDTO.Phone;
                bar.Town     = barDTO.Town;

                _context.Update(bar);

                await _context.SaveChangesAsync();

                foreach (var item in barDTO.Cocktails)
                {
                    var dbItem = await _context.CocktailBars
                                 .Include(c => c.Bar)
                                 .Include(c => c.Cocktail)
                                 .FirstOrDefaultAsync(i => i.CocktailId == item.CocktailId && i.BarId == id);

                    if (dbItem == null)
                    {
                        var cocktail = new CocktailBar();// { CocktailId = item.CocktailId, BarId = id };
                        cocktail.Bar = await _context.Bars.FindAsync(id);

                        cocktail.BarId    = cocktail.Bar.Id;
                        cocktail.Cocktail = await _context.Cocktails.FindAsync(item.CocktailId);

                        cocktail.CocktailId = cocktail.Cocktail.Id;
                        await _context.CocktailBars.AddAsync(cocktail);
                    }
                    else
                    {
                        if (item.Remove)
                        {
                            _context.CocktailBars.Remove(dbItem);
                        }
                    }
                }

                await _context.SaveChangesAsync();

                return(barDTO);
            }
            catch (Exception)
            {
                throw new ArgumentNullException("Failed to update");
            }
        }