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);
 }
 /// <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_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);
 }