16 |
16 |
17 class BaseEntityTC(EnvBasedTC): |
17 class BaseEntityTC(EnvBasedTC): |
18 |
18 |
19 def setup_database(self): |
19 def setup_database(self): |
20 self.member = self.create_user('member') |
20 self.member = self.create_user('member') |
21 |
21 |
22 |
22 |
23 |
23 |
24 class MetadataTC(BaseEntityTC): |
24 class MetadataTC(BaseEntityTC): |
25 |
25 |
26 def test_creator(self): |
26 def test_creator(self): |
27 self.login(u'member') |
27 self.login(u'member') |
28 card = self.add_entity('Card', title=u"hello") |
28 entity = self.add_entity('Bookmark', title=u"hello", path=u'project/cubicweb') |
29 self.commit() |
29 self.commit() |
30 self.assertEquals(card.creator.eid, self.member.eid) |
30 self.assertEquals(entity.creator.eid, self.member.eid) |
31 self.assertEquals(card.dc_creator(), u'member') |
31 self.assertEquals(entity.dc_creator(), u'member') |
32 |
32 |
33 def test_type(self): |
33 def test_type(self): |
34 self.assertEquals(self.member.dc_type(), 'euser') |
34 self.assertEquals(self.member.dc_type(), 'cwuser') |
35 |
|
36 |
35 |
37 def test_entity_meta_attributes(self): |
36 def test_entity_meta_attributes(self): |
38 # XXX move to yams |
37 # XXX move to yams |
39 self.assertEquals(self.schema['CWUser'].meta_attributes(), {}) |
38 self.assertEquals(self.schema['CWUser'].meta_attributes(), {}) |
40 self.assertEquals(dict((str(k), v) for k, v in self.schema['Card'].meta_attributes().iteritems()), |
39 self.assertEquals(dict((str(k), v) for k, v in self.schema['State'].meta_attributes().iteritems()), |
41 {'content_format': ('format', 'content')}) |
40 {'description_format': ('format', 'description')}) |
42 |
41 |
43 |
42 |
44 class CWUserTC(BaseEntityTC): |
43 class CWUserTC(BaseEntityTC): |
45 def test_dc_title_and_name(self): |
44 def test_dc_title_and_name(self): |
46 e = self.entity('CWUser U WHERE U login "member"') |
45 e = self.entity('CWUser U WHERE U login "member"') |
47 self.assertEquals(e.dc_title(), 'member') |
46 self.assertEquals(e.dc_title(), 'member') |
72 trs = list(e.transitions(user)) |
71 trs = list(e.transitions(user)) |
73 self.assertEquals(len(trs), 0) |
72 self.assertEquals(len(trs), 0) |
74 user = self.entity('CWUser X') |
73 user = self.entity('CWUser X') |
75 self.assert_(not user.can_pass_transition('deactivate')) |
74 self.assert_(not user.can_pass_transition('deactivate')) |
76 self.assert_(not user.can_pass_transition('activate')) |
75 self.assert_(not user.can_pass_transition('activate')) |
77 |
76 |
78 def test_transitions_with_dest_specfied(self): |
77 def test_transitions_with_dest_specfied(self): |
79 user = self.entity('CWUser X') |
78 user = self.entity('CWUser X') |
80 e = self.entity('State S WHERE S name "activated"') |
79 e = self.entity('State S WHERE S name "activated"') |
81 e2 = self.entity('State S WHERE S name "deactivated"') |
80 e2 = self.entity('State S WHERE S name "deactivated"') |
82 trs = list(e.transitions(user, e2.eid)) |
81 trs = list(e.transitions(user, e2.eid)) |
83 self.assertEquals(len(trs), 1) |
82 self.assertEquals(len(trs), 1) |
84 self.assertEquals(trs[0].name, u'deactivate') |
83 self.assertEquals(trs[0].name, u'deactivate') |
85 self.assertEquals(trs[0].destination().name, u'deactivated') |
84 self.assertEquals(trs[0].destination().name, u'deactivated') |
86 trs = list(e.transitions(user, e.eid)) |
85 trs = list(e.transitions(user, e.eid)) |
87 self.assertEquals(len(trs), 0) |
86 self.assertEquals(len(trs), 0) |
88 |
87 |
89 def test_transitions_maybe_passed(self): |
88 def test_transitions_maybe_passed(self): |
90 self.execute('INSERT RQLExpression X: X exprtype "ERQLExpression", ' |
89 self.execute('INSERT RQLExpression X: X exprtype "ERQLExpression", ' |
91 'X expression "X owned_by U", T condition X ' |
90 'X expression "X owned_by U", T condition X ' |
92 'WHERE T name "deactivate"') |
91 'WHERE T name "deactivate"') |
93 self._test_deactivated() |
92 self._test_deactivated() |
94 |
93 |
95 def test_transitions_maybe_passed_using_has_update_perm(self): |
94 def test_transitions_maybe_passed_using_has_update_perm(self): |
96 self.execute('INSERT RQLExpression X: X exprtype "ERQLExpression", ' |
95 self.execute('INSERT RQLExpression X: X exprtype "ERQLExpression", ' |
97 'X expression "U has_update_permission X", T condition X ' |
96 'X expression "U has_update_permission X", T condition X ' |
98 'WHERE T name "deactivate"') |
97 'WHERE T name "deactivate"') |
99 self._test_deactivated() |
98 self._test_deactivated() |
100 |
99 |
101 |
100 |
102 def _test_deactivated(self): |
101 def _test_deactivated(self): |
103 ueid = self.create_user('toto').eid |
102 ueid = self.create_user('toto').eid |
104 self.create_user('tutu') |
103 self.create_user('tutu') |
105 cnx = self.login('tutu') |
104 cnx = self.login('tutu') |
106 cu = cnx.cursor() |
105 cu = cnx.cursor() |
114 {'x': ueid}, 'x') |
113 {'x': ueid}, 'x') |
115 cnx.commit() |
114 cnx.commit() |
116 self.assertRaises(ValidationError, |
115 self.assertRaises(ValidationError, |
117 cu.execute, 'SET X in_state S WHERE X eid %(x)s, S name "activated"', |
116 cu.execute, 'SET X in_state S WHERE X eid %(x)s, S name "activated"', |
118 {'x': ueid}, 'x') |
117 {'x': ueid}, 'x') |
119 |
118 |
120 |
119 |
121 def test_transitions_selection(self): |
120 def test_transitions_selection(self): |
122 """ |
121 """ |
123 ------------------------ tr1 ----------------- |
122 ------------------------ tr1 ----------------- |
124 | state1 (Card, Bookmark) | ------> | state2 (Card) | |
123 | state1 (CWGroup, Bookmark) | ------> | state2 (CWGroup) | |
125 ------------------------ ----------------- |
124 ------------------------ ----------------- |
126 | tr2 ------------------ |
125 | tr2 ------------------ |
127 `------> | state3 (Bookmark) | |
126 `------> | state3 (Bookmark) | |
128 ------------------ |
127 ------------------ |
129 """ |
128 """ |
130 state1 = self.add_entity('State', name=u'state1') |
129 state1 = self.add_entity('State', name=u'state1') |
131 state2 = self.add_entity('State', name=u'state2') |
130 state2 = self.add_entity('State', name=u'state2') |
132 state3 = self.add_entity('State', name=u'state3') |
131 state3 = self.add_entity('State', name=u'state3') |
133 tr1 = self.add_entity('Transition', name=u'tr1') |
132 tr1 = self.add_entity('Transition', name=u'tr1') |
134 tr2 = self.add_entity('Transition', name=u'tr2') |
133 tr2 = self.add_entity('Transition', name=u'tr2') |
135 self.execute('SET X state_of Y WHERE X eid in (%s, %s), Y is CWEType, Y name "Card"' % |
134 self.execute('SET X state_of Y WHERE X eid in (%s, %s), Y is CWEType, Y name "CWGroup"' % |
136 (state1.eid, state2.eid)) |
135 (state1.eid, state2.eid)) |
137 self.execute('SET X state_of Y WHERE X eid in (%s, %s), Y is CWEType, Y name "Bookmark"' % |
136 self.execute('SET X state_of Y WHERE X eid in (%s, %s), Y is CWEType, Y name "Bookmark"' % |
138 (state1.eid, state3.eid)) |
137 (state1.eid, state3.eid)) |
139 self.execute('SET X transition_of Y WHERE X eid %s, Y name "Card"' % tr1.eid) |
138 self.execute('SET X transition_of Y WHERE X eid %s, Y name "CWGroup"' % tr1.eid) |
140 self.execute('SET X transition_of Y WHERE X eid %s, Y name "Bookmark"' % tr2.eid) |
139 self.execute('SET X transition_of Y WHERE X eid %s, Y name "Bookmark"' % tr2.eid) |
141 self.execute('SET X allowed_transition Y WHERE X eid %s, Y eid %s' % |
140 self.execute('SET X allowed_transition Y WHERE X eid %s, Y eid %s' % |
142 (state1.eid, tr1.eid)) |
141 (state1.eid, tr1.eid)) |
143 self.execute('SET X allowed_transition Y WHERE X eid %s, Y eid %s' % |
142 self.execute('SET X allowed_transition Y WHERE X eid %s, Y eid %s' % |
144 (state1.eid, tr2.eid)) |
143 (state1.eid, tr2.eid)) |
145 self.execute('SET X destination_state Y WHERE X eid %s, Y eid %s' % |
144 self.execute('SET X destination_state Y WHERE X eid %s, Y eid %s' % |
146 (tr1.eid, state2.eid)) |
145 (tr1.eid, state2.eid)) |
147 self.execute('SET X destination_state Y WHERE X eid %s, Y eid %s' % |
146 self.execute('SET X destination_state Y WHERE X eid %s, Y eid %s' % |
148 (tr2.eid, state3.eid)) |
147 (tr2.eid, state3.eid)) |
149 self.execute('SET X initial_state Y WHERE Y eid %s, X name "Card"' % state1.eid) |
148 self.execute('SET X initial_state Y WHERE Y eid %s, X name "CWGroup"' % state1.eid) |
150 self.execute('SET X initial_state Y WHERE Y eid %s, X name "Bookmark"' % state1.eid) |
149 self.execute('SET X initial_state Y WHERE Y eid %s, X name "Bookmark"' % state1.eid) |
151 card = self.add_entity('Card', title=u't1') |
150 group = self.add_entity('CWGroup', name=u't1') |
|
151 transitions = list(state1.transitions(group)) |
|
152 self.assertEquals(len(transitions), 1) |
|
153 self.assertEquals(transitions[0].name, 'tr1') |
152 bookmark = self.add_entity('Bookmark', title=u'111', path=u'/view') |
154 bookmark = self.add_entity('Bookmark', title=u'111', path=u'/view') |
153 |
|
154 transitions = list(state1.transitions(card)) |
|
155 self.assertEquals(len(transitions), 1) |
|
156 self.assertEquals(transitions[0].name, 'tr1') |
|
157 transitions = list(state1.transitions(bookmark)) |
155 transitions = list(state1.transitions(bookmark)) |
158 self.assertEquals(len(transitions), 1) |
156 self.assertEquals(len(transitions), 1) |
159 self.assertEquals(transitions[0].name, 'tr2') |
157 self.assertEquals(transitions[0].name, 'tr2') |
160 |
158 |
161 |
159 |
162 def test_transitions_selection2(self): |
160 def test_transitions_selection2(self): |
163 """ |
161 """ |
164 ------------------------ tr1 (Bookmark) ----------------------- |
162 ------------------------ tr1 (Bookmark) ----------------------- |
165 | state1 (Card, Bookmark) | -------------> | state2 (Card,Bookmark) | |
163 | state1 (CWGroup, Bookmark) | -------------> | state2 (CWGroup,Bookmark) | |
166 ------------------------ ----------------------- |
164 ------------------------ ----------------------- |
167 | tr2 (Card) | |
165 | tr2 (CWGroup) | |
168 `---------------------------------/ |
166 `---------------------------------/ |
169 """ |
167 """ |
170 state1 = self.add_entity('State', name=u'state1') |
168 state1 = self.add_entity('State', name=u'state1') |
171 state2 = self.add_entity('State', name=u'state2') |
169 state2 = self.add_entity('State', name=u'state2') |
172 tr1 = self.add_entity('Transition', name=u'tr1') |
170 tr1 = self.add_entity('Transition', name=u'tr1') |
173 tr2 = self.add_entity('Transition', name=u'tr2') |
171 tr2 = self.add_entity('Transition', name=u'tr2') |
174 self.execute('SET X state_of Y WHERE X eid in (%s, %s), Y is CWEType, Y name "Card"' % |
172 self.execute('SET X state_of Y WHERE X eid in (%s, %s), Y is CWEType, Y name "CWGroup"' % |
175 (state1.eid, state2.eid)) |
173 (state1.eid, state2.eid)) |
176 self.execute('SET X state_of Y WHERE X eid in (%s, %s), Y is CWEType, Y name "Bookmark"' % |
174 self.execute('SET X state_of Y WHERE X eid in (%s, %s), Y is CWEType, Y name "Bookmark"' % |
177 (state1.eid, state2.eid)) |
175 (state1.eid, state2.eid)) |
178 self.execute('SET X transition_of Y WHERE X eid %s, Y name "Card"' % tr1.eid) |
176 self.execute('SET X transition_of Y WHERE X eid %s, Y name "CWGroup"' % tr1.eid) |
179 self.execute('SET X transition_of Y WHERE X eid %s, Y name "Bookmark"' % tr2.eid) |
177 self.execute('SET X transition_of Y WHERE X eid %s, Y name "Bookmark"' % tr2.eid) |
180 self.execute('SET X allowed_transition Y WHERE X eid %s, Y eid %s' % |
178 self.execute('SET X allowed_transition Y WHERE X eid %s, Y eid %s' % |
181 (state1.eid, tr1.eid)) |
179 (state1.eid, tr1.eid)) |
182 self.execute('SET X allowed_transition Y WHERE X eid %s, Y eid %s' % |
180 self.execute('SET X allowed_transition Y WHERE X eid %s, Y eid %s' % |
183 (state1.eid, tr2.eid)) |
181 (state1.eid, tr2.eid)) |
184 self.execute('SET X destination_state Y WHERE X eid %s, Y eid %s' % |
182 self.execute('SET X destination_state Y WHERE X eid %s, Y eid %s' % |
185 (tr1.eid, state2.eid)) |
183 (tr1.eid, state2.eid)) |
186 self.execute('SET X destination_state Y WHERE X eid %s, Y eid %s' % |
184 self.execute('SET X destination_state Y WHERE X eid %s, Y eid %s' % |
187 (tr2.eid, state2.eid)) |
185 (tr2.eid, state2.eid)) |
188 self.execute('SET X initial_state Y WHERE Y eid %s, X name "Card"' % state1.eid) |
186 self.execute('SET X initial_state Y WHERE Y eid %s, X name "CWGroup"' % state1.eid) |
189 self.execute('SET X initial_state Y WHERE Y eid %s, X name "Bookmark"' % state1.eid) |
187 self.execute('SET X initial_state Y WHERE Y eid %s, X name "Bookmark"' % state1.eid) |
190 card = self.add_entity('Card', title=u't1') |
188 group = self.add_entity('CWGroup', name=u't1') |
|
189 transitions = list(state1.transitions(group)) |
|
190 self.assertEquals(len(transitions), 1) |
|
191 self.assertEquals(transitions[0].name, 'tr1') |
191 bookmark = self.add_entity('Bookmark', title=u'111', path=u'/view') |
192 bookmark = self.add_entity('Bookmark', title=u'111', path=u'/view') |
192 |
|
193 transitions = list(state1.transitions(card)) |
|
194 self.assertEquals(len(transitions), 1) |
|
195 self.assertEquals(transitions[0].name, 'tr1') |
|
196 transitions = list(state1.transitions(bookmark)) |
193 transitions = list(state1.transitions(bookmark)) |
197 self.assertEquals(len(transitions), 1) |
194 self.assertEquals(len(transitions), 1) |
198 self.assertEquals(transitions[0].name, 'tr2') |
195 self.assertEquals(transitions[0].name, 'tr2') |
199 |
196 |
200 |
197 |
201 class EmailAddressTC(BaseEntityTC): |
198 class EmailAddressTC(BaseEntityTC): |
202 def test_canonical_form(self): |
199 def test_canonical_form(self): |
203 eid1 = self.execute('INSERT EmailAddress X: X address "maarten.ter.huurne@philips.com"')[0][0] |
200 eid1 = self.execute('INSERT EmailAddress X: X address "maarten.ter.huurne@philips.com"')[0][0] |
204 eid2 = self.execute('INSERT EmailAddress X: X address "maarten@philips.com", X canonical TRUE')[0][0] |
201 eid2 = self.execute('INSERT EmailAddress X: X address "maarten@philips.com", X canonical TRUE')[0][0] |