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