fromsimplejsonimportloadsfromlogilab.common.testlibimportunittest_mainfromlogilab.mtconverterimporthtml_unescapefromcubicweb.devtools.apptestimportEnvBasedTCfromcubicweb.web.htmlwidgetsimportTableWidgetfromcubicweb.web.views.baseviewsimportvid_from_rsetdefloadjson(value):returnloads(html_unescape(value))classVidFromRsetTC(EnvBasedTC):deftest_no_rset(self):req=self.request()self.assertEquals(vid_from_rset(req,None,self.schema),'index')deftest_no_entity(self):req=self.request()rset=self.execute('Any X WHERE X login "blabla"')self.assertEquals(vid_from_rset(req,rset,self.schema),'noresult')deftest_one_entity(self):req=self.request()rset=self.execute('Any X WHERE X login "admin"')self.assertEquals(vid_from_rset(req,rset,self.schema),'primary')rset=self.execute('Any X, L WHERE X login "admin", X login L')self.assertEquals(vid_from_rset(req,rset,self.schema),'primary')req.search_state=('pasnormal',)rset=self.execute('Any X WHERE X login "admin"')self.assertEquals(vid_from_rset(req,rset,self.schema),'outofcontext-search')deftest_one_entity_eid(self):req=self.request()rset=self.execute('Any X WHERE X eid 1')self.assertEquals(vid_from_rset(req,rset,self.schema),'primary')deftest_more_than_one_entity(self):req=self.request()rset=self.execute('Any X WHERE X is EUser')self.assertEquals(vid_from_rset(req,rset,self.schema),'list')rset=self.execute('Any X, L WHERE X login L')self.assertEquals(vid_from_rset(req,rset,self.schema),'list')deftest_more_than_one_entity_by_row(self):req=self.request()rset=self.execute('Any X, G WHERE X in_group G')self.assertEquals(vid_from_rset(req,rset,self.schema),'table')deftest_more_than_one_entity_by_row_2(self):req=self.request()rset=self.execute('Any X, GN WHERE X in_group G, G name GN')self.assertEquals(vid_from_rset(req,rset,self.schema),'table')deftest_aggregat(self):req=self.request()rset=self.execute('Any X, COUNT(T) GROUPBY X WHERE X is T')self.assertEquals(vid_from_rset(req,rset,self.schema),'table')rset=self.execute('Any MAX(X) WHERE X is EUser')self.assertEquals(vid_from_rset(req,rset,self.schema),'table')deftest_subquery(self):rset=self.execute('DISTINCT Any X,N ORDERBY N ''WITH X,N BEING ('' (DISTINCT Any P,N WHERE P is EUser, P login N)'' UNION'' (DISTINCT Any W,N WHERE W is EGroup, W name N))')req=self.request()self.assertEquals(vid_from_rset(req,rset,self.schema),'table')classTableViewTC(EnvBasedTC):def_prepare_entity(self):e=self.add_entity("State",name=u'<toto>',description=u'loo"ong blabla')rset=self.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},'x')req=self.request()view=self.vreg.select_view('table',req,rset)returne,rset,viewdeftest_headers(self):self.skip('implement me')deftest_sortvalue(self):e,_,view=self._prepare_entity()expected=['<toto>','loo"ong blabla'[:10],e.creation_date.strftime('%Y-%m-%d %H:%M')]got=[loadjson(view.sortvalue(0,i))foriinxrange(3)]self.assertListEqual(got,expected)# XXX sqlite does not handle Interval correctly# value = loadjson(view.sortvalue(0, 3))# self.assertAlmostEquals(value, rset.rows[0][3].seconds)deftest_sortvalue_with_display_col(self):e,rset,view=self._prepare_entity()rqlstdescr=rset.syntax_tree().get_description()[0]# XXX missing Union supporttable=TableWidget(view)table.columns=view.get_columns(rqlstdescr,[1,2],None,None,None,None,0)expected=['loo"ong blabla'[:10],e.creation_date.strftime('%Y-%m-%d %H:%M')]got=[loadjson(value)for_,valueintable.itercols(0)]self.assertListEqual(got,expected)if__name__=='__main__':unittest_main()