author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Fri, 21 Aug 2009 08:45:55 +0200 | |
branch | 3.5 |
changeset 2949 | a2aa2c51f3be |
parent 2939 | a613cc003ab7 |
child 2954 | 48507919b6e3 |
permissions | -rw-r--r-- |
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
1 |
from cubicweb.devtools.apptest import EnvBasedTC |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
2 |
from cubicweb import ValidationError |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
3 |
|
2949
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
4 |
def add_wf(self, etype, name=None): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
5 |
if name is None: |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
6 |
name = unicode(etype) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
7 |
wf = self.execute('INSERT Workflow X: X name %(n)s', {'n': name}).get_entity(0, 0) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
8 |
self.execute('SET WF workflow_of ET WHERE WF eid %(wf)s, ET name %(et)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
9 |
{'wf': wf.eid, 'et': etype}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
10 |
return wf |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
11 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
12 |
def parse_hist(wfhist): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
13 |
return [(ti.previous_state.name, ti.new_state.name, |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
14 |
ti.transition and ti.transition.name, ti.comment) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
15 |
for ti in wfhist] |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
16 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
17 |
|
2939
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
18 |
class WorkflowBuildingTC(EnvBasedTC): |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
19 |
|
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
20 |
def test_wf_construction(self): |
2949
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
21 |
wf = add_wf(self, 'Company') |
2939
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
22 |
foo = wf.add_state(u'foo', initial=True) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
23 |
bar = wf.add_state(u'bar') |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
24 |
self.assertEquals(wf.state_by_name('bar').eid, bar.eid) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
25 |
self.assertEquals(wf.state_by_name('barrr'), None) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
26 |
baz = wf.add_transition(u'baz', (foo,), bar, ('managers',)) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
27 |
self.assertEquals(wf.transition_by_name('baz').eid, baz.eid) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
28 |
self.assertEquals(len(baz.require_group), 1) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
29 |
self.assertEquals(baz.require_group[0].name, 'managers') |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
30 |
|
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
31 |
def test_duplicated_state(self): |
2949
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
32 |
wf = add_wf(self, 'Company') |
2939
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
33 |
wf.add_state(u'foo', initial=True) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
34 |
wf.add_state(u'foo') |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
35 |
ex = self.assertRaises(ValidationError, self.commit) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
36 |
# XXX enhance message |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
37 |
self.assertEquals(ex.errors, {'state_of': 'unique constraint S name N, Y state_of O, Y name N failed'}) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
38 |
|
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
39 |
def test_duplicated_transition(self): |
2949
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
40 |
wf = add_wf(self, 'Company') |
2939
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
41 |
foo = wf.add_state(u'foo', initial=True) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
42 |
bar = wf.add_state(u'bar') |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
43 |
wf.add_transition(u'baz', (foo,), bar, ('managers',)) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
44 |
wf.add_transition(u'baz', (bar,), foo) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
45 |
ex = self.assertRaises(ValidationError, self.commit) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
46 |
# XXX enhance message |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
47 |
self.assertEquals(ex.errors, {'transition_of': 'unique constraint S name N, Y transition_of O, Y name N failed'}) |
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
48 |
|
a613cc003ab7
make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
49 |
|
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
50 |
class WorkflowTC(EnvBasedTC): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
51 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
52 |
def setup_database(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
53 |
rschema = self.schema['in_state'] |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
54 |
for x, y in rschema.iter_rdefs(): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
55 |
self.assertEquals(rschema.rproperty(x, y, 'cardinality'), '1*') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
56 |
self.member = self.create_user('member') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
57 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
58 |
def test_workflow_base(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
59 |
e = self.create_user('toto') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
60 |
self.assertEquals(e.state, 'activated') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
61 |
e.change_state('deactivated', u'deactivate 1') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
62 |
self.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
63 |
e.change_state('activated', u'activate 1') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
64 |
self.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
65 |
e.change_state('deactivated', u'deactivate 2') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
66 |
self.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
67 |
e.clear_related_cache('wf_info_for', 'object') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
68 |
self.assertEquals([tr.comment for tr in e.reverse_wf_info_for], |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
69 |
['deactivate 1', 'activate 1', 'deactivate 2']) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
70 |
self.assertEquals(e.latest_trinfo().comment, 'deactivate 2') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
71 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
72 |
def test_possible_transitions(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
73 |
user = self.entity('CWUser X') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
74 |
trs = list(user.possible_transitions()) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
75 |
self.assertEquals(len(trs), 1) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
76 |
self.assertEquals(trs[0].name, u'deactivate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
77 |
self.assertEquals(trs[0].destination().name, u'deactivated') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
78 |
# test a std user get no possible transition |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
79 |
cnx = self.login('member') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
80 |
# fetch the entity using the new session |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
81 |
trs = list(cnx.user().possible_transitions()) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
82 |
self.assertEquals(len(trs), 0) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
83 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
84 |
def _test_manager_deactivate(self, user): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
85 |
user.clear_related_cache('in_state', 'subject') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
86 |
self.assertEquals(len(user.in_state), 1) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
87 |
self.assertEquals(user.state, 'deactivated') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
88 |
trinfo = user.latest_trinfo() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
89 |
self.assertEquals(trinfo.previous_state.name, 'activated') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
90 |
self.assertEquals(trinfo.new_state.name, 'deactivated') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
91 |
self.assertEquals(trinfo.comment, 'deactivate user') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
92 |
self.assertEquals(trinfo.comment_format, 'text/plain') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
93 |
return trinfo |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
94 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
95 |
def test_change_state(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
96 |
user = self.user() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
97 |
user.change_state('deactivated', comment=u'deactivate user') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
98 |
trinfo = self._test_manager_deactivate(user) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
99 |
self.assertEquals(trinfo.transition, None) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
100 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
101 |
def test_fire_transition(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
102 |
user = self.user() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
103 |
user.fire_transition('deactivate', comment=u'deactivate user') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
104 |
self.assertEquals(user.state, 'deactivated') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
105 |
self._test_manager_deactivate(user) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
106 |
trinfo = self._test_manager_deactivate(user) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
107 |
self.assertEquals(trinfo.transition.name, 'deactivate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
108 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
109 |
# XXX test managers can change state without matching transition |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
110 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
111 |
def _test_stduser_deactivate(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
112 |
ueid = self.member.eid |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
113 |
self.create_user('tutu') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
114 |
cnx = self.login('tutu') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
115 |
req = self.request() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
116 |
member = req.entity_from_eid(self.member.eid) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
117 |
ex = self.assertRaises(ValidationError, |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
118 |
member.fire_transition, 'deactivate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
119 |
self.assertEquals(ex.errors, {'by_transition': "transition may not be fired"}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
120 |
cnx.close() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
121 |
cnx = self.login('member') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
122 |
req = self.request() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
123 |
member = req.entity_from_eid(self.member.eid) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
124 |
member.fire_transition('deactivate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
125 |
cnx.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
126 |
ex = self.assertRaises(ValidationError, |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
127 |
member.fire_transition, 'activate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
128 |
self.assertEquals(ex.errors, {'by_transition': "transition may not be fired"}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
129 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
130 |
def test_fire_transition_owned_by(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
131 |
self.execute('INSERT RQLExpression X: X exprtype "ERQLExpression", ' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
132 |
'X expression "X owned_by U", T condition X ' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
133 |
'WHERE T name "deactivate"') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
134 |
self._test_stduser_deactivate() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
135 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
136 |
def test_fire_transition_has_update_perm(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
137 |
self.execute('INSERT RQLExpression X: X exprtype "ERQLExpression", ' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
138 |
'X expression "U has_update_permission X", T condition X ' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
139 |
'WHERE T name "deactivate"') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
140 |
self._test_stduser_deactivate() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
141 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
142 |
def _init_wf_with_shared_state_or_tr(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
143 |
req = self.request() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
144 |
etypes = dict(self.execute('Any N, ET WHERE ET is CWEType, ET name N' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
145 |
', ET name IN ("CWGroup", "Bookmark")')) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
146 |
self.grpwf = req.create_entity('Workflow', ('workflow_of', 'ET'), |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
147 |
ET=etypes['CWGroup'], name=u'group workflow') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
148 |
self.bmkwf = req.execute('Any X WHERE X is Workflow, X workflow_of ET, ET name "Bookmark"').get_entity(0, 0) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
149 |
self.state1 = self.grpwf.add_state(u'state1', initial=True) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
150 |
self.execute('SET S state_of WF WHERE S eid %(s)s, WF eid %(wf)s', |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
151 |
{'s': self.state1.eid, 'wf': self.bmkwf.eid}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
152 |
self.execute('SET WF initial_state S WHERE S eid %(s)s, WF eid %(wf)s', |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
153 |
{'s': self.state1.eid, 'wf': self.bmkwf.eid}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
154 |
self.state2 = self.grpwf.add_state(u'state2') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
155 |
self.group = self.add_entity('CWGroup', name=u't1') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
156 |
self.bookmark = self.add_entity('Bookmark', title=u'111', path=u'/view') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
157 |
# commit to link to the initial state |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
158 |
self.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
159 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
160 |
def test_transitions_selection(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
161 |
""" |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
162 |
------------------------ tr1 ----------------- |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
163 |
| state1 (CWGroup, Bookmark) | ------> | state2 (CWGroup) | |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
164 |
------------------------ ----------------- |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
165 |
| tr2 ------------------ |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
166 |
`------> | state3 (Bookmark) | |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
167 |
------------------ |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
168 |
""" |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
169 |
self._init_wf_with_shared_state_or_tr() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
170 |
state3 = self.bmkwf.add_state(u'state3') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
171 |
tr1 = self.grpwf.add_transition(u'tr1', (self.state1,), self.state2) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
172 |
tr2 = self.bmkwf.add_transition(u'tr2', (self.state1,), state3) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
173 |
transitions = list(self.group.possible_transitions()) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
174 |
self.assertEquals(len(transitions), 1) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
175 |
self.assertEquals(transitions[0].name, 'tr1') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
176 |
transitions = list(self.bookmark.possible_transitions()) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
177 |
self.assertEquals(len(transitions), 1) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
178 |
self.assertEquals(transitions[0].name, 'tr2') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
179 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
180 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
181 |
def test_transitions_selection2(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
182 |
""" |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
183 |
------------------------ tr1 (Bookmark) ----------------------- |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
184 |
| state1 (CWGroup, Bookmark) | -------------> | state2 (CWGroup,Bookmark) | |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
185 |
------------------------ ----------------------- |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
186 |
| tr2 (CWGroup) | |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
187 |
`---------------------------------/ |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
188 |
""" |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
189 |
self._init_wf_with_shared_state_or_tr() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
190 |
self.execute('SET S state_of WF WHERE S eid %(s)s, WF eid %(wf)s', |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
191 |
{'s': self.state2.eid, 'wf': self.bmkwf.eid}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
192 |
tr1 = self.bmkwf.add_transition(u'tr1', (self.state1,), self.state2) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
193 |
tr2 = self.grpwf.add_transition(u'tr2', (self.state1,), self.state2) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
194 |
transitions = list(self.group.possible_transitions()) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
195 |
self.assertEquals(len(transitions), 1) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
196 |
self.assertEquals(transitions[0].name, 'tr2') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
197 |
transitions = list(self.bookmark.possible_transitions()) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
198 |
self.assertEquals(len(transitions), 1) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
199 |
self.assertEquals(transitions[0].name, 'tr1') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
200 |
|
2949
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
201 |
class CustomWorkflowTC(EnvBasedTC): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
202 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
203 |
def setup_database(self): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
204 |
self.member = self.create_user('member') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
205 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
206 |
def tearDown(self): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
207 |
super(CustomWorkflowTC, self).tearDown() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
208 |
self.execute('DELETE X custom_workflow WF') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
209 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
210 |
def test_custom_wf_replace_state_no_history(self): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
211 |
"""member in inital state with no previous history, state is simply |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
212 |
redirected when changing workflow |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
213 |
""" |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
214 |
wf = add_wf(self, 'CWUser') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
215 |
wf.add_state('asleep', initial=True) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
216 |
self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
217 |
{'wf': wf.eid, 'x': self.member.eid}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
218 |
self.member.clear_all_caches() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
219 |
self.assertEquals(self.member.state, 'activated')# no change before commit |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
220 |
self.commit() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
221 |
self.member.clear_all_caches() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
222 |
self.assertEquals(self.member.current_workflow.eid, wf.eid) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
223 |
self.assertEquals(self.member.state, 'asleep') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
224 |
self.assertEquals(self.member.workflow_history, []) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
225 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
226 |
def test_custom_wf_replace_state_keep_history(self): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
227 |
"""member in inital state with some history, state is redirected and |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
228 |
state change is recorded to history |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
229 |
""" |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
230 |
self.member.fire_transition('deactivate') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
231 |
self.member.fire_transition('activate') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
232 |
wf = add_wf(self, 'CWUser') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
233 |
wf.add_state('asleep', initial=True) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
234 |
self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
235 |
{'wf': wf.eid, 'x': self.member.eid}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
236 |
self.commit() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
237 |
self.member.clear_all_caches() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
238 |
self.assertEquals(self.member.current_workflow.eid, wf.eid) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
239 |
self.assertEquals(self.member.state, 'asleep') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
240 |
self.assertEquals(parse_hist(self.member.workflow_history), |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
241 |
[('activated', 'deactivated', 'deactivate', None), |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
242 |
('deactivated', 'activated', 'activate', None), |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
243 |
('activated', 'asleep', None, 'workflow changed to "CWUser"')]) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
244 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
245 |
def test_custom_wf_shared_state(self): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
246 |
"""member in some state shared by the new workflow, nothing has to be |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
247 |
done |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
248 |
""" |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
249 |
self.member.fire_transition('deactivate') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
250 |
self.assertEquals(self.member.state, 'deactivated') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
251 |
wf = add_wf(self, 'CWUser') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
252 |
wf.add_state('asleep', initial=True) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
253 |
self.execute('SET S state_of WF WHERE S name "deactivated", WF eid %(wf)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
254 |
{'wf': wf.eid}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
255 |
self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
256 |
{'wf': wf.eid, 'x': self.member.eid}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
257 |
self.commit() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
258 |
self.member.clear_all_caches() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
259 |
self.assertEquals(self.member.current_workflow.eid, wf.eid) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
260 |
self.assertEquals(self.member.state, 'deactivated') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
261 |
self.assertEquals(parse_hist(self.member.workflow_history), |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
262 |
[('activated', 'deactivated', 'deactivate', None)]) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
263 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
264 |
def test_custom_wf_no_initial_state(self): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
265 |
"""try to set a custom workflow which has no initial state""" |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
266 |
self.member.fire_transition('deactivate') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
267 |
wf = add_wf(self, 'CWUser') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
268 |
wf.add_state('asleep') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
269 |
self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
270 |
{'wf': wf.eid, 'x': self.member.eid}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
271 |
ex = self.assertRaises(ValidationError, self.commit) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
272 |
self.assertEquals(ex.errors, {'custom_workflow': u'workflow has no initial state'}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
273 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
274 |
def test_custom_wf_bad_etype(self): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
275 |
"""try to set a custom workflow which has no initial state""" |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
276 |
self.member.fire_transition('deactivate') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
277 |
wf = add_wf(self, 'Company') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
278 |
wf.add_state('asleep', initial=True) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
279 |
self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
280 |
{'wf': wf.eid, 'x': self.member.eid}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
281 |
ex = self.assertRaises(ValidationError, self.commit) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
282 |
self.assertEquals(ex.errors, {'custom_workflow': 'constraint S is ET, O workflow_of ET failed'}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
283 |
|
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
284 |
def test_del_custom_wf(self): |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
285 |
"""member in some state shared by the new workflow, nothing has to be |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
286 |
done |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
287 |
""" |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
288 |
self.member.fire_transition('deactivate') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
289 |
wf = add_wf(self, 'CWUser') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
290 |
wf.add_state('asleep', initial=True) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
291 |
self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
292 |
{'wf': wf.eid, 'x': self.member.eid}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
293 |
self.commit() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
294 |
self.execute('DELETE X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
295 |
{'wf': wf.eid, 'x': self.member.eid}) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
296 |
self.member.clear_all_caches() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
297 |
self.assertEquals(self.member.state, 'asleep')# no change before commit |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
298 |
self.commit() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
299 |
self.member.clear_all_caches() |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
300 |
self.assertEquals(self.member.current_workflow.name, "CWUser workflow") |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
301 |
self.assertEquals(self.member.state, 'activated') |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
302 |
self.assertEquals(parse_hist(self.member.workflow_history), |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
303 |
[('activated', 'deactivated', 'deactivate', None), |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
304 |
('deactivated', 'asleep', None, 'workflow changed to "CWUser"'), |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
305 |
('asleep', 'activated', None, 'workflow changed to "CWUser workflow"'),]) |
a2aa2c51f3be
test and implements workflow changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2939
diff
changeset
|
306 |
|
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
307 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
308 |
from cubicweb.devtools.apptest import RepositoryBasedTC |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
309 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
310 |
class WorkflowHooksTC(RepositoryBasedTC): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
311 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
312 |
def setUp(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
313 |
RepositoryBasedTC.setUp(self) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
314 |
self.wf = self.session.user.current_workflow |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
315 |
self.s_activated = self.wf.state_by_name('activated').eid |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
316 |
self.s_deactivated = self.wf.state_by_name('deactivated').eid |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
317 |
self.s_dummy = self.wf.add_state(u'dummy').eid |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
318 |
self.wf.add_transition(u'dummy', (self.s_deactivated,), self.s_dummy) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
319 |
ueid = self.create_user('stduser', commit=False) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
320 |
# test initial state is set |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
321 |
rset = self.execute('Any N WHERE S name N, X in_state S, X eid %(x)s', |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
322 |
{'x' : ueid}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
323 |
self.failIf(rset, rset.rows) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
324 |
self.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
325 |
initialstate = self.execute('Any N WHERE S name N, X in_state S, X eid %(x)s', |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
326 |
{'x' : ueid})[0][0] |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
327 |
self.assertEquals(initialstate, u'activated') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
328 |
# give access to users group on the user's wf transitions |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
329 |
# so we can test wf enforcing on euser (managers don't have anymore this |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
330 |
# enforcement |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
331 |
self.execute('SET X require_group G ' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
332 |
'WHERE G name "users", X transition_of WF, WF eid %(wf)s', |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
333 |
{'wf': self.wf.eid}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
334 |
self.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
335 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
336 |
def tearDown(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
337 |
self.execute('DELETE X require_group G ' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
338 |
'WHERE G name "users", X transition_of WF, WF eid %(wf)s', |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
339 |
{'wf': self.wf.eid}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
340 |
self.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
341 |
RepositoryBasedTC.tearDown(self) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
342 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
343 |
# XXX currently, we've to rely on hooks to set initial state, or to use unsafe_execute |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
344 |
# def test_initial_state(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
345 |
# cnx = self.login('stduser') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
346 |
# cu = cnx.cursor() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
347 |
# self.assertRaises(ValidationError, cu.execute, |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
348 |
# 'INSERT CWUser X: X login "badaboum", X upassword %(pwd)s, ' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
349 |
# 'X in_state S WHERE S name "deactivated"', {'pwd': 'oops'}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
350 |
# cnx.close() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
351 |
# # though managers can do whatever he want |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
352 |
# self.execute('INSERT CWUser X: X login "badaboum", X upassword %(pwd)s, ' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
353 |
# 'X in_state S, X in_group G WHERE S name "deactivated", G name "users"', {'pwd': 'oops'}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
354 |
# self.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
355 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
356 |
# test that the workflow is correctly enforced |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
357 |
def test_transition_checking1(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
358 |
cnx = self.login('stduser') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
359 |
user = cnx.user(self.current_session()) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
360 |
ex = self.assertRaises(ValidationError, |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
361 |
user.fire_transition, 'activate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
362 |
self.assertEquals(ex.errors, {'by_transition': u"transition isn't allowed"}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
363 |
cnx.close() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
364 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
365 |
def test_transition_checking2(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
366 |
cnx = self.login('stduser') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
367 |
user = cnx.user(self.current_session()) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
368 |
assert user.state == 'activated' |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
369 |
ex = self.assertRaises(ValidationError, |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
370 |
user.fire_transition, 'dummy') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
371 |
self.assertEquals(ex.errors, {'by_transition': u"transition isn't allowed"}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
372 |
cnx.close() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
373 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
374 |
def test_transition_checking3(self): |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
375 |
cnx = self.login('stduser') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
376 |
session = self.current_session() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
377 |
user = cnx.user(session) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
378 |
user.fire_transition('deactivate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
379 |
cnx.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
380 |
session.set_pool() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
381 |
ex = self.assertRaises(ValidationError, |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
382 |
user.fire_transition, 'deactivate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
383 |
self.assertEquals(ex.errors, {'by_transition': u"transition isn't allowed"}) |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
384 |
# get back now |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
385 |
user.fire_transition('activate') |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
386 |
cnx.commit() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
387 |
cnx.close() |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
388 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
389 |
|
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
390 |
if __name__ == '__main__': |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
391 |
from logilab.common.testlib import unittest_main |
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
392 |
unittest_main() |