use super::*;
#[test]
fn test_filter() {
let condition_a = Condition::<&str>::new("cn").not();
let condition_b = Condition::<&str>::new("uid").value("test");
let condition_c = Condition::<&str>::new("mail").value("test@example.org");
assert_eq!(condition_a.to_ldap_filter(), "(!(cn=*))");
assert_eq!(condition_b.to_ldap_filter(), "(uid=test)");
assert_eq!((&condition_a & &condition_b).to_ldap_filter(), "(&(!(cn=*))(uid=test))");
assert_eq!((&condition_a | &condition_b).to_ldap_filter(), "(|(!(cn=*))(uid=test))");
assert_eq!((&condition_a | &condition_b | &condition_c).to_ldap_filter(), "(|(!(cn=*))(uid=test)(mail=test@example.org))");
assert_eq!((&condition_a & &condition_b & &condition_c).to_ldap_filter(), "(&(!(cn=*))(uid=test)(mail=test@example.org))");
assert_eq!(((&condition_a | &condition_b) | (&condition_a & &condition_b)).to_ldap_filter(), "(|(|(!(cn=*))(uid=test))(&(!(cn=*))(uid=test)))");
assert_eq!(((&condition_a | &condition_b) & (&condition_a & &condition_b)).to_ldap_filter(), "(&(|(!(cn=*))(uid=test))(&(!(cn=*))(uid=test)))");
assert_eq!(((&condition_a | &condition_b).not() & (&condition_a & &condition_b)).to_ldap_filter(), "(&(!(|(!(cn=*))(uid=test)))(&(!(cn=*))(uid=test)))");
assert_eq!(((&condition_a | &condition_b).not().not() & (&condition_a & &condition_b)).not().to_ldap_filter(), "(!(&(|(!(cn=*))(uid=test))(&(!(cn=*))(uid=test))))");
}