61 self.execute('INSERT CWUser X: X login "toto", X upassword "hop"') |
61 self.execute('INSERT CWUser X: X login "toto", X upassword "hop"') |
62 self.assertRaises(ValidationError, |
62 self.assertRaises(ValidationError, |
63 self.commit) |
63 self.commit) |
64 |
64 |
65 def test_inlined(self): |
65 def test_inlined(self): |
66 self.assertEquals(self.repo.schema['sender'].inlined, True) |
66 self.assertEqual(self.repo.schema['sender'].inlined, True) |
67 self.execute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"') |
67 self.execute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"') |
68 self.execute('INSERT EmailPart X: X content_format "text/plain", X ordernum 1, X content "this is a test"') |
68 self.execute('INSERT EmailPart X: X content_format "text/plain", X ordernum 1, X content "this is a test"') |
69 eeid = self.execute('INSERT Email X: X messageid "<1234>", X subject "test", X sender Y, X recipients Y, X parts P ' |
69 eeid = self.execute('INSERT Email X: X messageid "<1234>", X subject "test", X sender Y, X recipients Y, X parts P ' |
70 'WHERE Y is EmailAddress, P is EmailPart')[0][0] |
70 'WHERE Y is EmailAddress, P is EmailPart')[0][0] |
71 self.execute('SET X sender Y WHERE X is Email, Y is EmailAddress') |
71 self.execute('SET X sender Y WHERE X is Email, Y is EmailAddress') |
72 rset = self.execute('Any S WHERE X sender S, X eid %s' % eeid) |
72 rset = self.execute('Any S WHERE X sender S, X eid %s' % eeid) |
73 self.assertEquals(len(rset), 1) |
73 self.assertEqual(len(rset), 1) |
74 |
74 |
75 def test_composite_1(self): |
75 def test_composite_1(self): |
76 self.execute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"') |
76 self.execute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"') |
77 self.execute('INSERT EmailPart X: X content_format "text/plain", X ordernum 1, X content "this is a test"') |
77 self.execute('INSERT EmailPart X: X content_format "text/plain", X ordernum 1, X content "this is a test"') |
78 self.execute('INSERT Email X: X messageid "<1234>", X subject "test", X sender Y, X recipients Y, X parts P ' |
78 self.execute('INSERT Email X: X messageid "<1234>", X subject "test", X sender Y, X recipients Y, X parts P ' |
79 'WHERE Y is EmailAddress, P is EmailPart') |
79 'WHERE Y is EmailAddress, P is EmailPart') |
80 self.failUnless(self.execute('Email X WHERE X sender Y')) |
80 self.failUnless(self.execute('Email X WHERE X sender Y')) |
81 self.commit() |
81 self.commit() |
82 self.execute('DELETE Email X') |
82 self.execute('DELETE Email X') |
83 rset = self.execute('Any X WHERE X is EmailPart') |
83 rset = self.execute('Any X WHERE X is EmailPart') |
84 self.assertEquals(len(rset), 1) |
84 self.assertEqual(len(rset), 1) |
85 self.commit() |
85 self.commit() |
86 rset = self.execute('Any X WHERE X is EmailPart') |
86 rset = self.execute('Any X WHERE X is EmailPart') |
87 self.assertEquals(len(rset), 0) |
87 self.assertEqual(len(rset), 0) |
88 |
88 |
89 def test_composite_2(self): |
89 def test_composite_2(self): |
90 self.execute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"') |
90 self.execute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"') |
91 self.execute('INSERT EmailPart X: X content_format "text/plain", X ordernum 1, X content "this is a test"') |
91 self.execute('INSERT EmailPart X: X content_format "text/plain", X ordernum 1, X content "this is a test"') |
92 self.execute('INSERT Email X: X messageid "<1234>", X subject "test", X sender Y, X recipients Y, X parts P ' |
92 self.execute('INSERT Email X: X messageid "<1234>", X subject "test", X sender Y, X recipients Y, X parts P ' |
108 self.commit() |
108 self.commit() |
109 self.execute('DELETE X parts Y WHERE X messageid "<1234>"') |
109 self.execute('DELETE X parts Y WHERE X messageid "<1234>"') |
110 self.execute('SET X parts Y WHERE X messageid "<2345>"') |
110 self.execute('SET X parts Y WHERE X messageid "<2345>"') |
111 self.commit() |
111 self.commit() |
112 rset = self.execute('Any X WHERE X is EmailPart') |
112 rset = self.execute('Any X WHERE X is EmailPart') |
113 self.assertEquals(len(rset), 1) |
113 self.assertEqual(len(rset), 1) |
114 self.assertEquals(rset.get_entity(0, 0).reverse_parts[0].messageid, '<2345>') |
114 self.assertEqual(rset.get_entity(0, 0).reverse_parts[0].messageid, '<2345>') |
115 |
115 |
116 def test_unsatisfied_constraints(self): |
116 def test_unsatisfied_constraints(self): |
117 releid = self.execute('SET U in_group G WHERE G name "owners", U login "admin"')[0][0] |
117 releid = self.execute('SET U in_group G WHERE G name "owners", U login "admin"')[0][0] |
118 ex = self.assertRaises(ValidationError, self.commit) |
118 ex = self.assertRaises(ValidationError, self.commit) |
119 self.assertEquals(ex.errors, |
119 self.assertEqual(ex.errors, |
120 {'in_group-object': u'RQLConstraint NOT O name "owners" failed'}) |
120 {'in_group-object': u'RQLConstraint NOT O name "owners" failed'}) |
121 |
121 |
122 def test_html_tidy_hook(self): |
122 def test_html_tidy_hook(self): |
123 req = self.request() |
123 req = self.request() |
124 entity = req.create_entity('Workflow', name=u'wf1', description_format=u'text/html', |
124 entity = req.create_entity('Workflow', name=u'wf1', description_format=u'text/html', |
125 description=u'yo') |
125 description=u'yo') |
126 self.assertEquals(entity.description, u'yo') |
126 self.assertEqual(entity.description, u'yo') |
127 entity = req.create_entity('Workflow', name=u'wf2', description_format=u'text/html', |
127 entity = req.create_entity('Workflow', name=u'wf2', description_format=u'text/html', |
128 description=u'<b>yo') |
128 description=u'<b>yo') |
129 self.assertEquals(entity.description, u'<b>yo</b>') |
129 self.assertEqual(entity.description, u'<b>yo</b>') |
130 entity = req.create_entity('Workflow', name=u'wf3', description_format=u'text/html', |
130 entity = req.create_entity('Workflow', name=u'wf3', description_format=u'text/html', |
131 description=u'<b>yo</b>') |
131 description=u'<b>yo</b>') |
132 self.assertEquals(entity.description, u'<b>yo</b>') |
132 self.assertEqual(entity.description, u'<b>yo</b>') |
133 entity = req.create_entity('Workflow', name=u'wf4', description_format=u'text/html', |
133 entity = req.create_entity('Workflow', name=u'wf4', description_format=u'text/html', |
134 description=u'<b>R&D</b>') |
134 description=u'<b>R&D</b>') |
135 self.assertEquals(entity.description, u'<b>R&D</b>') |
135 self.assertEqual(entity.description, u'<b>R&D</b>') |
136 entity = req.create_entity('Workflow', name=u'wf5', description_format=u'text/html', |
136 entity = req.create_entity('Workflow', name=u'wf5', description_format=u'text/html', |
137 description=u"<div>c'est <b>l'été") |
137 description=u"<div>c'est <b>l'été") |
138 self.assertEquals(entity.description, u"<div>c'est <b>l'été</b></div>") |
138 self.assertEqual(entity.description, u"<div>c'est <b>l'été</b></div>") |
139 |
139 |
140 def test_nonregr_html_tidy_hook_no_update(self): |
140 def test_nonregr_html_tidy_hook_no_update(self): |
141 entity = self.request().create_entity('Workflow', name=u'wf1', description_format=u'text/html', |
141 entity = self.request().create_entity('Workflow', name=u'wf1', description_format=u'text/html', |
142 description=u'yo') |
142 description=u'yo') |
143 entity.set_attributes(name=u'wf2') |
143 entity.set_attributes(name=u'wf2') |
144 self.assertEquals(entity.description, u'yo') |
144 self.assertEqual(entity.description, u'yo') |
145 entity.set_attributes(description=u'R&D<p>yo') |
145 entity.set_attributes(description=u'R&D<p>yo') |
146 entity.pop('description') |
146 entity.pop('description') |
147 self.assertEquals(entity.description, u'R&D<p>yo</p>') |
147 self.assertEqual(entity.description, u'R&D<p>yo</p>') |
148 |
148 |
149 |
149 |
150 def test_metadata_cwuri(self): |
150 def test_metadata_cwuri(self): |
151 entity = self.request().create_entity('Workflow', name=u'wf1') |
151 entity = self.request().create_entity('Workflow', name=u'wf1') |
152 self.assertEquals(entity.cwuri, self.repo.config['base-url'] + 'eid/%s' % entity.eid) |
152 self.assertEqual(entity.cwuri, self.repo.config['base-url'] + 'eid/%s' % entity.eid) |
153 |
153 |
154 def test_metadata_creation_modification_date(self): |
154 def test_metadata_creation_modification_date(self): |
155 _now = datetime.now() |
155 _now = datetime.now() |
156 entity = self.request().create_entity('Workflow', name=u'wf1') |
156 entity = self.request().create_entity('Workflow', name=u'wf1') |
157 self.assertEquals((entity.creation_date - _now).seconds, 0) |
157 self.assertEqual((entity.creation_date - _now).seconds, 0) |
158 self.assertEquals((entity.modification_date - _now).seconds, 0) |
158 self.assertEqual((entity.modification_date - _now).seconds, 0) |
159 |
159 |
160 def test_metadata_created_by(self): |
160 def test_metadata_created_by(self): |
161 entity = self.request().create_entity('Bookmark', title=u'wf1', path=u'/view') |
161 entity = self.request().create_entity('Bookmark', title=u'wf1', path=u'/view') |
162 self.commit() # fire operations |
162 self.commit() # fire operations |
163 self.assertEquals(len(entity.created_by), 1) # make sure we have only one creator |
163 self.assertEqual(len(entity.created_by), 1) # make sure we have only one creator |
164 self.assertEquals(entity.created_by[0].eid, self.session.user.eid) |
164 self.assertEqual(entity.created_by[0].eid, self.session.user.eid) |
165 |
165 |
166 def test_metadata_owned_by(self): |
166 def test_metadata_owned_by(self): |
167 entity = self.request().create_entity('Bookmark', title=u'wf1', path=u'/view') |
167 entity = self.request().create_entity('Bookmark', title=u'wf1', path=u'/view') |
168 self.commit() # fire operations |
168 self.commit() # fire operations |
169 self.assertEquals(len(entity.owned_by), 1) # make sure we have only one owner |
169 self.assertEqual(len(entity.owned_by), 1) # make sure we have only one owner |
170 self.assertEquals(entity.owned_by[0].eid, self.session.user.eid) |
170 self.assertEqual(entity.owned_by[0].eid, self.session.user.eid) |
171 |
171 |
172 def test_user_login_stripped(self): |
172 def test_user_login_stripped(self): |
173 u = self.create_user(' joe ') |
173 u = self.create_user(' joe ') |
174 tname = self.execute('Any L WHERE E login L, E eid %(e)s', |
174 tname = self.execute('Any L WHERE E login L, E eid %(e)s', |
175 {'e': u.eid})[0][0] |
175 {'e': u.eid})[0][0] |
176 self.assertEquals(tname, 'joe') |
176 self.assertEqual(tname, 'joe') |
177 self.execute('SET X login " jijoe " WHERE X eid %(x)s', {'x': u.eid}) |
177 self.execute('SET X login " jijoe " WHERE X eid %(x)s', {'x': u.eid}) |
178 tname = self.execute('Any L WHERE E login L, E eid %(e)s', |
178 tname = self.execute('Any L WHERE E login L, E eid %(e)s', |
179 {'e': u.eid})[0][0] |
179 {'e': u.eid})[0][0] |
180 self.assertEquals(tname, 'jijoe') |
180 self.assertEqual(tname, 'jijoe') |
181 |
181 |
182 |
182 |
183 |
183 |
184 class UserGroupHooksTC(CubicWebTC): |
184 class UserGroupHooksTC(CubicWebTC): |
185 |
185 |
196 self.assertRaises(BadConnectionId, |
196 self.assertRaises(BadConnectionId, |
197 self.repo.execute, cnxid, 'State X') |
197 self.repo.execute, cnxid, 'State X') |
198 |
198 |
199 def test_user_group_synchronization(self): |
199 def test_user_group_synchronization(self): |
200 user = self.session.user |
200 user = self.session.user |
201 self.assertEquals(user.groups, set(('managers',))) |
201 self.assertEqual(user.groups, set(('managers',))) |
202 self.execute('SET X in_group G WHERE X eid %s, G name "guests"' % user.eid) |
202 self.execute('SET X in_group G WHERE X eid %s, G name "guests"' % user.eid) |
203 self.assertEquals(user.groups, set(('managers',))) |
203 self.assertEqual(user.groups, set(('managers',))) |
204 self.commit() |
204 self.commit() |
205 self.assertEquals(user.groups, set(('managers', 'guests'))) |
205 self.assertEqual(user.groups, set(('managers', 'guests'))) |
206 self.execute('DELETE X in_group G WHERE X eid %s, G name "guests"' % user.eid) |
206 self.execute('DELETE X in_group G WHERE X eid %s, G name "guests"' % user.eid) |
207 self.assertEquals(user.groups, set(('managers', 'guests'))) |
207 self.assertEqual(user.groups, set(('managers', 'guests'))) |
208 self.commit() |
208 self.commit() |
209 self.assertEquals(user.groups, set(('managers',))) |
209 self.assertEqual(user.groups, set(('managers',))) |
210 |
210 |
211 def test_user_composite_owner(self): |
211 def test_user_composite_owner(self): |
212 ueid = self.create_user('toto').eid |
212 ueid = self.create_user('toto').eid |
213 # composite of euser should be owned by the euser regardless of who created it |
213 # composite of euser should be owned by the euser regardless of who created it |
214 self.execute('INSERT EmailAddress X: X address "toto@logilab.fr", U use_email X ' |
214 self.execute('INSERT EmailAddress X: X address "toto@logilab.fr", U use_email X ' |
215 'WHERE U login "toto"') |
215 'WHERE U login "toto"') |
216 self.commit() |
216 self.commit() |
217 self.assertEquals(self.execute('Any A WHERE X owned_by U, U use_email X,' |
217 self.assertEqual(self.execute('Any A WHERE X owned_by U, U use_email X,' |
218 'U login "toto", X address A')[0][0], |
218 'U login "toto", X address A')[0][0], |
219 'toto@logilab.fr') |
219 'toto@logilab.fr') |
220 |
220 |
221 def test_no_created_by_on_deleted_entity(self): |
221 def test_no_created_by_on_deleted_entity(self): |
222 eid = self.execute('INSERT EmailAddress X: X address "toto@logilab.fr"')[0][0] |
222 eid = self.execute('INSERT EmailAddress X: X address "toto@logilab.fr"')[0][0] |
228 class CWPropertyHooksTC(CubicWebTC): |
228 class CWPropertyHooksTC(CubicWebTC): |
229 |
229 |
230 def test_unexistant_eproperty(self): |
230 def test_unexistant_eproperty(self): |
231 ex = self.assertRaises(ValidationError, |
231 ex = self.assertRaises(ValidationError, |
232 self.execute, 'INSERT CWProperty X: X pkey "bla.bla", X value "hop", X for_user U') |
232 self.execute, 'INSERT CWProperty X: X pkey "bla.bla", X value "hop", X for_user U') |
233 self.assertEquals(ex.errors, {'pkey-subject': 'unknown property key'}) |
233 self.assertEqual(ex.errors, {'pkey-subject': 'unknown property key'}) |
234 ex = self.assertRaises(ValidationError, |
234 ex = self.assertRaises(ValidationError, |
235 self.execute, 'INSERT CWProperty X: X pkey "bla.bla", X value "hop"') |
235 self.execute, 'INSERT CWProperty X: X pkey "bla.bla", X value "hop"') |
236 self.assertEquals(ex.errors, {'pkey-subject': 'unknown property key'}) |
236 self.assertEqual(ex.errors, {'pkey-subject': 'unknown property key'}) |
237 |
237 |
238 def test_site_wide_eproperty(self): |
238 def test_site_wide_eproperty(self): |
239 ex = self.assertRaises(ValidationError, |
239 ex = self.assertRaises(ValidationError, |
240 self.execute, 'INSERT CWProperty X: X pkey "ui.site-title", X value "hop", X for_user U') |
240 self.execute, 'INSERT CWProperty X: X pkey "ui.site-title", X value "hop", X for_user U') |
241 self.assertEquals(ex.errors, {'for_user-subject': "site-wide property can't be set for user"}) |
241 self.assertEqual(ex.errors, {'for_user-subject': "site-wide property can't be set for user"}) |
242 |
242 |
243 def test_bad_type_eproperty(self): |
243 def test_bad_type_eproperty(self): |
244 ex = self.assertRaises(ValidationError, |
244 ex = self.assertRaises(ValidationError, |
245 self.execute, 'INSERT CWProperty X: X pkey "ui.language", X value "hop", X for_user U') |
245 self.execute, 'INSERT CWProperty X: X pkey "ui.language", X value "hop", X for_user U') |
246 self.assertEquals(ex.errors, {'value-subject': u'unauthorized value'}) |
246 self.assertEqual(ex.errors, {'value-subject': u'unauthorized value'}) |
247 ex = self.assertRaises(ValidationError, |
247 ex = self.assertRaises(ValidationError, |
248 self.execute, 'INSERT CWProperty X: X pkey "ui.language", X value "hop"') |
248 self.execute, 'INSERT CWProperty X: X pkey "ui.language", X value "hop"') |
249 self.assertEquals(ex.errors, {'value-subject': u'unauthorized value'}) |
249 self.assertEqual(ex.errors, {'value-subject': u'unauthorized value'}) |
250 |
250 |
251 |
251 |
252 class SchemaHooksTC(CubicWebTC): |
252 class SchemaHooksTC(CubicWebTC): |
253 |
253 |
254 def test_duplicate_etype_error(self): |
254 def test_duplicate_etype_error(self): |