cubicweb/web/test/unittest_application.py
changeset 11794 d8830e2bd2e0
parent 11725 904ee9cd0cf9
child 11799 1bdfe9d4ab83
equal deleted inserted replaced
11793:b455460630a0 11794:d8830e2bd2e0
   213             self.assertIsInstance(forminfo['eidmap']['Y'], int)
   213             self.assertIsInstance(forminfo['eidmap']['Y'], int)
   214             self.assertEqual(forminfo['error'].entity, 'X')
   214             self.assertEqual(forminfo['error'].entity, 'X')
   215             self.assertEqual(forminfo['error'].errors,
   215             self.assertEqual(forminfo['error'].errors,
   216                              {'login-subject': 'required field'})
   216                              {'login-subject': 'required field'})
   217             self.assertEqual(forminfo['values'], req.form)
   217             self.assertEqual(forminfo['values'], req.form)
       
   218 
       
   219     def test_handle_request_with_lang_fromurl(self):
       
   220         """No language negociation, get language from URL."""
       
   221         self.config.global_set_option('language-mode', 'url-prefix')
       
   222         req, origsession = self.init_authentication('http')
       
   223         self.assertEqual(req.url(), 'http://testing.fr/cubicweb/login')
       
   224         self.assertEqual(req.lang, 'en')
       
   225         self.app.handle_request(req)
       
   226         newreq = self.requestcls(req.vreg, url='fr/toto')
       
   227         self.assertEqual(newreq.lang, 'en')
       
   228         self.assertEqual(newreq.url(), 'http://testing.fr/cubicweb/fr/toto')
       
   229         self.app.handle_request(newreq)
       
   230         self.assertEqual(newreq.lang, 'fr')
       
   231         self.assertEqual(newreq.url(), 'http://testing.fr/cubicweb/fr/toto')
       
   232         # unknown language
       
   233         newreq = self.requestcls(req.vreg, url='unknown-lang/cwuser')
       
   234         result = self.app.handle_request(newreq)
       
   235         self.assertEqual(newreq.lang, 'en')
       
   236         self.assertEqual(newreq.url(), 'http://testing.fr/cubicweb/unknown-lang/cwuser')
       
   237         self.assertIn('this resource does not exist',
       
   238                       result.decode('ascii', errors='ignore'))
       
   239         # no prefix
       
   240         newreq = self.requestcls(req.vreg, url='cwuser')
       
   241         result = self.app.handle_request(newreq)
       
   242         self.assertEqual(newreq.lang, 'en')
       
   243         self.assertEqual(newreq.url(), 'http://testing.fr/cubicweb/cwuser')
       
   244         self.assertNotIn('this resource does not exist',
       
   245                          result.decode('ascii', errors='ignore'))
       
   246 
       
   247     def test_handle_request_with_lang_negotiated(self):
       
   248         """Language negociated, normal case."""
       
   249         self.config.global_set_option('language-mode', 'http-negotiation')
       
   250         orig_translations = self.config.translations.copy()
       
   251         self.config.translations = {'fr': (text_type, text_type),
       
   252                                     'en': (text_type, text_type)}
       
   253         try:
       
   254             headers = {'Accept-Language': 'fr'}
       
   255             with self.admin_access.web_request(headers=headers) as req:
       
   256                 self.app.handle_request(req)
       
   257             self.assertEqual(req.lang, 'fr')
       
   258         finally:
       
   259             self.config.translations = orig_translations
       
   260 
       
   261     def test_handle_request_with_lang_negotiated_prefix_in_url(self):
       
   262         """Language negociated, unexpected language prefix in URL."""
       
   263         self.config.global_set_option('language-mode', 'http-negotiation')
       
   264         with self.admin_access.web_request(url='fr/toto') as req:
       
   265             result = self.app.handle_request(req)
       
   266         self.assertIn('this resource does not exist',  # NotFound.
       
   267                       result.decode('ascii', errors='ignore'))
       
   268 
       
   269     def test_handle_request_no_lang_negotiation_fixed_language(self):
       
   270         """No language negociation, "ui.language" fixed."""
       
   271         self.config.global_set_option('language-mode', '')
       
   272         vreg = self.app.vreg
       
   273         self.assertEqual(vreg.property_value('ui.language'), 'en')
       
   274         props = []
       
   275         try:
       
   276             with self.admin_access.cnx() as cnx:
       
   277                 props.append(cnx.create_entity('CWProperty', value=u'de',
       
   278                                                pkey=u'ui.language').eid)
       
   279                 cnx.commit()
       
   280             self.assertEqual(vreg.property_value('ui.language'), 'de')
       
   281             headers = {'Accept-Language': 'fr'}  # should not have any effect.
       
   282             with self.admin_access.web_request(headers=headers) as req:
       
   283                 self.app.handle_request(req)
       
   284             # user has no "ui.language" property, getting site's default.
       
   285             self.assertEqual(req.lang, 'de')
       
   286             with self.admin_access.cnx() as cnx:
       
   287                 props.append(cnx.create_entity('CWProperty', value=u'es',
       
   288                                                pkey=u'ui.language',
       
   289                                                for_user=cnx.user).eid)
       
   290                 cnx.commit()
       
   291             with self.admin_access.web_request(headers=headers) as req:
       
   292                 self.app.handle_request(req)
       
   293             self.assertEqual(req.lang, 'es')
       
   294         finally:
       
   295             with self.admin_access.cnx() as cnx:
       
   296                 for peid in props:
       
   297                     cnx.entity_from_eid(peid).cw_delete()
       
   298                 cnx.commit()
   218 
   299 
   219     def test_validation_error_dont_loose_subentity_data_repo(self):
   300     def test_validation_error_dont_loose_subentity_data_repo(self):
   220         """test creation of two linked entities
   301         """test creation of two linked entities
   221 
   302 
   222         error occurs on the repository
   303         error occurs on the repository