Beispiel #1
0
        public void ThrowArgumentException_WhenInvalidParametersArePassed()
        {
            // Arrange
            var unitOfWorkMock = new Mock <IUnitOfWork>();
            var carServiceMock = new Mock <ICarService>();

            string extraName = "testExtra";
            var    carId     = 1;
            var    car       = new Car()
            {
                Id = carId
            };
            var carExtra   = new CarsExtras();
            var listOfCars = new List <Car>()
            {
                car
            };
            var listCarsExtras = new List <CarsExtras>();
            var listExtras     = new List <Extra>();

            carServiceMock.Setup(c => c.GetCar(It.IsAny <int>())).Returns(car);
            unitOfWorkMock.Setup(u => u.GetRepository <Car>().All()).Returns(listOfCars.AsQueryable());
            unitOfWorkMock.Setup(u => u.GetRepository <CarsExtras>().All()).Returns(listCarsExtras.AsQueryable());
            unitOfWorkMock.Setup(u => u.GetRepository <Extra>().All()).Returns(listExtras.AsQueryable());

            var invalidCarId = -1;
            var sut          = new ExtraService(unitOfWorkMock.Object);

            // Act   && Assert
            Assert.ThrowsException <ArgumentException>(() => sut.AddExtraToCar(invalidCarId, extraName));
        }
Beispiel #2
0
        public void AddExtraToCar_WhenValidParametersArePassedAndExtraDoesNotExists()
        {
            // Arrange
            var unitOfWorkMock = new Mock <IUnitOfWork>();
            var carServiceMock = new Mock <ICarService>();

            string extraName = "testExtra";
            var    carId     = 1;
            var    car       = new Car()
            {
                Id = carId
            };
            var carExtra   = new CarsExtras();
            var listOfCars = new List <Car>()
            {
                car
            };
            var listCarsExtras = new List <CarsExtras>();
            var listExtras     = new List <Extra>();

            carServiceMock.Setup(c => c.GetCar(It.IsAny <int>())).Returns(car);
            unitOfWorkMock.Setup(u => u.GetRepository <Car>().All()).Returns(listOfCars.AsQueryable());
            unitOfWorkMock.Setup(u => u.GetRepository <CarsExtras>().All()).Returns(listCarsExtras.AsQueryable());
            unitOfWorkMock.Setup(u => u.GetRepository <Extra>().All()).Returns(listExtras.AsQueryable());

            var sut = new ExtraService(unitOfWorkMock.Object);

            // Act
            sut.AddExtraToCar(carId, extraName);

            // Assert
            unitOfWorkMock.Verify(u => u.GetRepository <CarsExtras>().Add(It.IsAny <CarsExtras>()), Times.Once);

            unitOfWorkMock.Verify(c => c.SaveChanges(), Times.Exactly(2));
        }
Beispiel #3
0
        public void ThrowArgumentException_WhenCarAlreadyContainsExtra()
        {
            // Arrange
            var unitOfWorkMock = new Mock <IUnitOfWork>();
            var carServiceMock = new Mock <ICarService>();

            string extraName = "testExtra";
            var    extraId   = 1;
            var    carId     = 1;

            var carExtra = new CarsExtras()
            {
                CarId = carId, ExtraId = extraId
            };

            var extra = new Extra()
            {
                Id = extraId, Name = extraName
            };
            var car = new Car()
            {
                Id = carId
            };

            car.CarsExtras.Add(carExtra);
            extra.CarsExtras.Add(carExtra);
            carExtra.Car   = car;
            carExtra.Extra = extra;

            var listOfCars = new List <Car>()
            {
                car
            };
            var listExtras = new List <Extra>()
            {
                extra
            };
            var listCarsExtras = new List <CarsExtras>()
            {
                carExtra
            };

            carServiceMock.Setup(c => c.GetCar(It.IsAny <int>())).Returns(car);
            unitOfWorkMock.Setup(u => u.GetRepository <Car>().All()).Returns(listOfCars.AsQueryable());
            unitOfWorkMock.Setup(u => u.GetRepository <CarsExtras>().All()).Returns(listCarsExtras.AsQueryable());
            unitOfWorkMock.Setup(u => u.GetRepository <Extra>().All()).Returns(listExtras.AsQueryable());

            var sut = new ExtraService(unitOfWorkMock.Object);

            // Act   && Assert
            Assert.ThrowsException <ArgumentException>(() => sut.AddExtraToCar(carId, extraName));
        }
Beispiel #4
0
        public void AddExtrasToCar(Car car, ICollection <int> extrasIds)
        {
            foreach (var id in extrasIds)
            {
                var newCarExtra = new CarsExtras()
                {
                    CarId = car.Id, ExtraId = id
                };
                this.context.CarsExtras.Add(newCarExtra);
            }

            this.context.SaveChanges();
        }
Beispiel #5
0
        public void DeleteCarExtra_WhenValidParametersArePassed()
        {
            // Arrange
            var unitOfWorkMock = new Mock <IUnitOfWork>();

            int carId = 1;
            var car   = new Car()
            {
                Id = carId
            };
            var cars = new List <Car>()
            {
                car
            };

            var userCar = new UsersCars()
            {
                CarId = car.Id, UserId = 1
            };
            var usersCars = new List <UsersCars>()
            {
                userCar
            };

            var carExtra = new CarsExtras()
            {
                CarId = car.Id, ExtraId = 1
            };
            var carsExtras = new List <CarsExtras>()
            {
                carExtra
            };

            unitOfWorkMock.Setup(u => u.GetRepository <Car>().All()).Returns(cars.AsQueryable());

            unitOfWorkMock.Setup(u => u.GetRepository <UsersCars>().All()).Returns(usersCars.AsQueryable());

            unitOfWorkMock.Setup(u => u.GetRepository <CarsExtras>().All()).Returns(carsExtras.AsQueryable());

            var sut = new CarService(unitOfWorkMock.Object);

            // Act
            sut.RemoveCar(carId);

            // Assert
            unitOfWorkMock.Verify(u => u.GetRepository <CarsExtras>().Delete(It.IsAny <CarsExtras>()), Times.Once);

            unitOfWorkMock.Verify(c => c.SaveChanges(), Times.Once);
        }
Beispiel #6
0
        public void ReturnAListOfExtras_WhenValidParametersArePassed()
        {
            // Arrange
            var unitOfWorkMock = new Mock <IUnitOfWork>();
            var carServiceMock = new Mock <ICarService>();

            string extraName = "testExtra";
            var    extraId   = 1;
            var    carId     = 1;

            var carExtra = new CarsExtras()
            {
                CarId = carId, ExtraId = extraId
            };
            var extra = new Extra()
            {
                Id = extraId, Name = extraName
            };
            var car = new Car()
            {
                Id = carId
            };

            car.CarsExtras.Add(carExtra);
            extra.CarsExtras.Add(carExtra);
            carExtra.Car   = car;
            carExtra.Extra = extra;
            var listOfCars = new List <Car>()
            {
                car
            };
            var listExtras = new List <Extra>()
            {
                extra
            };

            unitOfWorkMock.Setup(u => u.GetRepository <Car>().All()).Returns(listOfCars.AsQueryable());

            var sut = new ExtraService(unitOfWorkMock.Object);
            // Act
            var actual = sut.GetExtrasForCar(carId);

            // Assert
            Assert.AreEqual(listExtras.First().Id, actual.First().Id);
        }
Beispiel #7
0
        private async Task <List <CarsExtras> > GetOrCreateExtrasAsync(ICollection <string> extras, int carId)
        {
            var extrasToReturn = new List <CarsExtras>();

            foreach (var extraName in extras)
            {
                var extra = this.extrasRepository
                            .AllAsNoTracking().FirstOrDefault(x => x.Name == extraName);

                if (extra == null)
                {
                    if (string.IsNullOrWhiteSpace(extraName) || extraName == "Особености и Екстри")
                    {
                        continue;
                    }

                    extra = new Extra
                    {
                        Name = extraName,
                    };

                    await this.extrasRepository.AddAsync(extra);

                    await this.extrasRepository.SaveChangesAsync();
                }

                var carExtra = new CarsExtras
                {
                    ExtraId = extra.Id,
                    CarId   = carId,
                };

                extrasToReturn.Add(carExtra);

                await this.carsExtrasRepository.AddAsync(carExtra);

                await this.carsExtrasRepository.SaveChangesAsync();
            }

            return(extrasToReturn);
        }
Beispiel #8
0
        public Extra AddExtraToCar(int carId, string extraName)
        {
            if (!this.context.Cars.Any(c => c.Id == carId))
            {
                throw new ArgumentException($"Car with Id {carId} does not exist");
            }

            if (this.context.Cars
                .Include(c => c.CarsExtras)
                .ThenInclude(ce => ce.Extra)
                .FirstOrDefault(c => c.Id == carId)
                .CarsExtras.Any(ce => ce.Extra.Name == extraName))
            {
                throw new ArgumentException($"Car with Id {carId} already has extra with name {extraName}.");
            }

            var extra = GetExtraByName(extraName);

            if (extra == null)
            {
                extra = new Extra()
                {
                    Name = extraName
                };
                this.context.Extras.Add(extra);
                this.context.SaveChanges();
            }

            var newCarExtra = new CarsExtras()
            {
                CarId = carId, ExtraId = extra.Id
            };

            this.context.CarsExtras.Add(newCarExtra);

            this.context.SaveChanges();
            return(extra);
        }