# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr## This file is part of CubicWeb.## CubicWeb is free software: you can redistribute it and/or modify it under the# terms of the GNU Lesser General Public License as published by the Free# Software Foundation, either version 2.1 of the License, or (at your option)# any later version.## CubicWeb is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more# details.## You should have received a copy of the GNU Lesser General Public License along# with CubicWeb. If not, see <http://www.gnu.org/licenses/>.fromlogilab.common.testlibimportunittest_mainfromlogilab.mtconverterimporthtml_unescapefromcubicweb.devtools.testlibimportCubicWebTCfromcubicweb.utilsimportjsonfromcubicweb.viewimportStartupView,TRANSITIONAL_DOCTYPEfromcubicweb.web.viewsimportvid_from_rsetdefloadjson(value):returnjson.loads(html_unescape(value))classVidFromRsetTC(CubicWebTC):deftest_no_rset(self):withself.admin_access.web_request()asreq:self.assertEqual(vid_from_rset(req,None,self.schema),'index')deftest_no_entity(self):withself.admin_access.web_request()asreq:rset=req.execute('Any X WHERE X login "blabla"')self.assertEqual(vid_from_rset(req,rset,self.schema),'noresult')deftest_one_entity(self):withself.admin_access.web_request()asreq:rset=req.execute('Any X WHERE X login "admin"')self.assertEqual(vid_from_rset(req,rset,self.schema),'primary')rset=req.execute('Any X, L WHERE X login "admin", X login L')self.assertEqual(vid_from_rset(req,rset,self.schema),'primary')req.search_state=('pasnormal',)rset=req.execute('Any X WHERE X login "admin"')self.assertEqual(vid_from_rset(req,rset,self.schema),'outofcontext-search')deftest_one_entity_eid(self):withself.admin_access.web_request()asreq:rset=req.execute('Any X WHERE X eid 1')self.assertEqual(vid_from_rset(req,rset,self.schema),'primary')deftest_more_than_one_entity_same_type(self):withself.admin_access.web_request()asreq:rset=req.execute('Any X WHERE X is CWUser')self.assertEqual(vid_from_rset(req,rset,self.schema),'sameetypelist')rset=req.execute('Any X, L WHERE X login L')self.assertEqual(vid_from_rset(req,rset,self.schema),'sameetypelist')deftest_more_than_one_entity_diff_type(self):withself.admin_access.web_request()asreq:rset=req.execute('Any X WHERE X is IN (CWUser, CWGroup)')self.assertEqual(vid_from_rset(req,rset,self.schema),'list')deftest_more_than_one_entity_by_row(self):withself.admin_access.web_request()asreq:rset=req.execute('Any X, G WHERE X in_group G')self.assertEqual(vid_from_rset(req,rset,self.schema),'table')deftest_more_than_one_entity_by_row_2(self):withself.admin_access.web_request()asreq:rset=req.execute('Any X, GN WHERE X in_group G, G name GN')self.assertEqual(vid_from_rset(req,rset,self.schema),'table')deftest_aggregat(self):withself.admin_access.web_request()asreq:rset=req.execute('Any X, COUNT(T) GROUPBY X WHERE X is T')self.assertEqual(vid_from_rset(req,rset,self.schema),'table')rset=req.execute('Any MAX(X) WHERE X is CWUser')self.assertEqual(vid_from_rset(req,rset,self.schema),'table')deftest_subquery(self):withself.admin_access.web_request()asreq:rset=req.execute('DISTINCT Any X,N ORDERBY N ''WITH X,N BEING ('' (DISTINCT Any P,N WHERE P is CWUser, P login N)'' UNION'' (DISTINCT Any W,N WHERE W is CWGroup, W name N))')self.assertEqual(vid_from_rset(req,rset,self.schema),'table')classTableViewTC(CubicWebTC):def_prepare_entity(self,req):e=req.create_entity("State",name=u'<toto>',description=u'loo"ong blabla')rset=req.execute('Any X, D, CD, NOW - CD WHERE X is State, ''X description D, X creation_date CD, X eid %(x)s',{'x':e.eid})view=self.vreg['views'].select('table',req,rset=rset)returne,rset,viewdeftest_sortvalue(self):withself.admin_access.web_request()asreq:e,_,view=self._prepare_entity(req)colrenderers=view.build_column_renderers()[:3]self.assertListEqual([renderer.sortvalue(0)forrendererincolrenderers],[u'<toto>',u'loo"ong blabla',e.creation_date])classHTMLStreamTests(CubicWebTC):deftest_set_doctype_reset_xmldecl(self):""" tests `cubicweb.web.request.CubicWebRequestBase.set_doctype` with xmldecl reset """classMyView(StartupView):__regid__='my-view'defcall(self):self._cw.set_doctype('<!DOCTYPE html>')withself.admin_access.web_request()asreq:withself.temporary_appobjects(MyView):html_source=self.view('my-view',req=req).sourcesource_lines=[line.strip()forlineinhtml_source.splitlines(False)ifline.strip()]self.assertListEqual(['<!DOCTYPE html>','<html xmlns:cubicweb="http://www.cubicweb.org" lang="en">'],source_lines[:2])deftest_set_doctype_no_reset_xmldecl(self):""" tests `cubicweb.web.request.CubicWebRequestBase.set_doctype` with no xmldecl reset """html_doctype=TRANSITIONAL_DOCTYPE.strip()classMyView(StartupView):__regid__='my-view'defcall(self):self._cw.set_doctype(html_doctype)self._cw.main_stream.set_htmlattrs([('lang','cz')])withself.admin_access.web_request()asreq:withself.temporary_appobjects(MyView):html_source=self.view('my-view',req=req).sourcesource_lines=[line.strip()forlineinhtml_source.splitlines(False)ifline.strip()]self.assertListEqual([html_doctype,'<html xmlns:cubicweb="http://www.cubicweb.org" lang="cz">','<head>'],source_lines[:3])if__name__=='__main__':unittest_main()