コード例 #1
0
        public async Task CreateAsync_WithInvalidModelName_ShouldReturnEmptyModelAndNotInsertAdInDatabase()
        {
            // Arrange
            this.SeedManufacturer(1, SampleManufacturerName);

            // Act
            var model = new VehicleCreateServiceModel
            {
                ManufacturerId = 1,
            };
            var result = await this.adService.CreateAsync(model);

            // Assert
            result
            .Should()
            .BeAssignableTo <AdAndVehicleIds>()
            .And
            .Match(x => x.As <AdAndVehicleIds>().AdId == 0)
            .And
            .Match(x => x.As <AdAndVehicleIds>().VehicleId == 0);

            this.dbContext
            .Ads
            .Should()
            .BeEmpty();
        }
コード例 #2
0
        private VehicleCreateServiceModel InitializeValidVehicleCreateModel()
        {
            var model = new VehicleCreateServiceModel
            {
                ManufacturerId    = 1,
                ModelName         = SampleModelName,
                ExactModelname    = SampleExactModelname,
                EngineHorsePower  = SampleEngineHorsePower,
                FuelTypeId        = SampleFuelTypeId,
                GearingTypeId     = SampleGearingTypeId,
                UserId            = SampleUserId,
                VehicleTypeId     = SampleVehicleTypeId,
                YearOfManufacture = SampleYearOfManufacture
            };

            return(model);
        }
コード例 #3
0
        private VehicleCreateServiceModel InitializeValidVehicleCreateServiceModel()
        {
            var model = new VehicleCreateServiceModel
            {
                ManufacturerId     = 1,
                ModelName          = SampleModelName,
                EngineHorsePower   = SampleEngineHorsePower,
                FuelConsumption    = SampleFuelConsumption,
                FuelTypeId         = SampleFuelTypeId,
                TransmissionTypeId = SampleTransmissionTypeId,
                PhoneNumber        = SamplePhoneNumber,
                UserId             = SampleUserId,
                Price      = SamplePrice,
                FeatureIds = new List <int> {
                    1, 2, 3, 4, 5, 6, 7, 8, 9, 10
                },
                YearOfProduction = SampleYearOfManufacture,
                Description      = SampleDescription,
            };

            return(model);
        }
コード例 #4
0
        public async Task CreateAsync_WithInvalidModelName_ShouldReturnZeroAndNotAddVehicleToDatabase()
        {
            // Arrange
            this.SeedManufacturer(1, SampleManufacturerName);
            var model = new VehicleCreateServiceModel
            {
                ManufacturerId = 1
            };

            // Act
            var result = await this.vehicleService.CreateAsync(model);

            // Assert
            result
            .Should()
            .Be(0);

            this.dbContext
            .Vehicles
            .Should()
            .BeEmpty();
        }
コード例 #5
0
        public async Task <int> CreateAsync(VehicleCreateServiceModel model)
        {
            if (model == null)
            {
                return(default(int));
            }

            var manufacturerExist = await this.db.Manufacturers.AnyAsync(m => m.Id == model.ManufacturerId);

            if (!manufacturerExist)
            {
                return(default(int));
            }

            var newVehicle = Mapper.Map <Vehicle>(model);

            newVehicle.Model = await this.db.Models
                               .FirstOrDefaultAsync(m => m.ManufacturerId == model.ManufacturerId && m.Name == model.ModelName);

            if (newVehicle.Model == null)
            {
                return(default(int));
            }

            try
            {
                this.ValidateEntityState(newVehicle);

                await this.db.AddAsync(newVehicle);

                await this.db.SaveChangesAsync();
            }
            catch
            {
                return(default(int));
            }

            return(newVehicle.Id);
        }
コード例 #6
0
        public async Task <AdAndVehicleIds> CreateAsync(VehicleCreateServiceModel model)
        {
            if (model == null)
            {
                return(new AdAndVehicleIds
                {
                    AdId = 0,
                    VehicleId = 0,
                });
            }

            var manufacturerExist = await this.db.Manufacturers.AnyAsync(m => m.Id == model.ManufacturerId);

            if (!manufacturerExist)
            {
                return(new AdAndVehicleIds
                {
                    AdId = 0,
                    VehicleId = 0,
                });
            }

            var newVehicle = this.mapper.Map <Vehicle>(model);

            newVehicle.Model = await this.db.Models
                               .FirstOrDefaultAsync(m => m.ManufacturerId == model.ManufacturerId && m.Name == model.ModelName);

            if (newVehicle.Model == null)
            {
                return(new AdAndVehicleIds
                {
                    AdId = 0,
                    VehicleId = 0,
                });
            }

            var vehicleFeatures = new List <VehicleFeature>();

            foreach (var modelFeatureId in model.FeatureIds)
            {
                var feature = new VehicleFeature
                {
                    FeatureId = modelFeatureId,
                    Vehicle   = newVehicle
                };
                vehicleFeatures.Add(feature);
            }

            var newAd = new Ad
            {
                CreationDate = DateTime.UtcNow,
                Vehicle      = newVehicle,
                UserId       = model.UserId,
                PhoneNumber  = model.PhoneNumber
            };

            try
            {
                this.ValidateEntityState(newVehicle);
                this.ValidateEntityState(newAd);

                await this.db.AddAsync(newAd);

                await this.db.AddRangeAsync(vehicleFeatures);

                await this.db.SaveChangesAsync();
            }
            catch
            {
                return(new AdAndVehicleIds
                {
                    AdId = 0,
                    VehicleId = 0,
                });
            }

            return(new AdAndVehicleIds
            {
                AdId = newAd.Id,
                VehicleId = newVehicle.Id,
            });
        }