public void PaymentAmount_Is_Zero_Generates_Error()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                PaymentAmount = 0.00M
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.True(result.Errors.Any(e => e.ErrorMessage == "PaymentAmount must be greater than 0"));
        }
        public void PaymentAmount_Is_One_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                PaymentAmount = 0.01M
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "PaymentAmount must be greater than 0"));
        }
        public void ExecutionFrequencyType_Is_BiWeekly_ExecutionFrequencyParameter_Is_7_Generates_Error()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                ExecutionFrequencyType = ExecutionFrequencyType.BiWeekly, ExecutionFrequencyParameter = 7
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "ExecutionFrequencyParameter must be a value 1-7 (Sunday - Saturday), when ExecutionFrequencyType is Weekly or BiWeekly"));
        }
        public void Description_Is_Empty_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                Description = ""
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "Description can not exceed 2048 characters"));
        }
        public void ExecutionFrequencyType_Is_SpecificDayOfMonth_ExecutionFrequencyParameter_Is_31_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                ExecutionFrequencyType = ExecutionFrequencyType.SpecificDayOfMonth, ExecutionFrequencyParameter = 31
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "ExecutionFrequencyParameter must be a value 1-7 (Sunday - Saturday), when ExecutionFrequencyType is SpecificDayOfMonth.  Note: If you want to bill on the 30th or 31st, use the LastDayOfMonth ExecutionFrequencyType"));
        }
        public void FirstPaymentDate_In_The_Future_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                FirstPaymentDate = DateTime.Now.AddDays(2), StartDate = DateTime.Now.AddDays(3)
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "FirstPaymentDate must be a current or future date and must be a date before StartDate"));
        }
        public void AccountId_Is_One_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                AccountId = 1
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "AccountId is required"));
        }
        public void OrderId_Is_Empty_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                OrderId = ""
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "OrderId cannot exceed 50 characters"));
        }
        public void AccountId_Is_Zero_Generates_Error()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                AccountId = 0
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.True(result.Errors.Any(e => e.ErrorMessage == "AccountId is required"));
        }
        public void OrderId_Exceeds_50_Characters_Generates_Error()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                OrderId = "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.True(result.Errors.Any(e => e.ErrorMessage == "OrderId cannot exceed 50 characters"));
        }
        public void EndDate_Is_After_StartDate_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                StartDate = DateTime.Now.AddDays(3), EndDate = DateTime.Now.AddDays(4)
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "EndDate must be after StartDate"));
        }
        public void EndDate_Is_Empty_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                EndDate = null
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "EndDate must be after StartDate"));
        }
        public void StartDate_In_The_Future_Is_Valid()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                StartDate = DateTime.Now.AddDays(1)
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.False(result.Errors.Any(e => e.ErrorMessage == "StartDate must be in the future"));
        }
        public void StartDate_Is_Empty_Generates_Error()
        {
            // Arrange
            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                StartDate = null
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.True(result.Errors.Any(e => e.ErrorMessage == "StartDate is required"));
        }
        public void Description_Exceeds_2048_Characters_Generates_Error()
        {
            // Arrange
            var description = new StringBuilder();

            for (int i = 0; i < 2049; i++)
            {
                description.Append("k");
            }

            var validator        = new RecurringPaymentValidator <RecurringPayment>();
            var recurringPayment = new RecurringPayment {
                Description = description.ToString()
            };

            // Act
            var result = validator.Validate(recurringPayment);

            // Assert
            Assert.True(result.Errors.Any(e => e.ErrorMessage == "Description can not exceed 2048 characters"));
        }