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 |