Skip to content
Snippets Groups Projects
Commit 877eb550 authored by slobinger's avatar slobinger
Browse files

Merge branch '14-language-dict-update-fix' into 'master'

Resolve "Ändern der Sprache in ExampleApp muss in beiden Sprachen funtkionieren"

Closes #14

See merge request !8
parents a949d126 63d47459
No related branches found
No related tags found
1 merge request!8Resolve "Ändern der Sprache in ExampleApp muss in beiden Sprachen funtkionieren"
......@@ -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
......
......@@ -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 = {
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment