summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStanislav Levin <slev@altlinux.org>2018-06-30 00:44:42 +0300
committerRob Crittenden <rcritten@redhat.com>2018-07-17 15:32:28 -0400
commitf49fac7bda8150aee2086be9afdbe4eb81c3f18a (patch)
tree358194be4ab6d84795f70307a02e09c7c17e3acb
parent0908e80d62146c79c4312effb8e285c13294ec4b (diff)
downloadfreeipa-f49fac7bda8150aee2086be9afdbe4eb81c3f18a.tar.gz
freeipa-f49fac7bda8150aee2086be9afdbe4eb81c3f18a.tar.xz
freeipa-f49fac7bda8150aee2086be9afdbe4eb81c3f18a.zip
Add tests for "i18n_messages" end point
Fixes: https://pagure.io/freeipa/issue/7559 Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com> Reviewed-By: Christian Heimes <cheimes@redhat.com> Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
-rw-r--r--.test_runner_config.yaml1
-rw-r--r--.test_runner_config_py3_temp.yaml1
-rw-r--r--ipatests/test_ipaserver/test_i18n_messages.py120
3 files changed, 122 insertions, 0 deletions
diff --git a/.test_runner_config.yaml b/.test_runner_config.yaml
index 1c5bff728..8b2834e12 100644
--- a/.test_runner_config.yaml
+++ b/.test_runner_config.yaml
@@ -47,6 +47,7 @@ steps:
configure:
- ./autogen.sh
install_packages:
+ - sed -i 's/%_install_langs \(.*\)/\0:fr/g' /etc/rpm/macros.image-language-conf
- dnf install -y ${container_working_dir}/dist/rpms/*.rpm --best --allowerasing
install_server:
- ipa-server-install -U --domain ${server_domain} --realm ${server_realm} -p ${server_password}
diff --git a/.test_runner_config_py3_temp.yaml b/.test_runner_config_py3_temp.yaml
index 5465d7db4..4ac5cb232 100644
--- a/.test_runner_config_py3_temp.yaml
+++ b/.test_runner_config_py3_temp.yaml
@@ -47,6 +47,7 @@ steps:
configure:
- ./autogen.sh
install_packages:
+ - sed -i 's/%_install_langs \(.*\)/\0:fr/g' /etc/rpm/macros.image-language-conf
- dnf install -y ${container_working_dir}/dist/rpms/*.rpm --best --allowerasing
- dnf install -y python3-mod_wsgi --best --allowerasing # Py3 temporary
install_server:
diff --git a/ipatests/test_ipaserver/test_i18n_messages.py b/ipatests/test_ipaserver/test_i18n_messages.py
new file mode 100644
index 000000000..345e5ff49
--- /dev/null
+++ b/ipatests/test_ipaserver/test_i18n_messages.py
@@ -0,0 +1,120 @@
+#
+# Copyright (C) 2018 FreeIPA Contributors see COPYING for license
+#
+
+import json
+import os
+import pytest
+
+from ipalib import api
+
+from ipatests.test_xmlrpc.xmlrpc_test import XMLRPC_test
+from ipatests.test_ipaserver.httptest import Unauthorized_HTTP_test
+from ipatests.util import (assert_equal, assert_deepequal, raises,
+ assert_not_equal)
+
+from ipapython.version import API_VERSION
+from ipaserver.plugins.internal import i18n_messages
+
+
+@pytest.mark.tier1
+class test_i18n_messages(XMLRPC_test, Unauthorized_HTTP_test):
+ """
+ Tests for i18n_messages end point
+ """
+ app_uri = '/ipa/i18n_messages'
+ content_type = 'application/json'
+
+ def _prepare_data(self, method):
+ """
+ Construct json data required for request
+ """
+ return {"method": "{0}".format(method),
+ "params": [[], {"version": "{0}".format(API_VERSION)}]}
+
+ def _prepare_accept_lang(self):
+ try:
+ return os.environ['LANGUAGE']
+ except KeyError:
+ pass
+
+ try:
+ return os.environ['LANG'].split('.')[0].replace('_', '-')
+ except KeyError:
+ return ''
+
+ def _fetch_i18n_msgs(self):
+ """
+ Build translations directly via command instance
+ """
+ return i18n_messages({}).execute()
+
+ def _fetch_i18n_msgs_http(self, accept_lang):
+ """
+ Fetch translations via http request
+ """
+ self.accept_language = accept_lang
+ params = json.dumps(self._prepare_data('i18n_messages'))
+ response = self.send_request(params=params)
+
+ assert_equal(response.status, 200)
+ response_data = response.read()
+ jsondata = json.loads(response_data)
+ assert_equal(jsondata['error'], None)
+ assert jsondata['result']
+ assert jsondata['result']['texts']
+
+ return jsondata['result']
+
+ def test_only_i18n_serves(self):
+ """
+ Test if end point doesn't fulfill other RPC commands
+ """
+ assert api.Command.get('user_find')
+ params = json.dumps(self._prepare_data('user_find/1'))
+ response = self.send_request(params=params)
+
+ assert_equal(response.status, 403)
+ assert_equal(response.reason, 'Forbidden')
+
+ response_data = response.read()
+ assert_equal(response_data, b'Invalid RPC command')
+ raises(ValueError, json.loads, response_data)
+
+ def test_only_post_serves(self):
+ """
+ Test if end point fulfills only POST method
+ """
+ params = json.dumps(self._prepare_data('i18n_messages'))
+ response = self.send_request(method='GET', params=params)
+
+ assert_equal(response.status, 405)
+ assert_equal(response.reason, 'Method Not Allowed')
+ assert response.msg
+ assert_equal(response.msg['allow'], 'POST')
+
+ response_data = response.read()
+ raises(ValueError, json.loads, response_data)
+
+ def test_i18n_receive(self):
+ """
+ Test if translations request is successful
+ """
+ expected_msgs = self._fetch_i18n_msgs()
+ actual_msgs = self._fetch_i18n_msgs_http(self._prepare_accept_lang())
+
+ assert_deepequal(expected_msgs, actual_msgs)
+
+ def test_i18n_consequence_receive(self):
+ """
+ Test if consequence translations requests for different languages are
+ successful. Every request's result have to contain messages in it's
+ locale.
+ """
+ prev_i18n_msgs = self._fetch_i18n_msgs_http('en-us')
+ cur_i18n_msgs = self._fetch_i18n_msgs_http('fr-fr')
+ try:
+ assert_equal(prev_i18n_msgs['texts']['true'], u'True')
+ assert_equal(cur_i18n_msgs['texts']['true'], u'Vrai')
+ except KeyError:
+ assert_not_equal(prev_i18n_msgs, cur_i18n_msgs)