16 # You should have received a copy of the GNU Lesser General Public License along |
16 # You should have received a copy of the GNU Lesser General Public License along |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
18 """unit tests for cubicweb.web.application""" |
18 """unit tests for cubicweb.web.application""" |
19 |
19 |
20 import base64 |
20 import base64 |
21 |
21 import http.client |
22 from six import text_type |
22 from http.cookies import SimpleCookie |
23 from six.moves import http_client |
|
24 from six.moves.http_cookies import SimpleCookie |
|
25 |
23 |
26 from logilab.common.testlib import TestCase, unittest_main |
24 from logilab.common.testlib import TestCase, unittest_main |
27 from logilab.common.decorators import clear_cache |
25 from logilab.common.decorators import clear_cache |
28 |
26 |
29 from cubicweb import view |
27 from cubicweb import view |
165 cnx.commit() |
163 cnx.commit() |
166 |
164 |
167 def test_publish_validation_error(self): |
165 def test_publish_validation_error(self): |
168 with self.admin_access.web_request() as req: |
166 with self.admin_access.web_request() as req: |
169 user = req.user |
167 user = req.user |
170 eid = text_type(user.eid) |
168 eid = str(user.eid) |
171 req.form = { |
169 req.form = { |
172 'eid': eid, |
170 'eid': eid, |
173 '__type:' + eid: 'CWUser', |
171 '__type:' + eid: 'CWUser', |
174 '_cw_entity_fields:' + eid: 'login-subject', |
172 '_cw_entity_fields:' + eid: 'login-subject', |
175 'login-subject:' + eid: '', # ERROR: no login specified |
173 'login-subject:' + eid: '', # ERROR: no login specified |
246 def test_handle_request_with_lang_negotiated(self): |
244 def test_handle_request_with_lang_negotiated(self): |
247 """Language negociated, normal case.""" |
245 """Language negociated, normal case.""" |
248 self.config.global_set_option('language-mode', 'http-negotiation') |
246 self.config.global_set_option('language-mode', 'http-negotiation') |
249 orig_translations = self.config.translations.copy() |
247 orig_translations = self.config.translations.copy() |
250 self.config.translations = { |
248 self.config.translations = { |
251 'fr': (text_type, lambda x, y: text_type(y)), |
249 'fr': (str, lambda x, y: str(y)), |
252 'en': (text_type, lambda x, y: text_type(y))} |
250 'en': (str, lambda x, y: str(y))} |
253 try: |
251 try: |
254 headers = {'Accept-Language': 'fr'} |
252 headers = {'Accept-Language': 'fr'} |
255 with self.admin_access.web_request(headers=headers) as req: |
253 with self.admin_access.web_request(headers=headers) as req: |
256 self.app.handle_request(req) |
254 self.app.handle_request(req) |
257 self.assertEqual(req.lang, 'fr') |
255 self.assertEqual(req.lang, 'fr') |
334 def _edit_parent(self, dir_eid, parent_eid, role='subject', |
332 def _edit_parent(self, dir_eid, parent_eid, role='subject', |
335 etype='Directory', **kwargs): |
333 etype='Directory', **kwargs): |
336 parent_eid = parent_eid or '__cubicweb_internal_field__' |
334 parent_eid = parent_eid or '__cubicweb_internal_field__' |
337 with self.admin_access.web_request() as req: |
335 with self.admin_access.web_request() as req: |
338 req.form = { |
336 req.form = { |
339 'eid': text_type(dir_eid), |
337 'eid': str(dir_eid), |
340 '__maineid': text_type(dir_eid), |
338 '__maineid': str(dir_eid), |
341 '__type:%s' % dir_eid: etype, |
339 '__type:%s' % dir_eid: etype, |
342 'parent-%s:%s' % (role, dir_eid): parent_eid, |
340 'parent-%s:%s' % (role, dir_eid): parent_eid, |
343 } |
341 } |
344 req.form.update(kwargs) |
342 req.form.update(kwargs) |
345 req.form['_cw_entity_fields:%s' % dir_eid] = ','.join( |
343 req.form['_cw_entity_fields:%s' % dir_eid] = ','.join( |
351 |
349 |
352 def _edit_in_version(self, ticket_eid, version_eid, **kwargs): |
350 def _edit_in_version(self, ticket_eid, version_eid, **kwargs): |
353 version_eid = version_eid or '__cubicweb_internal_field__' |
351 version_eid = version_eid or '__cubicweb_internal_field__' |
354 with self.admin_access.web_request() as req: |
352 with self.admin_access.web_request() as req: |
355 req.form = { |
353 req.form = { |
356 'eid': text_type(ticket_eid), |
354 'eid': str(ticket_eid), |
357 '__maineid': text_type(ticket_eid), |
355 '__maineid': str(ticket_eid), |
358 '__type:%s' % ticket_eid: 'Ticket', |
356 '__type:%s' % ticket_eid: 'Ticket', |
359 'in_version-subject:%s' % ticket_eid: version_eid, |
357 'in_version-subject:%s' % ticket_eid: version_eid, |
360 } |
358 } |
361 req.form.update(kwargs) |
359 req.form.update(kwargs) |
362 req.form['_cw_entity_fields:%s' % ticket_eid] = ','.join( |
360 req.form['_cw_entity_fields:%s' % ticket_eid] = ','.join( |
393 topd = cnx.create_entity('Directory', name=u'topd') |
391 topd = cnx.create_entity('Directory', name=u'topd') |
394 cnx.commit() |
392 cnx.commit() |
395 |
393 |
396 with self.admin_access.web_request() as req: |
394 with self.admin_access.web_request() as req: |
397 req.form = { |
395 req.form = { |
398 'eid': (text_type(topd.eid), u'B'), |
396 'eid': (str(topd.eid), u'B'), |
399 '__maineid': text_type(topd.eid), |
397 '__maineid': str(topd.eid), |
400 '__type:%s' % topd.eid: 'Directory', |
398 '__type:%s' % topd.eid: 'Directory', |
401 '__type:B': 'Directory', |
399 '__type:B': 'Directory', |
402 'parent-object:%s' % topd.eid: u'B', |
400 'parent-object:%s' % topd.eid: u'B', |
403 'name-subject:B': u'subd', |
401 'name-subject:B': u'subd', |
404 '_cw_entity_fields:%s' % topd.eid: 'parent-object', |
402 '_cw_entity_fields:%s' % topd.eid: 'parent-object', |
567 mydir = cnx.create_entity('Directory', name=u'dir', |
565 mydir = cnx.create_entity('Directory', name=u'dir', |
568 has_permission=perm) |
566 has_permission=perm) |
569 cnx.commit() |
567 cnx.commit() |
570 |
568 |
571 with self.admin_access.web_request() as req: |
569 with self.admin_access.web_request() as req: |
572 dir_eid = text_type(mydir.eid) |
570 dir_eid = str(mydir.eid) |
573 perm_eid = text_type(perm.eid) |
571 perm_eid = str(perm.eid) |
574 req.form = { |
572 req.form = { |
575 'eid': [dir_eid, perm_eid], |
573 'eid': [dir_eid, perm_eid], |
576 '__maineid': dir_eid, |
574 '__maineid': dir_eid, |
577 '__type:%s' % dir_eid: 'Directory', |
575 '__type:%s' % dir_eid: 'Directory', |
578 '__type:%s' % perm_eid: 'DirectoryPermission', |
576 '__type:%s' % perm_eid: 'DirectoryPermission', |
594 with self.temporary_appobjects(ErrorAjaxView): |
592 with self.temporary_appobjects(ErrorAjaxView): |
595 with real_error_handling(self.app) as app: |
593 with real_error_handling(self.app) as app: |
596 with self.admin_access.web_request(vid='test.ajax.error', url='') as req: |
594 with self.admin_access.web_request(vid='test.ajax.error', url='') as req: |
597 req.ajax_request = True |
595 req.ajax_request = True |
598 app.handle_request(req) |
596 app.handle_request(req) |
599 self.assertEqual(http_client.INTERNAL_SERVER_ERROR, |
597 self.assertEqual(http.client.INTERNAL_SERVER_ERROR, |
600 req.status_out) |
598 req.status_out) |
601 |
599 |
602 def _test_cleaned(self, kwargs, injected, cleaned): |
600 def _test_cleaned(self, kwargs, injected, cleaned): |
603 with self.admin_access.web_request(**kwargs) as req: |
601 with self.admin_access.web_request(**kwargs) as req: |
604 page = self.app_handle_request(req) |
602 page = self.app_handle_request(req) |