public void ValidateCredentialsTest()
        {
            // Arrange.
            const string LdapServer = "Test Server";
            const string Username = "******";
            const string ValidPassword = "******";
            const string InvalidPassword = "******";
            const ContextOptions ContextOptions = ContextOptions.SimpleBind | ContextOptions.ServerBind;

            var systemOptions = Mock.Create<ISystemOptionsInfo>();
            Mock.Arrange(() => systemOptions.LdapProfiles).Returns(Mock.Create<ILdapProfileList>());
            Mock.Arrange(() => systemOptions.LdapProfiles[0]).Returns(Mock.Create<ILdapProfileInfo>());
            Mock.Arrange(() => systemOptions.LdapProfiles[0].Id).Returns(1);
            Mock.Arrange(() => systemOptions.LdapProfiles[0].UseForLogin).Returns(true);
            Mock.Arrange(() => systemOptions.LdapProfiles[0].ServerPath).Returns(LdapServer);

            var systemOptionsRetriever = Mock.Create<ISystemOptionsInfoRetriever>();
            Mock.Arrange(() => systemOptionsRetriever.GetSystemOptions()).Returns(systemOptions);

            var validator = new DirectoryCredentialsValidator { SystemOptionsRetriever = systemOptionsRetriever };

            var context = Mock.Create<PrincipalContext>();
            Mock.Arrange(
                () =>
                new PrincipalContext(
                    Arg.IsAny<ContextType>(), Arg.AnyString, Arg.AnyString, Arg.IsAny<ContextOptions>(), Arg.AnyString, Arg.AnyString)).DoNothing();
            Mock.Arrange(() => context.ValidateCredentials(Username, ValidPassword, ContextOptions)).IgnoreInstance().Returns(true);
            Mock.Arrange(() => context.ValidateCredentials(Username, InvalidPassword, ContextOptions)).IgnoreInstance().Returns(false);

            // Act / Assert.
            Assert.IsTrue(validator.ValidateCredentials(Username, systemOptions.LdapProfiles[0], ValidPassword));
            Assert.IsFalse(validator.ValidateCredentials(Username, systemOptions.LdapProfiles[0], InvalidPassword));
        }
        public void WhenSystemOptionsAreInvalidValidateCredentialsThrows()
        {
            // Arrange.
            var systemOptionsRetriever = Mock.Create<ISystemOptionsInfoRetriever>();
            Mock.Arrange(() => systemOptionsRetriever.GetSystemOptions()).Returns(() => null);

            var validator = new DirectoryCredentialsValidator { SystemOptionsRetriever = systemOptionsRetriever };

            // Act / Assert.
            TestsHelper.VerifyThrow<InvalidOperationException>(() => validator.ValidateCredentials("user", Mock.Create<ILdapProfile>(), "password"));

            // Arrange.
            var systemOptions = Mock.Create<ISystemOptionsInfo>();
            Mock.Arrange(() => systemOptions.LdapProfiles).Returns(Mock.Create<ILdapProfileList>());
            Mock.Arrange(() => systemOptions.LdapProfiles[0]).Returns(Mock.Create<ILdapProfileInfo>());
            Mock.Arrange(() => systemOptions.LdapProfiles[0].Id).Returns(1);
            Mock.Arrange(() => systemOptions.LdapProfiles[0].UseForLogin).Returns(true);
            Mock.Arrange(() => systemOptions.LdapProfiles[0].ServerPath).Returns(string.Empty);

            Mock.Arrange(() => systemOptionsRetriever.GetSystemOptions()).Returns(systemOptions);

            // Act / Assert
            TestsHelper.VerifyThrow<InvalidOperationException>(() => validator.ValidateCredentials("user", systemOptions.LdapProfiles[0], "password"));
        }