test/unittest_rset.py
changeset 8049 a48301a44b50
parent 7791 31bb51ea5485
parent 8048 10a0f73d834d
child 8087 dc788369d35f
equal deleted inserted replaced
8046:bdd555df7a91 8049:a48301a44b50
   105         #                  '%stask/title/go' % baseurl)
   105         #                  '%stask/title/go' % baseurl)
   106         # empty _restpath should not crash
   106         # empty _restpath should not crash
   107         self.compare_urls(req.build_url('view', _restpath=''), baseurl)
   107         self.compare_urls(req.build_url('view', _restpath=''), baseurl)
   108 
   108 
   109 
   109 
   110     def test_resultset_build(self):
   110     def test_build(self):
   111         """test basic build of a ResultSet"""
   111         """test basic build of a ResultSet"""
   112         rs = ResultSet([1,2,3], 'CWGroup X', description=['CWGroup', 'CWGroup', 'CWGroup'])
   112         rs = ResultSet([1,2,3], 'CWGroup X', description=['CWGroup', 'CWGroup', 'CWGroup'])
   113         self.assertEqual(rs.rowcount, 3)
   113         self.assertEqual(rs.rowcount, 3)
   114         self.assertEqual(rs.rows, [1,2,3])
   114         self.assertEqual(rs.rows, [1,2,3])
   115         self.assertEqual(rs.description, ['CWGroup', 'CWGroup', 'CWGroup'])
   115         self.assertEqual(rs.description, ['CWGroup', 'CWGroup', 'CWGroup'])
   116 
   116 
   117 
   117 
   118     def test_resultset_limit(self):
   118     def test_limit(self):
   119         rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
   119         rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
   120                        'Any U,L where U is CWUser, U login L',
   120                        'Any U,L where U is CWUser, U login L',
   121                        description=[['CWUser', 'String']] * 3)
   121                        description=[['CWUser', 'String']] * 3)
   122         rs.req = self.request()
   122         rs.req = self.request()
   123         rs.vreg = self.vreg
   123         rs.vreg = self.vreg
   126         self.assertEqual(rs2.rows, [[13000, 'syt'], [14000, 'nico']])
   126         self.assertEqual(rs2.rows, [[13000, 'syt'], [14000, 'nico']])
   127         self.assertEqual(rs2.get_entity(0, 0).cw_row, 0)
   127         self.assertEqual(rs2.get_entity(0, 0).cw_row, 0)
   128         self.assertEqual(rs.limit(2, offset=2).rows, [[14000, 'nico']])
   128         self.assertEqual(rs.limit(2, offset=2).rows, [[14000, 'nico']])
   129         self.assertEqual(rs.limit(2, offset=3).rows, [])
   129         self.assertEqual(rs.limit(2, offset=3).rows, [])
   130 
   130 
   131 
   131     def test_limit_2(self):
   132     def test_resultset_filter(self):
   132         req = self.request()
       
   133         # drop user from cache for the sake of this test
       
   134         req.drop_entity_cache(req.user.eid)
       
   135         rs = req.execute('Any E,U WHERE E is CWEType, E created_by U')
       
   136         # get entity on row 9. This will fill its created_by relation cache,
       
   137         # with cwuser on row 9 as well
       
   138         e1 = rs.get_entity(9, 0)
       
   139         # get entity on row 10. This will fill its created_by relation cache,
       
   140         # with cwuser built on row 9
       
   141         e2 = rs.get_entity(10, 0)
       
   142         # limit result set from row 10
       
   143         rs.limit(1, 10, inplace=True)
       
   144         # get back eid
       
   145         e = rs.get_entity(0, 0)
       
   146         self.assertTrue(e2 is e)
       
   147         # rs.limit has properly removed cwuser for request cache, but it's
       
   148         # still referenced by e/e2 relation cache
       
   149         u = e.created_by[0]
       
   150         # now ensure this doesn't trigger IndexError because cwuser.cw_row is 9
       
   151         # while now rset has only one row
       
   152         u.cw_rset[u.cw_row]
       
   153 
       
   154     def test_filter(self):
   133         rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
   155         rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
   134                        'Any U,L where U is CWUser, U login L',
   156                        'Any U,L where U is CWUser, U login L',
   135                        description=[['CWUser', 'String']] * 3)
   157                        description=[['CWUser', 'String']] * 3)
   136         rs.req = self.request()
   158         rs.req = self.request()
   137         rs.vreg = self.vreg
   159         rs.vreg = self.vreg
   140 
   162 
   141         rs2 = rs.filtered_rset(test_filter)
   163         rs2 = rs.filtered_rset(test_filter)
   142         self.assertEqual(len(rs2), 2)
   164         self.assertEqual(len(rs2), 2)
   143         self.assertEqual([login for _, login in rs2], ['adim', 'syt'])
   165         self.assertEqual([login for _, login in rs2], ['adim', 'syt'])
   144 
   166 
   145     def test_resultset_transform(self):
   167     def test_transform(self):
   146         rs = ResultSet([[12, 'adim'], [13, 'syt'], [14, 'nico']],
   168         rs = ResultSet([[12, 'adim'], [13, 'syt'], [14, 'nico']],
   147                        'Any U,L where U is CWUser, U login L',
   169                        'Any U,L where U is CWUser, U login L',
   148                        description=[['CWUser', 'String']] * 3)
   170                        description=[['CWUser', 'String']] * 3)
   149         rs.req = self.request()
   171         rs.req = self.request()
   150         def test_transform(row, desc):
   172         def test_transform(row, desc):
   152         rs2 = rs.transformed_rset(test_transform)
   174         rs2 = rs.transformed_rset(test_transform)
   153 
   175 
   154         self.assertEqual(len(rs2), 3)
   176         self.assertEqual(len(rs2), 3)
   155         self.assertEqual(list(rs2), [['adim'],['syt'],['nico']])
   177         self.assertEqual(list(rs2), [['adim'],['syt'],['nico']])
   156 
   178 
   157     def test_resultset_sort(self):
   179     def test_sort(self):
   158         rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
   180         rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
   159                        'Any U,L where U is CWUser, U login L',
   181                        'Any U,L where U is CWUser, U login L',
   160                        description=[['CWUser', 'String']] * 3)
   182                        description=[['CWUser', 'String']] * 3)
   161         rs.req = self.request()
   183         rs.req = self.request()
   162         rs.vreg = self.vreg
   184         rs.vreg = self.vreg
   177         self.assertEqual(len(rs3), 3)
   199         self.assertEqual(len(rs3), 3)
   178         self.assertEqual([login for _, login in rs3], ['adim', 'nico', 'syt'])
   200         self.assertEqual([login for _, login in rs3], ['adim', 'nico', 'syt'])
   179         # make sure rs is unchanged
   201         # make sure rs is unchanged
   180         self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
   202         self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
   181 
   203 
   182     def test_resultset_split(self):
   204     def test_split(self):
   183         rs = ResultSet([[12000, 'adim', u'Adim chez les pinguins'],
   205         rs = ResultSet([[12000, 'adim', u'Adim chez les pinguins'],
   184                         [12000, 'adim', u'Jardiner facile'],
   206                         [12000, 'adim', u'Jardiner facile'],
   185                         [13000, 'syt',  u'Le carrelage en 42 leçons'],
   207                         [13000, 'syt',  u'Le carrelage en 42 leçons'],
   186                         [14000, 'nico', u'La tarte tatin en 15 minutes'],
   208                         [14000, 'nico', u'La tarte tatin en 15 minutes'],
   187                         [14000, 'nico', u"L'épluchage du castor commun"]],
   209                         [14000, 'nico', u"L'épluchage du castor commun"]],