29 from cubicweb.devtools.testlib import CubicWebTC |
29 from cubicweb.devtools.testlib import CubicWebTC |
30 from cubicweb.predicates import (is_instance, adaptable, match_kwargs, match_user_groups, |
30 from cubicweb.predicates import (is_instance, adaptable, match_kwargs, match_user_groups, |
31 multi_lines_rset, score_entity, is_in_state, |
31 multi_lines_rset, score_entity, is_in_state, |
32 rql_condition, relation_possible, match_form_params, |
32 rql_condition, relation_possible, match_form_params, |
33 paginated_rset) |
33 paginated_rset) |
34 from cubicweb.selectors import on_transition # XXX on_transition is deprecated |
|
35 from cubicweb.view import EntityAdapter |
34 from cubicweb.view import EntityAdapter |
36 from cubicweb.web import action |
35 from cubicweb.web import action |
37 |
|
38 |
36 |
39 |
37 |
40 class ImplementsTC(CubicWebTC): |
38 class ImplementsTC(CubicWebTC): |
41 def test_etype_priority(self): |
39 def test_etype_priority(self): |
42 with self.admin_access.web_request() as req: |
40 with self.admin_access.web_request() as req: |
144 selector = is_in_state("weird", "unknown", "created", "weird") |
142 selector = is_in_state("weird", "unknown", "created", "weird") |
145 with self.assertRaises(ValueError) as cm: |
143 with self.assertRaises(ValueError) as cm: |
146 selector(None, req, rset=rset) |
144 selector(None, req, rset=rset) |
147 self.assertEqual(str(cm.exception), |
145 self.assertEqual(str(cm.exception), |
148 "wf_test: unknown state(s): unknown,weird") |
146 "wf_test: unknown state(s): unknown,weird") |
149 |
|
150 def test_on_transition(self): |
|
151 with self.statefull_stuff() as (req, wf_entity, rset, adapter): |
|
152 for transition in ('validate', 'forsake'): |
|
153 selector = on_transition(transition) |
|
154 self.assertEqual(selector(None, req, rset=rset), 0) |
|
155 |
|
156 adapter.fire_transition('validate') |
|
157 req.cnx.commit(); wf_entity.cw_clear_all_caches() |
|
158 self.assertEqual(adapter.state, 'validated') |
|
159 |
|
160 clear_cache(rset, 'get_entity') |
|
161 |
|
162 selector = on_transition("validate") |
|
163 self.assertEqual(selector(None, req, rset=rset), 1) |
|
164 selector = on_transition("validate", "forsake") |
|
165 self.assertEqual(selector(None, req, rset=rset), 1) |
|
166 selector = on_transition("forsake") |
|
167 self.assertEqual(selector(None, req, rset=rset), 0) |
|
168 |
|
169 adapter.fire_transition('forsake') |
|
170 req.cnx.commit(); wf_entity.cw_clear_all_caches() |
|
171 self.assertEqual(adapter.state, 'abandoned') |
|
172 |
|
173 clear_cache(rset, 'get_entity') |
|
174 |
|
175 selector = on_transition("validate") |
|
176 self.assertEqual(selector(None, req, rset=rset), 0) |
|
177 selector = on_transition("validate", "forsake") |
|
178 self.assertEqual(selector(None, req, rset=rset), 1) |
|
179 selector = on_transition("forsake") |
|
180 self.assertEqual(selector(None, req, rset=rset), 1) |
|
181 |
|
182 def test_on_transition_unvalid_names(self): |
|
183 with self.statefull_stuff() as (req, wf_entity, rset, adapter): |
|
184 selector = on_transition("unknown") |
|
185 with self.assertRaises(ValueError) as cm: |
|
186 selector(None, req, rset=rset) |
|
187 self.assertEqual(str(cm.exception), |
|
188 "wf_test: unknown transition(s): unknown") |
|
189 selector = on_transition("weird", "unknown", "validate", "weird") |
|
190 with self.assertRaises(ValueError) as cm: |
|
191 selector(None, req, rset=rset) |
|
192 self.assertEqual(str(cm.exception), |
|
193 "wf_test: unknown transition(s): unknown,weird") |
|
194 |
|
195 def test_on_transition_with_no_effect(self): |
|
196 """selector will not be triggered with `change_state()`""" |
|
197 with self.statefull_stuff() as (req, wf_entity, rset, adapter): |
|
198 adapter.change_state('validated') |
|
199 req.cnx.commit(); wf_entity.cw_clear_all_caches() |
|
200 self.assertEqual(adapter.state, 'validated') |
|
201 |
|
202 selector = on_transition("validate") |
|
203 self.assertEqual(selector(None, req, rset=rset), 0) |
|
204 selector = on_transition("validate", "forsake") |
|
205 self.assertEqual(selector(None, req, rset=rset), 0) |
|
206 selector = on_transition("forsake") |
|
207 self.assertEqual(selector(None, req, rset=rset), 0) |
|
208 |
147 |
209 |
148 |
210 class RelationPossibleTC(CubicWebTC): |
149 class RelationPossibleTC(CubicWebTC): |
211 |
150 |
212 def test_rqlst_1(self): |
151 def test_rqlst_1(self): |