/// <summary>
 /// Constructs an instance of the `Validator` class using the settings passed
 /// into the constructor.
 /// </summary>
 /// <param name="settings">The settings that define the rules by which
 /// to validate a password.</param>
 public Validator(IPasswordValidationSettings settings)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     _validationChain = ValidationServiceLocator.GetValidationHandlerChain(settings);
 }
        public void Validate_TwoChainedHandlers_LogLengthIsTwo()
        {
            var node1 = new ValidationHandlerNode(new AlwaysPassesValidationHandler());
            var node2 = new ValidationHandlerNode(new AlwaysPassesValidationHandler());

            node1.Successor = node2;
            node1.Validate("");
            Assert.AreEqual(2, log.Length);
        }
        public void Validate_TwoChainedHanldersFirstFails_LogLengthIsOne()
        {
            var node1 = new ValidationHandlerNode(new AlwaysFailsValidationHandler());
            var node2 = new ValidationHandlerNode(new AlwaysPassesValidationHandler());

            node1.Successor = node2;
            node1.Validate("");
            Assert.AreEqual(1, log.Length);
            Assert.AreEqual("F", log);
        }
        public void Validate_ThreeChainedHanldersMiddleFails_LogLengthIsTwo()
        {
            var node1 = new ValidationHandlerNode(new AlwaysPassesValidationHandler());
            var node2 = new ValidationHandlerNode(new AlwaysFailsValidationHandler());
            var node3 = new ValidationHandlerNode(new AlwaysPassesValidationHandler());

            node1.Successor = node2;
            node2.Successor = node3;
            node1.Validate("");
            Assert.AreEqual(2, log.Length);
            Assert.AreEqual("TF", log);
        }
        public void Validate_ThreeChainedHanldersAllPass_LogLengthIsThree()
        {
            var node1 = new ValidationHandlerNode(new AlwaysPassesValidationHandler());
            var node2 = new ValidationHandlerNode(new AlwaysPassesValidationHandler());
            var node3 = new ValidationHandlerNode(new AlwaysPassesValidationHandler());

            node1.Successor = node2;
            node2.Successor = node3;
            bool result = node1.Validate("");

            Assert.AreEqual(3, log.Length);
            Assert.AreEqual("TTT", log);
            Assert.IsTrue(result);
        }