public void ValidateUserCarDto_Must_Validate_Dto_For_Edit_User_Car_Without_Errors()
        {
            //Arrange
            var dto = new AddOrEditUserCarDto
            {
                Id             = 1,
                Name           = "Test",
                ModelId        = null,
                Year           = 2015,
                Vin            = "ABVGDTT0123456789",
                FuelType       = FuelType.Benzine,
                EngineCapacity = 1.5f
            };

            var repository = new Mock <IUserCarRepository>();

            repository.Setup(act => act.Get(dto.Id.Value)).Returns(new UserCar());
            _unitOfWorkMock.Setup(act => act.Repository <IUserCarRepository>()).Returns(repository.Object);

            //Act
            ValidationResult result = null;

            Assert.DoesNotThrow(() => result = _manager.ValidateUserCarDto(dto));

            //Assert
            Assert.NotNull(result);
            Assert.False(result.HasErrors);
        }
        public void ValidateUserCarDto_Must_Throw_All_Possible_Error_When_Validate_Edit_User_Car_Dto()
        {
            //Arrange
            var dto = new AddOrEditUserCarDto
            {
                Id             = 1,
                Name           = null,
                ModelId        = null,
                Year           = 2015,
                Vin            = "ABVGDTT012345678900",
                FuelType       = FuelType.Unknown,
                EngineCapacity = 1.5f
            };

            var repository = new Mock <IUserCarRepository>();

            repository.Setup(act => act.Get(dto.Id.Value)).Returns((UserCar)null);
            _unitOfWorkMock.Setup(act => act.Repository <IUserCarRepository>()).Returns(repository.Object);

            //Act
            ValidationResult result = null;

            Assert.DoesNotThrow(() => result = _manager.ValidateUserCarDto(dto));

            //Assert
            Assert.NotNull(result);
            Assert.True(result.HasErrors);
            Assert.AreEqual(ValidationErrorResources.UserCarNotFound, result.Errors[0]);
            Assert.AreEqual(ValidationErrorResources.FuelTypeNotFound, result.Errors[1]);
            Assert.AreEqual(ValidationErrorResources.VinNumberIsIncorrect, result.Errors[2]);
        }
 private void ValidateCommonFieldsForAddOrEditUserDto(AddOrEditUserCarDto dto, ValidationResult validationResult)
 {
     if (dto.FuelType == FuelType.Unknown)
     {
         validationResult.AddError(ValidationErrorResources.FuelTypeNotFound);
     }
     if (dto.Vin.Length != 17)
     {
         validationResult.AddError(ValidationErrorResources.VinNumberIsIncorrect);
     }
 }
        public void EditCar(AddOrEditUserCarDto dto, string currentUserId)
        {
            UserManager.IsUserInRegularRole(currentUserId);

            var validationResult = _validationManager.ValidateUserCarDto(dto);

            if (validationResult.HasErrors)
            {
                throw new BusinessFaultException(validationResult.GetErrors());
            }

            var repository = UnitOfWork.Repository <IUserCarRepository>();
            var userCar    = repository.Get(dto.Id.Value);

            if (userCar.User.ApplicationUser.Id != currentUserId)
            {
                throw new BusinessFaultException(BusinessLogicExceptionResources.CarDoesNotBelongToUser);
            }

            var isChanged = false;

            if (!userCar.Name.Equals(dto.Name))
            {
                userCar.Name = dto.Name;
                isChanged    = true;
            }
            if (!userCar.Vin.Equals(dto.Vin))
            {
                userCar.Vin = dto.Vin;
                isChanged   = true;
            }
            if (!userCar.Year.Equals(dto.Year))
            {
                userCar.Year = dto.Year;
                isChanged    = true;
            }
            if (!userCar.FuelType.Equals(dto.FuelType))
            {
                userCar.FuelType = dto.FuelType;
                isChanged        = true;
            }
            if (!userCar.EngineCapacity.Equals(dto.EngineCapacity))
            {
                userCar.EngineCapacity = dto.EngineCapacity;
                isChanged = true;
            }

            if (isChanged)
            {
                userCar.Updated = DateTime.UtcNow;
                repository.Update(userCar);
                UnitOfWork.SaveChanges();
            }
        }
 private void ValidateEditUserCarDto(AddOrEditUserCarDto dto, ValidationResult validationResult)
 {
     if (dto.Id.HasValue)
     {
         var car = _unitOfWork.Repository <IUserCarRepository>().Get(dto.Id.Value);
         if (car == null)
         {
             validationResult.AddError(ValidationErrorResources.UserCarNotFound);
         }
     }
     else
     {
         validationResult.AddError(ValidationErrorResources.UserCarNotFound);
     }
     ValidateCommonFieldsForAddOrEditUserDto(dto, validationResult);
 }
 private void ValidateAddUserCarDto(AddOrEditUserCarDto dto, ValidationResult validationResult)
 {
     if (dto.ModelId.HasValue)
     {
         var model = _unitOfWork.Repository <ICarModelsRepository>().Get(dto.ModelId.Value);
         if (model == null)
         {
             validationResult.AddError(ValidationErrorResources.CarModelNotFound);
         }
     }
     else
     {
         validationResult.AddError(ValidationErrorResources.CarModelNotFound);
     }
     ValidateCommonFieldsForAddOrEditUserDto(dto, validationResult);
 }
        public void AddCar(AddOrEditUserCarDto dto, string currentUserId)
        {
            UserManager.IsUserInRegularRole(currentUserId);
            var user = UserManager.CheckAndGet(currentUserId);

            var validationResult = _validationManager.ValidateUserCarDto(dto);

            if (validationResult.HasErrors)
            {
                throw new BusinessFaultException(validationResult.GetErrors());
            }

            var userCar = Mapper.Map <UserCar>(dto);

            userCar.Model = UnitOfWork.Repository <ICarModelsRepository>().Get(dto.ModelId.Value);
            user.UserProfile.Cars.Add(userCar);

            UnitOfWork.SaveChanges();
        }
        public void AddCar_Must_Add_Car_To_User()
        {
            //Arrange
            var userId = "1";
            var user   = new ApplicationUser
            {
                Id          = userId,
                UserProfile = new UserProfile
                {
                    Cars = new List <UserCar>()
                }
            };
            var dto = new AddOrEditUserCarDto
            {
                Name           = "Test",
                ModelId        = 1,
                Year           = 2015,
                Vin            = "0123456789ABCDEFG",
                FuelType       = FuelType.Diesel,
                EngineCapacity = 2.0f
            };

            var validationResult = new ValidationResult("test");

            _userManagerMock.Setup(act => act.IsUserInRegularRole(userId));
            _userManagerMock.Setup(act => act.CheckAndGet(userId)).Returns(user);
            _validationManagerMock.Setup(act => act.ValidateUserCarDto(dto)).Returns(validationResult);

            var repository = new Mock <ICarModelsRepository>();

            repository.Setup(act => act.Get(dto.ModelId.Value)).Returns(new CarModel());
            _unitOfWorkMock.Setup(act => act.Repository <ICarModelsRepository>()).Returns(repository.Object);

            //Act
            Assert.DoesNotThrow(() => _manager.AddCar(dto, userId));

            //Assert
            _validationManagerMock.Verify(act => act.ValidateUserCarDto(dto), Times.Once);
            repository.Verify(act => act.Get(dto.ModelId.Value), Times.Once);
            _unitOfWorkMock.Verify(act => act.Repository <ICarModelsRepository>(), Times.Once);
            _unitOfWorkMock.Verify(act => act.SaveChanges(), Times.Once);
        }
        public void EditCar_Must_Throw_Exception_When_Dto_Not_Pass_Validation()
        {
            //Arrange
            var userId = "1";
            var dto    = new AddOrEditUserCarDto();

            var validationResult = new ValidationResult("test");

            validationResult.AddError("test");

            _userManagerMock.Setup(act => act.IsUserInRegularRole(userId));
            _validationManagerMock.Setup(act => act.ValidateUserCarDto(dto)).Returns(validationResult);

            //Act
            var exception = Assert.Throws <BusinessFaultException>(() => _manager.EditCar(dto, userId));

            //Assert
            _validationManagerMock.Verify(act => act.ValidateUserCarDto(dto), Times.Once);
            Assert.AreEqual(validationResult.GetErrors(), exception.Message);
        }
        public ValidationResult ValidateUserCarDto(AddOrEditUserCarDto dto)
        {
            if (dto == null)
            {
                throw new ArgumentNullException(ArgumentExceptionResources.AddUserCarDtoNotFound);
            }
            ValidationResult validationResult;

            if (!dto.Id.HasValue)
            {
                validationResult = new ValidationResult("Добавление машины пользователя");
                ValidateAddUserCarDto(dto, validationResult);
            }
            else
            {
                validationResult = new ValidationResult("Редактирование машины пользователя");
                ValidateEditUserCarDto(dto, validationResult);
            }
            return(validationResult);
        }
        public void EditCar_Must_Throw_Exception_When_Car_Not_Found()
        {
            //Arrange
            var userId = "1";
            var dto    = new AddOrEditUserCarDto
            {
                Id = 1
            };

            var validationResult = new ValidationResult("test");
            var userCar          = new UserCar
            {
                User = new UserProfile
                {
                    ApplicationUser = new ApplicationUser
                    {
                        Id = "another"
                    }
                }
            };

            _userManagerMock.Setup(act => act.IsUserInRegularRole(userId));
            _validationManagerMock.Setup(act => act.ValidateUserCarDto(dto)).Returns(validationResult);

            var userCarRepository = new Mock <IUserCarRepository>();

            userCarRepository.Setup(act => act.Get(dto.Id.Value)).Returns(userCar);
            _unitOfWorkMock.Setup(act => act.Repository <IUserCarRepository>()).Returns(userCarRepository.Object);

            //Act
            var exception = Assert.Throws <BusinessFaultException>(() => _manager.EditCar(dto, userId));

            //Assert
            Assert.AreEqual(BusinessLogicExceptionResources.CarDoesNotBelongToUser, exception.Message);
            _validationManagerMock.Verify(act => act.ValidateUserCarDto(dto), Times.Once);
            userCarRepository.Verify(act => act.Get(dto.Id.Value), Times.Once);
            _unitOfWorkMock.Verify(act => act.Repository <IUserCarRepository>(), Times.Once);
        }
        public void EditCar_Must_Edit_User_Car()
        {
            //Arrange
            var userId = "1";
            var dto    = new AddOrEditUserCarDto
            {
                Id             = 1,
                Name           = "test",
                Year           = 2006,
                Vin            = "0123456789ABCDEFG",
                FuelType       = FuelType.Benzine,
                EngineCapacity = 1.6f
            };

            var validationResult = new ValidationResult("test");
            var userCar          = UserCarUtils.Create(1, "TEST", "modelName", "markName", userId);

            _userManagerMock.Setup(act => act.IsUserInRegularRole(userId));
            _validationManagerMock.Setup(act => act.ValidateUserCarDto(dto)).Returns(validationResult);

            var userCarRepository = new Mock <IUserCarRepository>();

            userCarRepository.Setup(act => act.Get(dto.Id.Value)).Returns(userCar);
            userCarRepository.Setup(act => act.Update(userCar));
            _unitOfWorkMock.Setup(act => act.Repository <IUserCarRepository>()).Returns(userCarRepository.Object);

            //Act
            Assert.DoesNotThrow(() => _manager.EditCar(dto, userId));

            //Assert
            _validationManagerMock.Verify(act => act.ValidateUserCarDto(dto), Times.Once);
            userCarRepository.Verify(act => act.Get(dto.Id.Value), Times.Once);
            _unitOfWorkMock.Verify(act => act.Repository <IUserCarRepository>(), Times.Once);
            userCarRepository.Verify(act => act.Update(userCar), Times.Once);
            _unitOfWorkMock.Verify(act => act.SaveChanges(), Times.Once);
        }
예제 #13
0
 public IHttpActionResult EditCar(AddOrEditUserCarDto dto)
 {
     return(CallBusinessLogicAction(() => _manager.EditCar(dto, User.Identity.GetUserId())));
 }