Skip to content
Snippets Groups Projects
Commit d101508e authored by Sebastian Lobinger's avatar Sebastian Lobinger
Browse files

Merge branch 'master' into 11-write-example-app

parents f44f722c 877eb550
Branches
Tags
1 merge request!10Resolve "Example App schreiben"
...@@ -6,7 +6,7 @@ from .exceptions import ( ...@@ -6,7 +6,7 @@ from .exceptions import (
, FunctionNotExists , FunctionNotExists
) )
from .sams_proxy import SAMSProxy from .sams_proxy import SAMSProxy
import sys import sys, copy
def eprint(*args, **kwargs): def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs) print(*args, file=sys.stderr, **kwargs)
...@@ -37,7 +37,7 @@ class SAMSApp: ...@@ -37,7 +37,7 @@ class SAMSApp:
def lang(self, langCode: str) -> dict: def lang(self, langCode: str) -> dict:
request_lang = self.langDict.get(langCode, {}) 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) lang.update(request_lang)
return lang return lang
......
...@@ -9,6 +9,7 @@ from sams_classes.exceptions import ( ...@@ -9,6 +9,7 @@ from sams_classes.exceptions import (
from flask import Blueprint, Flask from flask import Blueprint, Flask
from .helper_classes import FlaskInThread from .helper_classes import FlaskInThread
import requests import requests
import copy
def eprint(*args, **kwargs): def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs) print(*args, file=sys.stderr, **kwargs)
...@@ -89,7 +90,8 @@ class TestSAMSApp(unittest.TestCase): ...@@ -89,7 +90,8 @@ class TestSAMSApp(unittest.TestCase):
'overwritten': 'Will overwrite default if requested' 'overwritten': 'Will overwrite default if requested'
} }
app = SAMSApp(name = 'test', manifest = manifest 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')['overwritten'], request_lang['overwritten'])
self.assertEqual(app.lang('en')['fallback'], default_lang['fallback']) self.assertEqual(app.lang('en')['fallback'], default_lang['fallback'])
self.assertEqual(app.lang('fr')['overwritten'], default_lang['overwritten']) self.assertEqual(app.lang('fr')['overwritten'], default_lang['overwritten'])
...@@ -102,36 +104,44 @@ class TestSAMSApp(unittest.TestCase): ...@@ -102,36 +104,44 @@ class TestSAMSApp(unittest.TestCase):
manifest = { manifest = {
'default_language': 'de', 'default_language': 'de',
'menu':[ 'menu':[
{'url': expected_urls[0], 'name_string': name_strings[0]}, {'url': copy.copy(expected_urls[0]),
{'url': expected_urls[1], 'name_string': name_strings[1], 'name_string': copy.copy(name_strings[0])},
{'url': copy.copy(expected_urls[1]), 'name_string': copy.copy(name_strings[1]),
'menu':[ 'menu':[
{'url': expected_urls[2], 'name_string': name_strings[2]}, {'url': copy.copy(expected_urls[2]),
{'url': expected_urls[3], 'name_string': name_strings[3]} 'name_string': copy.copy(name_strings[2])},
{'url': copy.copy(expected_urls[3]),
'name_string': copy.copy(name_strings[3])}
]} ]}
] ]
} }
default_lang = { langDicts = {
name_strings[0]: '1 überschrieben', 'de': {
name_strings[1]: '2 verwendet', name_strings[0]: '1 überschrieben',
name_strings[2]: '2.1 verwendet', name_strings[1]: '2 verwendet',
name_strings[3]: '2.2 überschrieben' name_strings[2]: '2.1 verwendet',
} name_strings[3]: '2.2 überschrieben'
request_lang = { },
name_strings[0]: '1 used', 'en': {
name_strings[3]: '2.2 used' name_strings[0]: '1 used',
name_strings[3]: '2.2 used'
}
} }
app = SAMSApp(name = 'test', manifest = manifest app = SAMSApp(name = 'test', manifest = manifest
, langDict = {'de': default_lang, 'en': request_lang}) , langDict = copy.deepcopy(langDicts))
menu = app.menu('en') menu = app.menu('en')
self.assertEqual(menu[0]['url'], expected_urls[0]) self.assertEqual(menu[0]['url'], expected_urls[0])
self.assertEqual(menu[1]['url'], expected_urls[1]) self.assertEqual(menu[1]['url'], expected_urls[1])
self.assertEqual(menu[1]['menu'][0]['url'], expected_urls[2]) self.assertEqual(menu[1]['menu'][0]['url'], expected_urls[2])
self.assertEqual(menu[1]['menu'][1]['url'], expected_urls[3]) 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'], langDicts['de'][name_strings[1]])
self.assertEqual(menu[1]['name'], default_lang[name_strings[1]]) self.assertEqual(menu[0]['name'], langDicts['en'][name_strings[0]])
self.assertEqual(menu[1]['menu'][0]['name'], default_lang[name_strings[2]]) self.assertEqual(menu[1]['menu'][1]['name'], langDicts['en'][name_strings[3]])
self.assertEqual(menu[1]['menu'][1]['name'], request_lang[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): def test_app_menu_prefix(self):
"""app.menu(lanCode, prefix) returns the app menu with prefixed urls""" """app.menu(lanCode, prefix) returns the app menu with prefixed urls"""
manifest = { manifest = {
......
...@@ -4,6 +4,7 @@ from sams_classes.exceptions import AppNotExist ...@@ -4,6 +4,7 @@ from sams_classes.exceptions import AppNotExist
from flask import Flask, Blueprint from flask import Flask, Blueprint
import sys, time import sys, time
from helper_classes import FlaskInThread from helper_classes import FlaskInThread
import copy
def eprint(*args, **kwargs): def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs) print(*args, file=sys.stderr, **kwargs)
...@@ -219,34 +220,46 @@ class CaseMinimalSAMSHub(unittest.TestCase): ...@@ -219,34 +220,46 @@ class CaseMinimalSAMSHub(unittest.TestCase):
def test_hub_default_language_used(self): def test_hub_default_language_used(self):
"""The hub default_language is prefered instead of app default_language""" """The hub default_language is prefered instead of app default_language"""
wrong = 'Hello world!' langDicts = {
expected = 'Hallo Welt!' 'de': {'hello': 'Hallo Welt!'},
self.hub.addApp( 'en': {'hello': 'Hello world!'}
SAMSApp( }
name = 'test' for langCode, langDict in langDicts.items():
, manifest = { with self.subTest(langCode):
'default_language': 'en' hub = SAMSHub(name = 'test', config = {'default_language': 'de'})
, 'views':[ hub.addApp(
{'url': 'hello' SAMSApp(
, 'function': 'views.hello'} name = 'test'
] , manifest = {
} 'default_language': langCode
, langDict = { , 'views':[
'de': {'hello': expected} {'url': 'hello'
, 'en': {'hello': wrong} , 'function': 'views.hello'}
} ]
) }
) , langDict = copy.deepcopy(langDicts)
self.hub.flaskApp.config['DEBUG'] = True )
client = self.hub.flaskApp.test_client(self) )
response = client.get('/test/hello') hub.flaskApp.config['DEBUG'] = True
self.assertIs(response.status_code, 200) with hub.flaskApp.test_client(self) as client:
self.assertEquals(response.data.decode('utf-8'), expected) 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): def test_session_language_used(self):
"""use Session['language'] if possible""" """use Session['language'] if possible"""
expected = 'Bonjour!' langDict = {
self.hub.addApp( '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( SAMSApp(
name = 'test' name = 'test'
, manifest = { , manifest = {
...@@ -256,19 +269,19 @@ class CaseMinimalSAMSHub(unittest.TestCase): ...@@ -256,19 +269,19 @@ class CaseMinimalSAMSHub(unittest.TestCase):
, 'function': 'views.hello'} , 'function': 'views.hello'}
] ]
} }
, langDict = { , langDict = copy.deepcopy(langDict)
'de': {'hello': 'falsch'}
, 'en': {'hello': 'wrong'}
, 'fr': {'hello': expected}
}
) )
) )
self.hub.flaskApp.config['DEBUG'] = True for sessionLang in sessionLangs:
with self.hub.flaskApp.test_client(self) as client: eprint(langDict)
with client.session_transaction() as session_simulation: with self.subTest(sessionLang):
session_simulation['language'] = 'fr' hub.flaskApp.config['DEBUG'] = True
response = client.get('/test/hello') with hub.flaskApp.test_client(self) as client:
self.assertIs(response.status_code, 200) with client.session_transaction() as session_simulation:
self.assertEquals(response.data.decode('utf-8'), expected) 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() 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