Beispiel #1
0
        public async Task RegistrationCarService(RegistrationCarServiceDto dto, string directory)
        {
            ValidationResult validationResult;

            try
            {
                validationResult = _validationManager.ValidateRegistrationCarServiceDto(dto);
            }
            catch (ArgumentNullException ex)
            {
                DeleteDirectoryWithFiles(directory);
                throw new BusinessFaultException(ex.ParamName);
            }
            if (validationResult.HasErrors)
            {
                DeleteDirectoryWithFiles(directory);
                throw new BusinessFaultException(validationResult.GetErrors());
            }
            var user = Mapper.Map <ApplicationUser>(dto);

            user.CarService     = CreateCarService(dto);
            user.Id             = Guid.NewGuid().ToString();
            user.EmailConfirmed = true;

            await CreateUser(user, dto.Password, CommonRoles.CarService);
        }
Beispiel #2
0
        private CarService CreateCarService(RegistrationCarServiceDto dto)
        {
            var carService = Mapper.Map <CarService>(dto);

            carService.City = _unitOfWork.Repository <ICityRepository>().Get(dto.CityId);

            carService.Phones = Mapper.Map <List <CarServicePhone> >(dto.Phones);

            if (dto.WorkTypes != null && dto.WorkTypes.Any())
            {
                var repository = _unitOfWork.Repository <IWorkTypeRepository>();
                carService.WorkTypes = new List <WorkType>();
                foreach (var workTypeId in dto.WorkTypes)
                {
                    carService.WorkTypes.Add(repository.Get(workTypeId));
                }
            }

            if (dto.CarTags != null && dto.CarTags.Any())
            {
                var repository = _unitOfWork.Repository <ICarMarksRepository>();
                carService.CarTags = new List <CarMark>();
                foreach (var carTagId in dto.CarTags)
                {
                    carService.CarTags.Add(repository.Get(carTagId));
                }
            }

            carService.Files = new List <CarServiceFile>();

            if (dto.Logo != null)
            {
                var logo = Mapper.Map <CarServiceFile>(dto.Logo);
                logo.Type = FileType.Logo;
                carService.Files.Add(logo);
            }

            if (dto.Photos != null && dto.Photos.Any())
            {
                ((List <CarServiceFile>)carService.Files).AddRange(Mapper.Map <List <CarServiceFile> >(dto.Photos));
            }

            return(carService);
        }
        public void ValidateRegistrationCarServiceDto_Must_Validate_Registration_CarService_Dto_With_All_Possible_Errors(bool withPhones)
        {
            //Arrange
            var phone1 = "+79785166623125532";
            var phone2 = "79784124216546";
            var dto    = new RegistrationCarServiceDto
            {
                Login                = "******",
                Password             = "******",
                PasswordСonfirmation = "qwerty1",
                Name    = null,
                CityId  = 1,
                Address = "",
                Email   = "test@@test.com",
                Phones  = withPhones
                    ? new List <string> {
                    phone1, phone2
                }
                    : new List <string>(),
                ManagerName = "",
                Site        = "http12s://test.com",
                CarTags     = new List <long> {
                    1
                },
                WorkTypes = new List <long> {
                    1
                },
                Logo = new FileDto
                {
                    Name = "Test.exe",
                    Path = "Test"
                },
                Photos = new List <FileDto>
                {
                    new FileDto
                    {
                        Name = "test.txt",
                        Path = "test"
                    },
                    new FileDto
                    {
                        Name = "test.raw",
                        Path = "test"
                    }
                }
            };

            var marksRepository = new Mock <ICarMarksRepository>();

            marksRepository.Setup(act => act.Get(It.IsAny <long>())).Returns((CarMark)null);
            _unitOfWorkMock.Setup(act => act.Repository <ICarMarksRepository>()).Returns(marksRepository.Object);

            var cityRepository = new Mock <ICityRepository>();

            cityRepository.Setup(act => act.Get(dto.CityId)).Returns((City)null);
            _unitOfWorkMock.Setup(act => act.Repository <ICityRepository>()).Returns(cityRepository.Object);

            //Act
            ValidationResult result = null;

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

            //Assert
            Assert.True(result.HasErrors);
            Assert.AreEqual(ValidationErrorResources.LoginIsNotValid, result.Errors[0]);
            Assert.AreEqual(ValidationErrorResources.PasswordsNotMatch, result.Errors[1]);
            Assert.AreEqual(ValidationErrorResources.CarServiceNameIsEmpty, result.Errors[2]);
            Assert.AreEqual(ValidationErrorResources.CityNotFound, result.Errors[3]);
            Assert.AreEqual(ValidationErrorResources.CarServiceAddressIsEmpty, result.Errors[4]);
            Assert.AreEqual(ValidationErrorResources.CarServiceContactEmailIsInvalid, result.Errors[5]);
            if (withPhones)
            {
                Assert.AreEqual(string.Format(ValidationErrorResources.CarServicePhoneIsIncorrect, phone1), result.Errors[6]);
                Assert.AreEqual(string.Format(ValidationErrorResources.CarServicePhoneIsIncorrect, phone2), result.Errors[7]);
                Assert.AreEqual(ValidationErrorResources.CarServiceManagerNameIsEmpty, result.Errors[8]);
                Assert.AreEqual(ValidationErrorResources.CarServiceSiteIsIncorrect, result.Errors[9]);
                Assert.AreEqual(string.Format(ValidationErrorResources.CarMarkNotFound, "1"), result.Errors[10]);
                Assert.AreEqual(string.Format(ValidationErrorResources.InvalidFileExtension, dto.Logo.Name), result.Errors[12]);
                Assert.AreEqual(string.Format(ValidationErrorResources.InvalidFileExtension, dto.Photos[0].Name), result.Errors[13]);
                Assert.AreEqual(string.Format(ValidationErrorResources.InvalidFileExtension, dto.Photos[1].Name), result.Errors[14]);
            }
            else
            {
                Assert.AreEqual(ValidationErrorResources.CarServicePhonesIsEmpty, result.Errors[6]);
                Assert.AreEqual(ValidationErrorResources.CarServiceManagerNameIsEmpty, result.Errors[7]);
                Assert.AreEqual(ValidationErrorResources.CarServiceSiteIsIncorrect, result.Errors[8]);
                Assert.AreEqual(string.Format(ValidationErrorResources.CarMarkNotFound, "1"), result.Errors[9]);
                Assert.AreEqual(string.Format(ValidationErrorResources.InvalidFileExtension, dto.Logo.Name), result.Errors[11]);
                Assert.AreEqual(string.Format(ValidationErrorResources.InvalidFileExtension, dto.Photos[0].Name), result.Errors[12]);
                Assert.AreEqual(string.Format(ValidationErrorResources.InvalidFileExtension, dto.Photos[1].Name), result.Errors[13]);
            }
        }
        public void ValidateRegistrationCarServiceDto_Must_Validate_Registration_CarService_Dto_Without_Errors()
        {
            //Arrange
            var dto = new RegistrationCarServiceDto
            {
                Login                = "******",
                CityId               = 1,
                Password             = "******",
                PasswordСonfirmation = "qwerty",
                Name    = "Test",
                Address = "Test",
                Email   = "*****@*****.**",
                Phones  = new List <string>
                {
                    "+79785125532", "+79784216546"
                },
                ManagerName    = "Test",
                Site           = "https://test.com",
                TimetableWorks = "Test",
                WorkTypes      = new List <long>
                {
                    1, 2
                },
                CarTags = new List <long>
                {
                    1, 2
                },
                Logo = new FileDto
                {
                    Name = "Test.png",
                    Path = "Test"
                },
                Photos = new List <FileDto>
                {
                    new FileDto
                    {
                        Name = "test.png",
                        Path = "test"
                    },
                    new FileDto
                    {
                        Name = "test.png",
                        Path = "test"
                    }
                },
                About = "test"
            };

            var marksRepository = new Mock <ICarMarksRepository>();

            marksRepository.Setup(act => act.Get(It.IsAny <long>())).Returns(new CarMark());
            _unitOfWorkMock.Setup(act => act.Repository <ICarMarksRepository>()).Returns(marksRepository.Object);

            var cityRepository = new Mock <ICityRepository>();

            cityRepository.Setup(act => act.Get(dto.CityId)).Returns(new City());
            _unitOfWorkMock.Setup(act => act.Repository <ICityRepository>()).Returns(cityRepository.Object);

            //Act
            ValidationResult result = null;

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

            //Assert
            Assert.False(result.HasErrors);
        }
        public ValidationResult ValidateRegistrationCarServiceDto(RegistrationCarServiceDto dto)
        {
            if (dto == null)
            {
                throw new ArgumentNullException(ArgumentExceptionResources.RegistrationDtoNotFound);
            }
            var validationResult = new ValidationResult("Регистрация автосервиса");

            ValidateRegistartionBaseDto(dto, validationResult);

            if (string.IsNullOrEmpty(dto.Name))
            {
                validationResult.AddError(ValidationErrorResources.CarServiceNameIsEmpty);
            }

            var city = _unitOfWork.Repository <ICityRepository>().Get(dto.CityId);

            if (city == null)
            {
                validationResult.AddError(ValidationErrorResources.CityNotFound);
            }

            if (string.IsNullOrEmpty(dto.Address))
            {
                validationResult.AddError(ValidationErrorResources.CarServiceAddressIsEmpty);
            }

            if (IsInvalidEmail(dto.Email))
            {
                validationResult.AddError(ValidationErrorResources.CarServiceContactEmailIsInvalid);
            }

            if (dto.Phones == null || !dto.Phones.Any())
            {
                validationResult.AddError(ValidationErrorResources.CarServicePhonesIsEmpty);
            }
            if (dto.Phones != null)
            {
                foreach (var phone in dto.Phones)
                {
                    if (IsInvalidPhoneNumber(phone))
                    {
                        validationResult.AddError(string.Format(ValidationErrorResources.CarServicePhoneIsIncorrect, phone));
                    }
                }
            }

            if (string.IsNullOrEmpty(dto.ManagerName))
            {
                validationResult.AddError(ValidationErrorResources.CarServiceManagerNameIsEmpty);
            }

            var regex = new Regex("^(http|https)://");

            if (string.IsNullOrEmpty(dto.Site) || !regex.IsMatch(dto.Site))
            {
                validationResult.AddError(ValidationErrorResources.CarServiceSiteIsIncorrect);
            }

            if (dto.WorkTypes != null && dto.WorkTypes.Any())
            {
                var repository = _unitOfWork.Repository <IWorkTypeRepository>();
                foreach (var workType in dto.WorkTypes)
                {
                    var type = repository.Get(workType);
                    if (type == null)
                    {
                        validationResult.AddError(string.Format(ValidationErrorResources.WorkTypeNotFound, workType));
                    }
                }
            }
            else
            {
                validationResult.AddError(ValidationErrorResources.WorkTypeRequired);
            }

            if (dto.CarTags != null && dto.CarTags.Any())
            {
                var repository = _unitOfWork.Repository <ICarMarksRepository>();
                foreach (var carTagId in dto.CarTags)
                {
                    var mark = repository.Get(carTagId);
                    if (mark == null)
                    {
                        validationResult.AddError(string.Format(ValidationErrorResources.CarMarkNotFound, carTagId));
                    }
                }
            }

            if (dto.Logo != null && !IsImage(dto.Logo.Name))
            {
                validationResult.AddError(string.Format(ValidationErrorResources.InvalidFileExtension, dto.Logo.Name));
            }

            if (dto.Photos != null && dto.Photos.Any())
            {
                if (dto.Photos.Count > 5)
                {
                    validationResult.AddError(ValidationErrorResources.PhotosToMuch);
                }
                foreach (var photo in dto.Photos)
                {
                    if (!IsImage(photo.Name))
                    {
                        validationResult.AddError(string.Format(ValidationErrorResources.InvalidFileExtension, photo.Name));
                    }
                }
            }

            return(validationResult);
        }