summaryrefslogtreecommitdiffstats
path: root/keystone/tests/test_wsgi.py
diff options
context:
space:
mode:
Diffstat (limited to 'keystone/tests/test_wsgi.py')
-rw-r--r--keystone/tests/test_wsgi.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/keystone/tests/test_wsgi.py b/keystone/tests/test_wsgi.py
index 781159e2..0dfa9467 100644
--- a/keystone/tests/test_wsgi.py
+++ b/keystone/tests/test_wsgi.py
@@ -14,8 +14,14 @@
# License for the specific language governing permissions and limitations
# under the License.
+import uuid
+
+from babel import localedata
+import gettext
+
from keystone.common import wsgi
from keystone import exception
+from keystone.openstack.common import gettextutils
from keystone.openstack.common import jsonutils
from keystone.tests import core as test
@@ -211,3 +217,84 @@ class WSGIFunctionTest(test.TestCase):
message = 'test = "param1" : "value"'
self.assertEqual(wsgi.mask_password(message),
'test = "param1" : "value"')
+
+
+class LocalizedResponseTest(test.TestCase):
+ def setUp(self):
+ super(LocalizedResponseTest, self).setUp()
+ gettextutils._AVAILABLE_LANGUAGES = []
+
+ def tearDown(self):
+ gettextutils._AVAILABLE_LANGUAGES = []
+ super(LocalizedResponseTest, self).tearDown()
+
+ def _set_expected_languages(self, all_locales=[], avail_locales=None):
+ # Override localedata.locale_identifiers to return some locales.
+ def returns_some_locales(*args, **kwargs):
+ return all_locales
+
+ self.stubs.Set(localedata, 'locale_identifiers', returns_some_locales)
+
+ # Override gettext.find to return other than None for some languages.
+ def fake_gettext_find(lang_id, *args, **kwargs):
+ found_ret = '/keystone/%s/LC_MESSAGES/keystone.mo' % lang_id
+ if avail_locales is None:
+ # All locales are available.
+ return found_ret
+ languages = kwargs['languages']
+ if languages[0] in avail_locales:
+ return found_ret
+ return None
+
+ self.stubs.Set(gettext, 'find', fake_gettext_find)
+
+ def test_request_match_default(self):
+ # The default language if no Accept-Language is provided is en_US
+ req = wsgi.Request.blank('/')
+ self.assertEquals(req.best_match_language(), 'en_US')
+
+ def test_request_match_language_expected(self):
+ # If Accept-Language is a supported language, best_match_language()
+ # returns it.
+
+ self._set_expected_languages(all_locales=['it'])
+
+ req = wsgi.Request.blank('/', headers={'Accept-Language': 'it'})
+ self.assertEquals(req.best_match_language(), 'it')
+
+ def test_request_match_language_unexpected(self):
+ # If Accept-Language is a language we do not support,
+ # best_match_language() returns the default.
+
+ self._set_expected_languages(all_locales=['it'])
+
+ req = wsgi.Request.blank('/', headers={'Accept-Language': 'zh'})
+ self.assertEquals(req.best_match_language(), 'en_US')
+
+ def test_localized_message(self):
+ # If the accept-language header is set on the request, the localized
+ # message is returned by calling get_localized_message.
+
+ LANG_ID = uuid.uuid4().hex
+ ORIGINAL_TEXT = uuid.uuid4().hex
+ TRANSLATED_TEXT = uuid.uuid4().hex
+
+ self._set_expected_languages(all_locales=[LANG_ID])
+
+ def fake_get_localized_message(message, user_locale):
+ if (user_locale == LANG_ID and
+ message == ORIGINAL_TEXT):
+ return TRANSLATED_TEXT
+
+ self.stubs.Set(gettextutils, 'get_localized_message',
+ fake_get_localized_message)
+
+ error = exception.NotFound(message=ORIGINAL_TEXT)
+ resp = wsgi.render_exception(error, user_locale=LANG_ID)
+ result = jsonutils.loads(resp.body)
+
+ exp = {'error': {'message': TRANSLATED_TEXT,
+ 'code': 404,
+ 'title': 'Not Found'}}
+
+ self.assertEqual(exp, result)