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 Computers_With_Operating_System()
        {
            // Arrange
            const string expected = "(&(objectCategory=computer)(operatingSystem=*vista*))";

            // Act
            var filter = ActiveDirectoryCommonFilters.ComputersWithOS("vista");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void Group_With_Strict_Search()
        {
            // Arrange
            const string expected = "(&(objectCategory=group)(sAMAccountName=domain))";

            // Act
            var filter = ActiveDirectoryCommonFilters.Group("domain");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void Computers_Name_Containing()
        {
            // Arrange
            const string expected = "(&(objectCategory=computer)(name=*ex*))";

            // Act
            var filter = ActiveDirectoryCommonFilters.ComputersNameContaining("ex");

            // 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_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_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_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_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 Computers_With_Operating_System_And_Service_Pack()
        {
            // Arrange
            const string expected = "(&(&(objectCategory=computer)"
                                    + "(operatingSystem=*server*))"
                                    + "(operatingSystemServicePack=*1*))";

            // Act
            var filter = ActiveDirectoryCommonFilters.ComputersWithOsAndSp("server", 1);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void Users_Created_Before_Date()
        {
            // Arrange
            const string expected = "(&(&(objectCategory=person)(objectClass=user))"
                                    + "(whenCreated<=20090501000000.0Z))";
            var theDate = new DateTime(2009, 5, 1);

            // Act
            var filter = ActiveDirectoryCommonFilters.UsersCreatedBeforeDate(theDate);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void Contacts_In_Group()
        {
            // Arrange
            const string expected = "(&(&(objectCategory=person)(objectClass=contact))"
                                    + "(memberOf=CN=TEST,OU=Groups,OU=HDQRK,DC=COMPANY,DC=COM))";

            // Act
            var filter = ActiveDirectoryCommonFilters.ContactsInGroup(
                DistinguishedName.Parse(
                    "CN=TEST,OU=Groups,OU=HDQRK,DC=COMPANY,DC=COM"));

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