22 |
22 |
23 from cubicweb import Binary |
23 from cubicweb import Binary |
24 from cubicweb.devtools.testlib import CubicWebTC |
24 from cubicweb.devtools.testlib import CubicWebTC |
25 from cubicweb.appobject import Selector, AndSelector, OrSelector |
25 from cubicweb.appobject import Selector, AndSelector, OrSelector |
26 from cubicweb.selectors import (is_instance, adaptable, match_user_groups, |
26 from cubicweb.selectors import (is_instance, adaptable, match_user_groups, |
27 multi_lines_rset, score_entity) |
27 multi_lines_rset, score_entity, is_in_state) |
28 from cubicweb.interfaces import IDownloadable |
28 from cubicweb.interfaces import IDownloadable |
29 from cubicweb.web import action |
29 from cubicweb.web import action |
|
30 from cubicweb.server.migractions import ServerMigrationHelper |
30 |
31 |
31 class _1_(Selector): |
32 class _1_(Selector): |
32 def __call__(self, *args, **kwargs): |
33 def __call__(self, *args, **kwargs): |
33 return 1 |
34 return 1 |
34 |
35 |
134 self.assertEqual(selector(None), 1) |
135 self.assertEqual(selector(None), 1) |
135 selector = _0_() |
136 selector = _0_() |
136 selector |= _0_() |
137 selector |= _0_() |
137 selector |= _0_() |
138 selector |= _0_() |
138 self.assertEqual(selector(None), 0) |
139 self.assertEqual(selector(None), 0) |
|
140 |
|
141 class IsInStateSelectorTC(CubicWebTC): |
|
142 def setup_database(self): |
|
143 mh = ServerMigrationHelper(self.repo.config, None, |
|
144 repo=self.repo, cnx=self.cnx, |
|
145 interactive=False) |
|
146 wf = mh.cmd_add_workflow('testwf', 'StateFull', default=True) |
|
147 initial = wf.add_state(u'initial', initial=True) |
|
148 final = wf.add_state(u'final') |
|
149 wf.add_transition(u'forward', (initial,), final) |
|
150 |
|
151 def test_initial_state(self): |
|
152 req = self.request() |
|
153 entity = req.create_entity('StateFull') |
|
154 selector = is_in_state(u'initial') |
|
155 self.commit() |
|
156 score = selector(entity.__class__, None, entity=entity) |
|
157 self.assertEqual(score, 1) |
|
158 |
|
159 def test_final_state(self): |
|
160 req = self.request() |
|
161 entity = req.create_entity('StateFull') |
|
162 selector = is_in_state(u'initial') |
|
163 self.commit() |
|
164 entity.cw_adapt_to('IWorkflowable').fire_transition(u'forward') |
|
165 self.commit() |
|
166 score = selector(entity.__class__, None, entity=entity) |
|
167 self.assertEqual(score, 0) |
|
168 selector = is_in_state(u'final') |
|
169 score = selector(entity.__class__, None, entity=entity) |
|
170 self.assertEqual(score, 1) |
139 |
171 |
140 |
172 |
141 class ImplementsSelectorTC(CubicWebTC): |
173 class ImplementsSelectorTC(CubicWebTC): |
142 def test_etype_priority(self): |
174 def test_etype_priority(self): |
143 req = self.request() |
175 req = self.request() |