add support for 'contains' filter (Jeff Schroeder)
[matthijs/upstream/django-ldapdb.git] / ldapdb / tests.py
index d64ff4625a354ee00796591174db70cdb27b1ea9..1e328ec5ffecf6ddf947896704cf1b21986c3759 100644 (file)
 from django.test import TestCase
 from django.db.models.sql.where import Constraint, AND, OR
 
-from ldapdb.models.query import WhereNode
+from ldapdb.models.fields import CharField
+from ldapdb.models.query import WhereNode, escape_ldap_filter
 
 class WhereTestCase(TestCase):
+    def test_escape(self):
+        self.assertEquals(escape_ldap_filter('foo*bar'), 'foo\\2abar')
+        self.assertEquals(escape_ldap_filter('foo(bar'), 'foo\\28bar')
+        self.assertEquals(escape_ldap_filter('foo)bar'), 'foo\\29bar')
+        self.assertEquals(escape_ldap_filter('foo\\bar'), 'foo\\5cbar')
+        self.assertEquals(escape_ldap_filter('foo\\bar*wiz'), 'foo\\5cbar\\2awiz')
+
     def test_single(self):
         where = WhereNode()
         where.add((Constraint("cn", "cn", None), 'exact', "test"), AND)
@@ -41,6 +49,15 @@ class WhereTestCase(TestCase):
         where.add((Constraint("cn", "cn", None), 'in', ["foo", "bar"]), AND)
         self.assertEquals(where.as_sql(), "(|(cn=foo)(cn=bar))")
 
+        where = WhereNode()
+        where.add((Constraint("cn", "cn", None), 'contains', "test"), AND)
+        self.assertEquals(where.as_sql(), "(cn=*test*)")
+
+    def test_escaped(self):
+        where = WhereNode()
+        where.add((Constraint("cn", "cn", None), 'exact', "(test)"), AND)
+        self.assertEquals(where.as_sql(), "(cn=\\28test\\29)")
+
     def test_and(self):
         where = WhereNode()
         where.add((Constraint("cn", "cn", None), 'exact', "foo"), AND)