示例#1
0
        public async Task Post([FromBody] CarOfferViewModel _model)
        {
            string token = Request.Headers["Authorization"];
            await _carOfferService.Save(_model, token);

            this.HttpContext.Response.StatusCode = 201;
        }
示例#2
0
        public void Upload_WhenValidParameterAreProvided_ShouldReturnTheDefaoultContreller()
        {
            // Arrange
            var autoMapperConfig = new AutoMapperConfig();

            autoMapperConfig.Execute(typeof(UploadController).Assembly);

            var carOffer          = new CarOffer();
            var carOfferViewModel = new CarOfferViewModel();
            var fileToPass        = new List <HttpPostedFileBase>();

            var carOffersServiceMock = new Mock <ICarOffersService>();

            carOffersServiceMock.Setup(x => x.GetAll())
            .Returns(() => new List <CarOffer> {
                carOffer
            }.AsQueryable());

            var imageServiceMock = new Mock <IImageService>();
            var userServiceMock  = new Mock <IUserService>();
            UploadController uploadController = new UploadController(carOffersServiceMock.Object, imageServiceMock.Object, userServiceMock.Object);

            // Act & Assert
            uploadController.WithCallTo(x => x.Upload(carOfferViewModel, fileToPass)).ShouldRedirectToRoute(string.Empty);
        }
示例#3
0
        public void Upload_WhenImageNullIsPassed_ShouldReturnUploadView()
        {
            // Arrange
            var autoMapperConfig = new AutoMapperConfig();

            autoMapperConfig.Execute(typeof(UploadController).Assembly);

            var carOffer          = new CarOffer();
            var carOfferViewModel = new CarOfferViewModel();
            var fileToPass        = new List <HttpPostedFileBase>();

            fileToPass.Add(null);

            var carOffersServiceMock = new Mock <ICarOffersService>();

            carOffersServiceMock.Setup(x => x.GetAll())
            .Returns(() => new List <CarOffer> {
                carOffer
            }.AsQueryable());

            var imageServiceMock = new Mock <IImageService>();
            var userServiceMock  = new Mock <IUserService>();
            UploadController uploadController = new UploadController(carOffersServiceMock.Object, imageServiceMock.Object, userServiceMock.Object);

            // Act & Assert
            uploadController.WithCallTo(x => x.Upload(carOfferViewModel, fileToPass)).ShouldRenderView("Upload");
        }
        public void ModifiedOnProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testModifiedOn     = DateTime.Now;

            // Act
            caroOfferViewModel.ModifiedOn = testModifiedOn;

            // Assert
            Assert.AreEqual(testModifiedOn, caroOfferViewModel.ModifiedOn);
        }
        public void ColorProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testColor          = ColorType.Blue;

            // Act
            caroOfferViewModel.Color = testColor;

            // Assert
            Assert.AreEqual(testColor, caroOfferViewModel.Color);
        }
        public void SellersCurrentPhoneProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel      = new CarOfferViewModel();
            var testSellersCurrentPhone = "359899104343";

            // Act
            caroOfferViewModel.SellersCurrentPhone = testSellersCurrentPhone;

            // Assert
            Assert.AreEqual(testSellersCurrentPhone, caroOfferViewModel.SellersCurrentPhone);
        }
        public void IdProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testGuidId         = Guid.NewGuid();

            // Act
            caroOfferViewModel.Id = testGuidId;

            // Assert
            Assert.AreEqual(testGuidId, caroOfferViewModel.Id);
        }
        public void HorsePowerProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testHorsePower     = 101;

            // Act
            caroOfferViewModel.HorsePower = testHorsePower;

            // Assert
            Assert.AreEqual(testHorsePower, caroOfferViewModel.HorsePower);
        }
        public void CarCategoryProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testCarCategory    = CarCategoryType.Estate;

            // Act
            caroOfferViewModel.CarCategory = testCarCategory;

            // Assert
            Assert.AreEqual(testCarCategory, caroOfferViewModel.CarCategory);
        }
        public void EngineProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testEngine         = EngineType.Diesel;

            // Act
            caroOfferViewModel.Engine = testEngine;

            // Assert
            Assert.AreEqual(testEngine, caroOfferViewModel.Engine);
        }
        public void PriceProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testPrice          = 2500;

            // Act
            caroOfferViewModel.Price = testPrice;

            // Assert
            Assert.AreEqual(testPrice, caroOfferViewModel.Price);
        }
        public void LocationProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testLocation       = "Sofia";

            // Act
            caroOfferViewModel.Location = testLocation;

            // Assert
            Assert.AreEqual(testLocation, caroOfferViewModel.Location);
        }
        public void TransmissionProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testTransmission   = TransmissionType.Manual;

            // Act
            caroOfferViewModel.Transmission = testTransmission;

            // Assert
            Assert.AreEqual(testTransmission, caroOfferViewModel.Transmission);
        }
        public void UserProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testUser           = new User();

            // Act
            caroOfferViewModel.Author = testUser;

            // Assert
            Assert.AreEqual(testUser, caroOfferViewModel.Author);
        }
        public void YearManufacuredProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel  = new CarOfferViewModel();
            var testYearManufacured = 2001;

            // Act
            caroOfferViewModel.YearManufacured = testYearManufacured;

            // Assert
            Assert.AreEqual(testYearManufacured, caroOfferViewModel.YearManufacured);
        }
        public void ModelProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testModel          = "Passat";

            // Act
            caroOfferViewModel.Model = testModel;

            // Assert
            Assert.AreEqual(testModel, caroOfferViewModel.Model);
        }
        public void BrandProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testBrand          = "VW";

            // Act
            caroOfferViewModel.Brand = testBrand;

            // Assert
            Assert.AreEqual(testBrand, caroOfferViewModel.Brand);
        }
示例#18
0
        public async Task <List <CarOfferViewModel> > Get()
        {
            var models = await _context.CarOffers
                         .Where(x => x.Deleted == false)
                         .Include(x => x.Equipments)
                         .ThenInclude(x => x.Equipment)
                         .Include(x => x.CarModel)
                         .Include(x => x.CarProducent)
                         .Include(x => x.Fuel)
                         .Include(x => x.Files)
                         .Include(x => x.User)
                         .ToListAsync();

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

            List <CarOfferViewModel> carOfferList = new List <CarOfferViewModel>();

            foreach (var model in models)
            {
                List <string> equipment = null;
                equipment = model.Equipments.Select(x => x.Equipment.Name).ToList();
                CarOfferViewModel carOffer = new CarOfferViewModel
                {
                    CarModel         = model.CarModel.ModelName,
                    CarProducent     = model.CarProducent.ProducentName,
                    Fuel             = model.Fuel.FuelName,
                    Description      = model.Description,
                    ShortDescription = model.ShortDescription,
                    Title            = model.Title,
                    PhoneNumber      = model.PhoneNumber,
                    Equipment        = equipment,
                    Year             = model.Year,
                    Price            = model.Price,
                    VinNumber        = model.VinNumber,
                    Mileage          = model.Mileage,
                    Condition        = model.Condition,
                    Country          = model.Country,
                    Seat             = model.Seat,
                    Door             = model.Door,
                    Color            = model.Color,
                    HoursePower      = model.HoursePower,
                    BusinessProfile  = model.User.BusinessProfile.ToString()
                };
                carOfferList.Add(carOffer);
            }
            return(carOfferList);
        }
        public void ImageProp_WhenValidParametersArePasedToId_ShouldSetCorerectly()
        {
            // Arrange
            var caroOfferViewModel = new CarOfferViewModel();
            var testImage          = new Image();

            // Act
            caroOfferViewModel.Image = new List <Image>()
            {
                testImage
            };

            // Assert
            Assert.AreEqual(testImage, caroOfferViewModel.Image.FirstOrDefault());
        }
示例#20
0
        public ActionResult Upload(CarOfferViewModel offer, IEnumerable <HttpPostedFileBase> images)
        {
            if (this.ModelState.IsValid)
            {
                if (!images.Contains(null))
                {
                    string[] allowedFileExtensions = new string[] { ".jpg", ".jpeg", ".png", ".bmp" };

                    foreach (var image in images)
                    {
                        if (!allowedFileExtensions.Contains(image.FileName.Substring(image.FileName.LastIndexOf('.'))))
                        {
                            return(View()); // make e default page if something is wrong
                        }
                    }

                    var imgs = this.imageService.SaveImages(images);

                    //var mappedOffer= Mapper.Map<CarOfferViewModel, CarOffer>(offer);

                    var carOffer = new CarOffer()
                    {
                        Author              = userService.ReturnCurrentUser(),
                        Brand               = offer.Brand,
                        Model               = offer.Model,
                        Description         = offer.Description,
                        Image               = imgs,
                        Color               = offer.Color,
                        Engine              = offer.Engine,
                        CreatedOn           = DateTime.Now,
                        Transmission        = offer.Transmission,
                        CarCategory         = offer.CarCategory,
                        Mileage             = offer.Mileage,
                        HorsePower          = offer.HorsePower,
                        Location            = offer.Location,
                        Price               = offer.Price,
                        SellersCurrentPhone = offer.SellersCurrentPhone,
                        YearManufacured     = offer.YearManufacured
                    };

                    this.carOffersService.Add(carOffer);

                    return(RedirectToAction("AllCars", "Offers"));
                }
            }

            return(View()); // make e default page if something is wrong
        }
示例#21
0
        public async Task Put(string id, [FromBody] CarOfferViewModel model)
        {
            string token = Request.Headers["Authorization"];

            try
            {
                await _carOfferService.Update(model, token);


                this.HttpContext.Response.StatusCode = 204;
                return;
            }
            catch (Exception ex)
            {
                this.HttpContext.Response.StatusCode = 404;
                throw ex;
            }
        }
示例#22
0
        public void Upload_WhenInValidParameterImagesIsProvided_ShouldReturnArgumentNullException()
        {
            // Arrange
            var autoMapperConfig = new AutoMapperConfig();

            autoMapperConfig.Execute(typeof(UploadController).Assembly);

            var carOffer          = new CarOffer();
            var carOfferViewModel = new CarOfferViewModel();

            var carOffersServiceMock = new Mock <ICarOffersService>();

            carOffersServiceMock.Setup(x => x.GetAll())
            .Returns(() => new List <CarOffer> {
                carOffer
            }.AsQueryable());

            var imageServiceMock = new Mock <IImageService>();
            var userServiceMock  = new Mock <IUserService>();
            UploadController uploadController = new UploadController(carOffersServiceMock.Object, imageServiceMock.Object, userServiceMock.Object);

            // Act & Assert
            Assert.Throws <ArgumentNullException>(() => uploadController.Upload(carOfferViewModel, null));
        }
示例#23
0
        public async Task <object> Put(int id, [FromBody] CarOfferViewModel _model)
        {
            string token = Request.Headers["Authorization"];

            return(await _carOfferService.Update(_model, token));
        }
示例#24
0
        public async Task <object> GetRaw(string title)
        {
            try
            {
                var model = await _context.CarOffers.Where(x => x.Title.ToLower() == title.ToLower())
                            .Where(x => x.Deleted == false)
                            .Include(x => x.Equipments)
                            .ThenInclude(x => x.Equipment)
                            .Include(x => x.CarModel)
                            .Include(x => x.CarProducent)
                            .Include(x => x.Fuel)
                            .Include(x => x.Files)
                            .Include(x => x.User)
                            .FirstOrDefaultAsync();

                if (model == null)
                {
                    return(null);
                }
                List <string> equipment = new List <string>();
                foreach (var item in model.Equipments)
                {
                    string tmp = item.Equipment.IdString;
                    equipment.Add(tmp);
                }

                List <FileViewModel> fileViewModels = new List <FileViewModel>();
                foreach (var item in model.Files.Where(x => x.Deleted == false))
                {
                    fileViewModels.Add(new FileViewModel()
                    {
                        Name = item.Name,
                        Path = item.Path + item.Hash,
                        Type = item.Type
                    });
                }

                CarOfferViewModel carOffer = new CarOfferViewModel
                {
                    CarModel         = model.CarModel.IdString,
                    CarProducent     = model.CarProducent.IdString,
                    Fuel             = model.Fuel.IdString,
                    Description      = model.Description,
                    ShortDescription = model.ShortDescription,
                    Title            = model.Title,
                    PhoneNumber      = model.PhoneNumber,
                    Equipment        = equipment,
                    Year             = model.Year,
                    Price            = model.Price,
                    VinNumber        = model.VinNumber,
                    Mileage          = model.Mileage,
                    Condition        = model.Condition,
                    Country          = model.Country,
                    Seat             = model.Seat,
                    Door             = model.Door,
                    Color            = model.Color,
                    HoursePower      = model.HoursePower,
                    FileViewModels   = fileViewModels,
                };
                return(new
                {
                    Succeeded = true,
                    carOffer
                });
            }
            catch
            {
                return(new
                {
                    Succeeded = false
                });
            }
        }
示例#25
0
        public async Task <object> Update(CarOfferViewModel model, string token)
        {
            string user = JwtDecode.User(token);

            var offer = await _context.CarOffers
                        .Where(x => x.User.NormalizedUserName == user.ToUpper())
                        .Where(x => x.Title == model.Title)
                        .Include(x => x.Equipments)
                        .ThenInclude(x => x.Equipment)
                        .Include(x => x.CarModel)
                        .Include(x => x.CarProducent)
                        .Include(x => x.Fuel)
                        .Include(x => x.Files)
                        .FirstOrDefaultAsync();

            if (offer == null)
            {
                return new
                       {
                           Succeeded = false,
                           Errors    = new[]
                           {
                               new { Code = "NotFound" }
                           }
                       }
            }
            ;

            offer.CarModel = await _context.CarModels.Where(x => x.IdString == model.CarModel).FirstOrDefaultAsync();

            offer.CarProducent = await _context.CarProducents.Where(x => x.IdString == model.CarProducent).FirstOrDefaultAsync();

            offer.Color            = model.Color;
            offer.Condition        = model.Condition;
            offer.Country          = model.Country;
            offer.Description      = model.Description;
            offer.Door             = model.Door;
            offer.HoursePower      = model.HoursePower;
            offer.Mileage          = model.Mileage;
            offer.PhoneNumber      = model.PhoneNumber;
            offer.Price            = model.Price;
            offer.Seat             = model.Seat;
            offer.ShortDescription = model.ShortDescription;
            offer.VinNumber        = model.VinNumber;
            offer.Year             = model.Year;

            List <CarOfferEquipment> equipments = new List <CarOfferEquipment>();
            var equipmentDB = await _context.Equipments.ToListAsync();

            foreach (var item in model.Equipment)
            {
                var eqId = equipmentDB.Where(x => x.IdString == item).Select(x => x.Id).FirstOrDefault();

                if (eqId != null)
                {
                    equipments.Add(new CarOfferEquipment()
                    {
                        CarOfferId  = offer.Id,
                        EquipmentId = eqId
                    });
                }
            }
            List <File> files = new List <File>();

            foreach (var item in model.FileViewModels)
            {
                if (item.Base64 != null)
                {
                    if (item.Type.Contains("image") && item.Base64.Length > 65)
                    {
                        string hash       = (item.Base64.Replace("data:" + item.Type + ";base64,", "").Substring(0, 60) + ObjectId.GenerateNewId().ToString().Substring(0, 8)).Replace("/", "").Replace("-", "").Replace("+", "") + "." + item.Type.Replace("image/", "");
                        var    byteBuffer = Convert.FromBase64String(item.Base64.Replace("data:" + item.Type + ";base64,", ""));
                        var    webRoot    = _env.WebRootPath;
                        var    filePath   = System.IO.Path.Combine(webRoot, "images");
                        filePath = System.IO.Path.Combine(filePath, hash);
                        System.IO.File.WriteAllBytes(filePath, byteBuffer);
                        files.Add(new File()
                        {
                            Id   = Guid.NewGuid(),
                            Name = item.Name,
                            Hash = hash,
                            Path = "images\\",
                            Type = item.Type.Split('/').FirstOrDefault()
                        });
                    }
                }
                else
                if (item.Type == "image" && (item.Base64 == "" || item.Base64 == null))
                {
                    var img = await _context.Files.Where(x => (x.Path + x.Hash) == item.Path).FirstOrDefaultAsync();

                    if (img != null)
                    {
                        files.Add(img);
                    }
                }
            }

            offer.Files      = files;
            offer.Equipments = equipments;
            _context.Update(offer);
            await _context.SaveChangesAsync();

            return(new
            {
                Succeeded = true
            });
        }
    }
示例#26
0
        public async Task <object> Save(CarOfferViewModel model, string token)
        {
            var offerID   = Guid.NewGuid();
            var allTitles = await _context.CarOffers.Select(x => x.Title).ToListAsync();

            string title;
            string titleTmp = new string(model.ShortDescription.Select(x => char.IsLetterOrDigit(x) ? x : '-').ToArray()).ToLower();
            string check;

            do
            {
                title = titleTmp + ObjectId.GenerateNewId().ToString().Substring(0, 8);
                check = allTitles.FirstOrDefault(x => x.Contains(title));
            } while (check != null);

            List <File> files = new List <File>();

            foreach (var item in model.FileViewModels)
            {
                if (item.Type.Contains("image") && item.Base64.Length > 65)
                {
                    string hash       = (item.Base64.Replace("data:" + item.Type + ";base64,", "").Substring(0, 60) + ObjectId.GenerateNewId().ToString().Substring(0, 8)).Replace("/", "").Replace("-", "") + "." + item.Type.Replace("image/", "");
                    var    byteBuffer = Convert.FromBase64String(item.Base64.Replace("data:" + item.Type + ";base64,", ""));
                    var    webRoot    = _env.WebRootPath;
                    var    filePath   = System.IO.Path.Combine(webRoot, "images");
                    filePath = System.IO.Path.Combine(filePath, hash);
                    System.IO.File.WriteAllBytes(filePath, byteBuffer);
                    files.Add(new File()
                    {
                        Id   = Guid.NewGuid(),
                        Name = item.Name,
                        Hash = hash,
                        Path = "images\\",
                        Type = item.Type.Split('/').FirstOrDefault()
                    });
                }
            }
            List <CarOfferEquipment> equipments = new List <CarOfferEquipment>();
            var equipmentDB = await _context.Equipments.ToListAsync();

            foreach (var item in model.Equipment)
            {
                var eqId = equipmentDB.Where(x => x.IdString == item).Select(x => x.Id).FirstOrDefault();
                if (eqId != null)
                {
                    equipments.Add(new CarOfferEquipment()
                    {
                        CarOfferId  = offerID,
                        EquipmentId = eqId
                    });
                }
            }


            var userNameToken = JwtDecode.User(token);
            var user          = await _context.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == userNameToken.ToUpper());

            CarOffer carOffer = new CarOffer()
            {
                Id               = Guid.NewGuid(),
                CarModel         = await _context.CarModels.Where(x => x.ModelName.ToUpper() == model.CarModel.ToUpper()).FirstOrDefaultAsync(),
                CarProducent     = await _context.CarProducents.Where(x => x.ProducentName.ToUpper() == model.CarProducent.ToUpper()).FirstOrDefaultAsync(),
                Fuel             = await _context.FuelTypes.Where(x => x.FuelName.ToUpper() == model.Fuel.ToUpper()).FirstOrDefaultAsync(),
                Description      = model.Description,
                PhoneNumber      = model.PhoneNumber,
                ShortDescription = model.ShortDescription,
                Equipments       = equipments,
                Title            = title,
                Year             = model.Year,
                Price            = model.Price,
                VinNumber        = model.VinNumber,
                Files            = files,
                Mileage          = model.Mileage,
                AddDate          = DateTime.Now,
                Condition        = model.Condition,
                Country          = model.Country,
                Door             = model.Door,
                Seat             = model.Seat,
                Color            = model.Color,
                HoursePower      = model.HoursePower,
                User             = user
            };
            await _context.CarOffers.AddAsync(carOffer);

            await _context.SaveChangesAsync();

            return(new
            {
                Succeeded = true
            });
        }