public void Constructor_Should_ThrowInvalidOperationException_When_ProvideNullValue()
        {
            // Arrange
            const ADS_USER_FLAG invalid = (ADS_USER_FLAG)99;

            // Act and Assert

            Assert.Throws <InvalidOperationException>(
                () => _ = ActiveDirectoryCommonFilters.UserAccessControl(invalid));
        }
        public void UAC_USE_DES_KEY_ONLY()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=2097152)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.USE_DES_KEY_ONLY);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void UAC_WORKSTATION_TRUST_ACCOUNT()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=4096)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.WORKSTATION_TRUST_ACCOUNT);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void UAC_TEMP_DUPLICATE_ACCOUNT()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=256)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.TEMP_DUPLICATE_ACCOUNT);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void UAC_TRUSTED_TO_AUTH_FOR_DELEGATION()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=16777216)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void UAC_SMARTCARD_REQUIRED()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=262144)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.SMARTCARD_REQUIRED);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void UAC_PASSWORD_EXPIRED()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=8388608)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.PASSWORD_EXPIRED);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void UAC_NOT_DELEGATED()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=1048576)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.NOT_DELEGATED);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void UAC_ENCRYPTED_TEXT_PWD_ALLOWED()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=128)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.ENCRYPTED_TEXT_PASSWORD_ALLOWED);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void UAC_DONT_REQ_PREAUTH()
        {
            // Arrange
            const string expected = "(userAccountControl:1.2.840.113556.1.4.803:=4194304)";

            // Act
            var filter = ActiveDirectoryCommonFilters.UserAccessControl(
                ADS_USER_FLAG.DONT_REQUIRE_PREAUTH);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void Users_Whose_Passwords_Do_Not_Expire()
        {
            // Arrange
            const string expected = "(&(&(objectCategory=person)(objectClass=user))"
                                    + "(userAccountControl:1.2.840.113556.1.4.803:=65536))";

            // Act
            var filter = LdapFilter.And(
                ActiveDirectoryCommonFilters.Users,
                ActiveDirectoryCommonFilters.UserAccessControl(ADS_USER_FLAG.DONT_EXPIRE_PASSWD));

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void Users_Who_Are_Locked_Out()
        {
            // Arrange
            const string expected = "(&(&(objectCategory=person)(objectClass=user))"
                                    + "(userAccountControl:1.2.840.113556.1.4.803:=16))";

            // Act
            var filter = LdapFilter.And(
                ActiveDirectoryCommonFilters.Users,
                ActiveDirectoryCommonFilters.UserAccessControl(ADS_USER_FLAG.LOCKOUT));

            // Assert
            Assert.Equal(expected, filter.ToString());
        }