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"]], |