diff --git a/sams_classes/sams_app.py b/sams_classes/sams_app.py index 78e23c3fa89d56e3d71a382b3eca5f7ca6c0990e..71cbed54f17feae42b77457407f584d99c3deda2 100644 --- a/sams_classes/sams_app.py +++ b/sams_classes/sams_app.py @@ -6,7 +6,7 @@ from .exceptions import ( , FunctionNotExists ) from .sams_proxy import SAMSProxy -import sys +import sys, copy def eprint(*args, **kwargs): print(*args, file=sys.stderr, **kwargs) @@ -37,7 +37,7 @@ class SAMSApp: def lang(self, langCode: str) -> dict: request_lang = self.langDict.get(langCode, {}) - lang = self.langDict[self.__manifest['default_language']] + lang = copy.deepcopy(self.langDict[self.__manifest['default_language']]) lang.update(request_lang) return lang diff --git a/test/test_sams_app.py b/test/test_sams_app.py index 4eb28cbe4216eb461b5aba27026d9586a1fe2332..2906cb5557acac0146b1e6c64c7d7f2b60b21281 100644 --- a/test/test_sams_app.py +++ b/test/test_sams_app.py @@ -9,6 +9,7 @@ from sams_classes.exceptions import ( from flask import Blueprint, Flask from .helper_classes import FlaskInThread import requests +import copy def eprint(*args, **kwargs): print(*args, file=sys.stderr, **kwargs) @@ -89,7 +90,8 @@ class TestSAMSApp(unittest.TestCase): 'overwritten': 'Will overwrite default if requested' } app = SAMSApp(name = 'test', manifest = manifest - , langDict = {'de': default_lang, 'en': request_lang}) + , langDict = { + 'de': copy.deepcopy(default_lang), 'en': copy.deepcopy(request_lang)}) self.assertEqual(app.lang('en')['overwritten'], request_lang['overwritten']) self.assertEqual(app.lang('en')['fallback'], default_lang['fallback']) self.assertEqual(app.lang('fr')['overwritten'], default_lang['overwritten']) @@ -102,36 +104,44 @@ class TestSAMSApp(unittest.TestCase): manifest = { 'default_language': 'de', 'menu':[ - {'url': expected_urls[0], 'name_string': name_strings[0]}, - {'url': expected_urls[1], 'name_string': name_strings[1], + {'url': copy.copy(expected_urls[0]), + 'name_string': copy.copy(name_strings[0])}, + {'url': copy.copy(expected_urls[1]), 'name_string': copy.copy(name_strings[1]), 'menu':[ - {'url': expected_urls[2], 'name_string': name_strings[2]}, - {'url': expected_urls[3], 'name_string': name_strings[3]} + {'url': copy.copy(expected_urls[2]), + 'name_string': copy.copy(name_strings[2])}, + {'url': copy.copy(expected_urls[3]), + 'name_string': copy.copy(name_strings[3])} ]} ] } - default_lang = { - name_strings[0]: '1 überschrieben', - name_strings[1]: '2 verwendet', - name_strings[2]: '2.1 verwendet', - name_strings[3]: '2.2 überschrieben' - } - request_lang = { - name_strings[0]: '1 used', - name_strings[3]: '2.2 used' + langDicts = { + 'de': { + name_strings[0]: '1 überschrieben', + name_strings[1]: '2 verwendet', + name_strings[2]: '2.1 verwendet', + name_strings[3]: '2.2 überschrieben' + }, + 'en': { + name_strings[0]: '1 used', + name_strings[3]: '2.2 used' + } } app = SAMSApp(name = 'test', manifest = manifest - , langDict = {'de': default_lang, 'en': request_lang}) + , langDict = copy.deepcopy(langDicts)) menu = app.menu('en') self.assertEqual(menu[0]['url'], expected_urls[0]) self.assertEqual(menu[1]['url'], expected_urls[1]) self.assertEqual(menu[1]['menu'][0]['url'], expected_urls[2]) self.assertEqual(menu[1]['menu'][1]['url'], expected_urls[3]) - self.assertEqual(menu[0]['name'], request_lang[name_strings[0]]) - self.assertEqual(menu[1]['name'], default_lang[name_strings[1]]) - self.assertEqual(menu[1]['menu'][0]['name'], default_lang[name_strings[2]]) - self.assertEqual(menu[1]['menu'][1]['name'], request_lang[name_strings[3]]) - + self.assertEqual(menu[1]['name'], langDicts['de'][name_strings[1]]) + self.assertEqual(menu[0]['name'], langDicts['en'][name_strings[0]]) + self.assertEqual(menu[1]['menu'][1]['name'], langDicts['en'][name_strings[3]]) + self.assertEqual(menu[1]['menu'][0]['name'], langDicts['de'][name_strings[2]]) + menu = app.menu('de') + self.assertEqual(menu[0]['name'], langDicts['de'][name_strings[0]]) + self.assertEqual(menu[1]['menu'][1]['name'], langDicts['de'][name_strings[3]]) + def test_app_menu_prefix(self): """app.menu(lanCode, prefix) returns the app menu with prefixed urls""" manifest = { diff --git a/test/test_sams_hub.py b/test/test_sams_hub.py index 08ef387410149d24b198201d9e965e7d73fca89f..20887a35398b9f0d11454de2e60af1698f63c2cd 100644 --- a/test/test_sams_hub.py +++ b/test/test_sams_hub.py @@ -4,6 +4,7 @@ from sams_classes.exceptions import AppNotExist from flask import Flask, Blueprint import sys, time from helper_classes import FlaskInThread +import copy def eprint(*args, **kwargs): print(*args, file=sys.stderr, **kwargs) @@ -223,34 +224,46 @@ class CaseMinimalSAMSHub(unittest.TestCase): def test_hub_default_language_used(self): """The hub default_language is prefered instead of app default_language""" - wrong = 'Hello world!' - expected = 'Hallo Welt!' - self.hub.addApp( - SAMSApp( - name = 'test' - , manifest = { - 'default_language': 'en' - , 'views':[ - {'url': 'hello' - , 'function': 'views.hello'} - ] - } - , langDict = { - 'de': {'hello': expected} - , 'en': {'hello': wrong} - } - ) - ) - self.hub.flaskApp.config['DEBUG'] = True - client = self.hub.flaskApp.test_client(self) - response = client.get('/test/hello') - self.assertIs(response.status_code, 200) - self.assertEquals(response.data.decode('utf-8'), expected) + langDicts = { + 'de': {'hello': 'Hallo Welt!'}, + 'en': {'hello': 'Hello world!'} + } + for langCode, langDict in langDicts.items(): + with self.subTest(langCode): + hub = SAMSHub(name = 'test', config = {'default_language': 'de'}) + hub.addApp( + SAMSApp( + name = 'test' + , manifest = { + 'default_language': langCode + , 'views':[ + {'url': 'hello' + , 'function': 'views.hello'} + ] + } + , langDict = copy.deepcopy(langDicts) + ) + ) + hub.flaskApp.config['DEBUG'] = True + with hub.flaskApp.test_client(self) as client: + response = client.get('/test/hello') + self.assertIs(response.status_code, 200) + self.assertEquals( + response.data.decode('utf-8'), langDicts['de']['hello']) def test_session_language_used(self): """use Session['language'] if possible""" - expected = 'Bonjour!' - self.hub.addApp( + langDict = { + 'de': {'hello': 'Hallo Welt!'}, + 'en': {'hello': 'Hello world!'}, + 'fr': {'hello': 'Bonjour tout le monde!'} + } + sessionLangs = ['de', 'en', 'fr'] + hub = SAMSHub( + name = 'test', + config = {'default_language': 'de'} + ) + hub.addApp( SAMSApp( name = 'test' , manifest = { @@ -260,19 +273,19 @@ class CaseMinimalSAMSHub(unittest.TestCase): , 'function': 'views.hello'} ] } - , langDict = { - 'de': {'hello': 'falsch'} - , 'en': {'hello': 'wrong'} - , 'fr': {'hello': expected} - } + , langDict = copy.deepcopy(langDict) ) ) - self.hub.flaskApp.config['DEBUG'] = True - with self.hub.flaskApp.test_client(self) as client: - with client.session_transaction() as session_simulation: - session_simulation['language'] = 'fr' - response = client.get('/test/hello') - self.assertIs(response.status_code, 200) - self.assertEquals(response.data.decode('utf-8'), expected) + for sessionLang in sessionLangs: + eprint(langDict) + with self.subTest(sessionLang): + hub.flaskApp.config['DEBUG'] = True + with hub.flaskApp.test_client(self) as client: + with client.session_transaction() as session_simulation: + session_simulation['language'] = sessionLang + response = client.get('/test/hello') + self.assertIs(response.status_code, 200) + self.assertEquals( + response.data.decode('utf-8'),langDict[sessionLang]['hello']) if __name__ == '__main__': unittest.main() \ No newline at end of file