コード例 #1
0
            public void WhenValidParametersAndOneRecordHasMissingFirstName_ThenReturnNull()
            {
                string filePath            = "enrollments.csv";
                var    fileReader          = new FileReader();
                var    enrollmentReader    = new Mock <IEnrollmentReader>(MockBehavior.Strict);
                var    enrollmentValidator = new EnrollmentValidator();

                var enrollmentWithMissingFirstName = new List <Enrollment>
                {
                    new Enrollment
                    {
                        FirstName     = String.Empty,
                        LastName      = "Doe",
                        DateOfBirth   = new DateTime(1970, 8, 16),
                        PlanType      = EnrollmentPlanType.FSA,
                        EffectiveDate = DateTime.Today.AddDays(3)
                    }
                };

                enrollmentReader.Setup(x => x.ReadFromFile(It.IsAny <IFileReader>(), It.IsAny <string>())).Returns(enrollmentWithMissingFirstName);

                var enrollmentImporter     = new EnrollmentImporter();
                var savedEnrollmentRecords = enrollmentImporter.Import(filePath, fileReader, enrollmentReader.Object, enrollmentValidator);

                Assert.IsTrue(savedEnrollmentRecords.IsNullOrEmpty());
            }
コード例 #2
0
        /// <summary>
        /// Main entry point of console application
        /// </summary>
        /// <param name="args">Arguments list</param>
        static void Main(string[] args)
        {
            var filePath = Path.Combine(Environment.CurrentDirectory, "Enrollments.csv");

            // Create the classes needed to read, validate and import the Enrollment data
            var fileReader          = new FileReader();
            var enrollmentCSVReader = new EnrollmentReaderCSV();
            var enrollmentValidator = new EnrollmentValidator();
            var enrollmentImporter  = new EnrollmentImporter();

            // Read in and validate the Enrollment data from the file
            var savedEnrollmentRecords = enrollmentImporter.Import(filePath, fileReader, enrollmentCSVReader, enrollmentValidator);

            // If there are no records then processing was stopped due to some invalid formatting of data in the file.
            if (savedEnrollmentRecords.IsNullOrEmpty())
            {
                Console.WriteLine("A record in the file failed validation.  Processing has stopped.");
            }
            else
            {
                // The records were read in so display them.  Some records still may be invalid.
                foreach (var enrollment in savedEnrollmentRecords)
                {
                    Console.WriteLine("\"{0},{1},{2},{3},{4},{5}\"", enrollment.Status, enrollment.FirstName, enrollment.LastName, enrollment.DateOfBirth.ToShortDateString(), enrollment.PlanType, enrollment.EffectiveDate.ToShortDateString());
                }
            }

            Console.WriteLine("Press Enter to quit");
            Console.ReadLine();
        }
コード例 #3
0
            public void WhenValidParametersAndOneRecordHasOneValidRecord_ThenReturnOneRecord()
            {
                string filePath            = "enrollments.csv";
                var    fileReader          = new FileReader();
                var    enrollmentReader    = new Mock <IEnrollmentReader>(MockBehavior.Strict);
                var    enrollmentValidator = new EnrollmentValidator();

                var enrollmentWithOneValidRecord = new List <Enrollment>
                {
                    new Enrollment
                    {
                        FirstName     = "Jane",
                        LastName      = "Doe",
                        DateOfBirth   = new DateTime(1970, 8, 16),
                        PlanType      = EnrollmentPlanType.FSA,
                        EffectiveDate = DateTime.Today.AddDays(3)
                    }
                };

                enrollmentReader.Setup(x => x.ReadFromFile(It.IsAny <IFileReader>(), It.IsAny <string>())).Returns(enrollmentWithOneValidRecord);

                var enrollmentImporter     = new EnrollmentImporter();
                var savedEnrollmentRecords = enrollmentImporter.Import(filePath, fileReader, enrollmentReader.Object, enrollmentValidator);

                Assert.IsTrue(savedEnrollmentRecords.Count == 1);
                Assert.IsTrue(savedEnrollmentRecords[0].Status == EnrollmentStatus.Accepted);
            }
コード例 #4
0
        public void Validate()
        {
            var validator        = new EnrollmentValidator();
            var validationResult = validator.Validate(this);

            if (!validationResult.IsValid)
            {
                throw new ValidationException(validationResult.Errors.Select(i => i.ErrorMessage));
            }
        }
コード例 #5
0
            public void WhenReaderIsNull_ThenExceptionIsThrown()
            {
                string filePath            = "enrollments.csv";
                var    fileReader          = new FileReader();
                var    enrollmentValidator = new EnrollmentValidator();

                var enrollmentImporter = new EnrollmentImporter();

                enrollmentImporter.Import(filePath, fileReader, null, enrollmentValidator);
            }
コード例 #6
0
            public void WhenFilePathIsNull_ThenExceptionIsThrown()
            {
                string filePath            = null;
                var    fileReader          = new FileReader();
                var    enrollmentReader    = new EnrollmentReaderCSV();
                var    enrollmentValidator = new EnrollmentValidator();

                var enrollmentImporter = new EnrollmentImporter();

                enrollmentImporter.Import(filePath, fileReader, enrollmentReader, enrollmentValidator);
            }
コード例 #7
0
            public void WhenFilePathIsEmpty_ThenExceptionIsThrown()
            {
                var filePath            = String.Empty;
                var fileReader          = new FileReader();
                var enrollmentReader    = new EnrollmentReaderCSV();
                var enrollmentValidator = new EnrollmentValidator();

                var enrollmentImporter = new EnrollmentImporter();

                enrollmentImporter.Import(filePath, fileReader, enrollmentReader, enrollmentValidator);
            }
コード例 #8
0
            public void WhenDateOfBirthIsMinDate_ThenExceptionIsThrown()
            {
                var enrollmentRecord = new Enrollment
                {
                    FirstName     = "Jane",
                    LastName      = "Doe",
                    DateOfBirth   = DateTime.MinValue,
                    PlanType      = EnrollmentPlanType.HSA,
                    EffectiveDate = DateTime.Today.AddDays(5)
                };

                var enrollmentValidator = new EnrollmentValidator();

                var isValid = enrollmentValidator.Validate(enrollmentRecord);
            }
コード例 #9
0
            public void WhenLastNameIsEmpty_ThenExceptionIsThrown()
            {
                var enrollmentRecord = new Enrollment
                {
                    FirstName     = "Jane",
                    LastName      = String.Empty,
                    DateOfBirth   = new DateTime(1983, 9, 13),
                    PlanType      = EnrollmentPlanType.HSA,
                    EffectiveDate = DateTime.Today.AddDays(5)
                };

                var enrollmentValidator = new EnrollmentValidator();

                var isValid = enrollmentValidator.Validate(enrollmentRecord);
            }
コード例 #10
0
            public void WhenPlanTypeIsNone_ThenExceptionIsThrown()
            {
                var enrollmentRecord = new Enrollment
                {
                    FirstName     = "Jane",
                    LastName      = "Doe",
                    DateOfBirth   = new DateTime(1975, 7, 28),
                    PlanType      = EnrollmentPlanType.None,
                    EffectiveDate = DateTime.Today.AddDays(5)
                };

                var enrollmentValidator = new EnrollmentValidator();

                var isValid = enrollmentValidator.Validate(enrollmentRecord);
            }
コード例 #11
0
            public void WhenEffectiveDateMoreThan30DaysInFuture_ThenReturnsFalse()
            {
                var effectiveDate = DateTime.Today.AddDays(53);

                var enrollmentRecord = new Enrollment
                {
                    FirstName     = "Jane",
                    LastName      = "Doe",
                    DateOfBirth   = new DateTime(1973, 3, 14),
                    PlanType      = EnrollmentPlanType.HSA,
                    EffectiveDate = effectiveDate
                };

                var enrollmentValidator = new EnrollmentValidator();

                var isValid = enrollmentValidator.Validate(enrollmentRecord);

                Assert.IsFalse(isValid);
            }
コード例 #12
0
            public void WhenDateOfBirthIsLessThan18_ThenReturnsFalse()
            {
                var dateOfBirth = DateTime.Today.AddYears(-1);

                var enrollmentRecord = new Enrollment
                {
                    FirstName     = "Jane",
                    LastName      = "Doe",
                    DateOfBirth   = dateOfBirth,
                    PlanType      = EnrollmentPlanType.HSA,
                    EffectiveDate = DateTime.Today.AddDays(3)
                };

                var enrollmentValidator = new EnrollmentValidator();

                var isValid = enrollmentValidator.Validate(enrollmentRecord);

                Assert.IsFalse(isValid);
            }
コード例 #13
0
        public dynamic Post(string enrollmentNumber)
        {
            Enrollment enrollment = _enrollmentService.List().Single(x => x.ExternalId == enrollmentNumber);

            if (enrollment == null)
            {
                return(new BadRequestObjectResult(new { messages = new List <string> {
                                                            onboarding.Resources.Messages.EnrollmentLinkIsNotValid
                                                        } }));
            }

            if (!enrollment.IsDeadlineValid())
            {
                return(new BadRequestObjectResult(new { messages = new List <string> {
                                                            onboarding.Resources.Messages.OnboardingExpired
                                                        } }));
            }

            if (enrollment.SentAt.HasValue)
            {
                return(new BadRequestObjectResult(new { messages = new List <string> {
                                                            onboarding.Resources.Messages.EnrollmentInReview
                                                        } }));
            }

            string personalDataStatus = (new PersonalDataStatus(new PersonalDataValidator(_context), enrollment.PersonalData)).GetStatus();
            string financeDataStatus  = (new FinanceDataStatus(new FinanceDataValidator(_context), enrollment.FinanceData, new FinanceDataMessagesValidator(_context))).GetStatus();

            EnrollmentValidator enrollmentValidator = new EnrollmentValidator(_context);

            FluentValidation.Results.ValidationResult enrollmentValidatorResult = enrollmentValidator.Validate(enrollment);
            List <string> messages = enrollmentValidatorResult.Errors.Select(x => x.ErrorMessage).Distinct().ToList();

            if (personalDataStatus == "valid" && financeDataStatus == "valid" && enrollmentValidatorResult.IsValid)
            {
                string body        = GetEmailBody("enrollment_sent.html");
                string subject     = "Sua matricula foi enviada para análise";
                string messageBody = GetEmailBody("enrollment_sent.html")
                                     .Replace("{student_name}", enrollment.PersonalData.AssumedName)
                                     .Replace("{send_at}", enrollment.SentAt.Value.ToString("dd/MM/yyyy"))
                                     .Replace("{send_at_hour}", enrollment.SentAt.Value.ToString("HH:mm"));

                BackgroundJob.Enqueue(() => (new EmailHelper()).SendEmail(messageBody, subject, _configuration["EMAIL_SENDER"], enrollment.PersonalData.Email, _configuration["SMTP_USERNAME"], _configuration["SMTP_PASSWORD"]));

                enrollment.SentAt = DateTime.Now;
                _enrollmentService.Update(enrollment);

                return(Ok());
            }
            else
            {
                if (personalDataStatus != "valid")
                {
                    messages.Add("Os dados pessoais estão inválidos");
                }
                if (financeDataStatus != "valid")
                {
                    messages.Add("Os dados financeiros estão inválidos");
                }

                return(new BadRequestObjectResult(new { messages }));
            }
        }
コード例 #14
0
 public EnrollmentValidatorTest()
 {
     _validator = new EnrollmentValidator();
 }