web/test/unittest_urlrewrite.py
changeset 0 b97547f5f1fa
child 1398 5fe84a5f7035
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/test/unittest_urlrewrite.py	Wed Nov 05 15:52:50 2008 +0100
@@ -0,0 +1,101 @@
+from logilab.common.testlib import TestCase, unittest_main
+
+from cubicweb.devtools._apptest import FakeRequest
+from cubicweb.devtools.apptest import EnvBasedTC
+
+from cubicweb.web.views.urlrewrite import SimpleReqRewriter, SchemaBasedRewriter, rgx, rgx_action
+
+
+class UrlRewriteTC(TestCase):
+
+    def test_auto_extend_rules(self):
+        class Rewriter(SimpleReqRewriter):
+            rules = [
+                ('foo', dict(rql='Foo F')),
+                ('/index', dict(vid='index2')),
+                ]
+        rules = []
+        for pattern, values in Rewriter.rules:
+            if hasattr(pattern, 'pattern'):
+                pattern = pattern.pattern
+            rules.append((pattern, values))
+        self.assertListEquals(rules, [
+            ('foo' , dict(rql='Foo F')),
+            ('/index' , dict(vid='index2')),
+            ('/schema', {'vid': 'schema'}),
+            ('/myprefs', dict(vid='epropertiesform')),
+            ('/siteconfig', dict(vid='systemepropertiesform')),
+            ('/manage', dict(vid='manage')),
+            ('/notfound', {'vid': '404'}),
+            ('/error', {'vid': 'error'}),
+            ('/schema/([^/]+?)/?$', {'rql': r'Any X WHERE X is EEType, X name "\1"', 'vid': 'eschema'}),
+            ('/add/([^/]+?)/?$' , dict(vid='creation', etype=r'\1')),
+            ('/doc/images/(.+?)/?$', dict(fid='\\1', vid='wdocimages')),
+            ('/doc/?$', dict(fid='main', vid='wdoc')),
+            ('/doc/(.+?)/?$', dict(fid='\\1', vid='wdoc')),
+            ('/changelog/?$', dict(vid='changelog')),
+            # now in SchemaBasedRewriter
+            #('/search/(.+)$', dict(rql=r'Any X WHERE X has_text "\1"')), 
+            ])
+
+
+    def test_no_extend_rules(self):
+        class Rewriter(SimpleReqRewriter):
+            ignore_baseclass_rules = True
+            rules = [
+                ('foo', dict(rql='Foo F')),
+                ('/index', dict(vid='index2')),
+                ]
+        self.assertListEquals(Rewriter.rules, [
+            ('foo' , dict(rql='Foo F')),
+            ('/index' , dict(vid='index2')),
+            ])
+
+    def test_basic_transformation(self):
+        """test simple string-based rewrite"""
+        rewriter = SimpleReqRewriter()
+        req = FakeRequest()
+        self.assertRaises(KeyError, rewriter.rewrite, req, '/view?vid=whatever')
+        self.assertEquals(req.form, {})
+        rewriter.rewrite(req, '/index')
+        self.assertEquals(req.form, {'vid' : "index"})
+
+    def test_regexp_transformation(self):
+        """test regexp-based rewrite"""
+        rewriter = SimpleReqRewriter()
+        req = FakeRequest()
+        rewriter.rewrite(req, '/add/Task')
+        self.assertEquals(req.form, {'vid' : "creation", 'etype' : "Task"})
+        req = FakeRequest()
+        rewriter.rewrite(req, '/add/Task/')
+        self.assertEquals(req.form, {'vid' : "creation", 'etype' : "Task"})
+
+
+
+
+class RgxActionRewriteTC(EnvBasedTC):
+
+    def setup_database(self):
+        self.p1 = self.create_user(u'user1')
+        self.p1.set_attributes(firstname=u'joe', surname=u'Dalton')
+        self.p2 = self.create_user(u'user2')
+        self.p2.set_attributes(firstname=u'jack', surname=u'Dalton')
+
+    def test_rgx_action_with_transforms(self):
+        class TestSchemaBasedRewriter(SchemaBasedRewriter):
+            rules = [
+                (rgx('/(?P<sn>\w+)/(?P<fn>\w+)'), rgx_action(r'Any X WHERE X surname %(sn)s, X firstname %(fn)s',
+                                                                             argsgroups=('sn', 'fn'),
+                                                                             transforms={'sn' : unicode.capitalize,
+                                                                                         'fn' : unicode.lower,})),
+                ]
+        rewriter = TestSchemaBasedRewriter()
+        req = self.request()
+        pmid, rset = rewriter.rewrite(req, u'/DaLToN/JoE')
+        self.assertEquals(len(rset), 1)
+        self.assertEquals(rset[0][0], self.p1.eid)
+        
+    
+
+if __name__ == '__main__':
+    unittest_main()