""":organization: Logilab:copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses"""fromlogilab.common.testlibimportTestCase,unittest_mainfromcubicweb.devtools._apptestimportFakeRequestfromcubicweb.devtools.apptestimportEnvBasedTCfromcubicweb.web.views.urlrewriteimportSimpleReqRewriter,SchemaBasedRewriter,rgx,rgx_actionclassUrlRewriteTC(TestCase):deftest_auto_extend_rules(self):classRewriter(SimpleReqRewriter):rules=[('foo',dict(rql='Foo F')),('/index',dict(vid='index2')),]rules=[]forpattern,valuesinRewriter.rules:ifhasattr(pattern,'pattern'):pattern=pattern.patternrules.append((pattern,values))self.assertListEquals(rules,[('foo',dict(rql='Foo F')),('/index',dict(vid='index2')),('/schema',dict(vid='schema')),('/myprefs',dict(vid='propertiesform')),('/siteconfig',dict(vid='systempropertiesform')),('/siteinfo',dict(vid='info')),('/manage',dict(vid='manage')),('/notfound',dict(vid='404')),('/error',dict(vid='error')),('/sparql',dict(vid='sparql')),('/schema/([^/]+?)/?$',{'rql':r'Any X WHERE X is CWEType, 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"')),])deftest_no_extend_rules(self):classRewriter(SimpleReqRewriter):ignore_baseclass_rules=Truerules=[('foo',dict(rql='Foo F')),('/index',dict(vid='index2')),]self.assertListEquals(Rewriter.rules,[('foo',dict(rql='Foo F')),('/index',dict(vid='index2')),])deftest_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"})deftest_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"})classRgxActionRewriteTC(EnvBasedTC):defsetup_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')deftest_rgx_action_with_transforms(self):classTestSchemaBasedRewriter(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()