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

restructured TestCases in in test_sams_hub.py 30 lines saved

parent d8c09d07
No related branches found
No related tags found
No related merge requests found
...@@ -3,130 +3,213 @@ from sams_classes import SAMSHub, SAMSApp ...@@ -3,130 +3,213 @@ from sams_classes import SAMSHub, SAMSApp
from sams_classes.exceptions import AppNotExist from sams_classes.exceptions import AppNotExist
from flask import Flask, Blueprint from flask import Flask, Blueprint
import sys import sys
from pexpect.async import expect_async
def eprint(*args, **kwargs): def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs) print(*args, file=sys.stderr, **kwargs)
class TestSAMSHub(unittest.TestCase): class CaseSAMSHubWithMainApp(unittest.TestCase):
def setUp(self):
self.hub = SAMSHub(
name = 'test', config = {'default_language': 'de', 'main_app' : 'test'})
def test_main_app(self):
"""It is possible to declare a main app where the urls have no prefix"""
appname = 'test.app'
expected_names = [
'Hauptanwendung Punkt 1', 'Hauptanwendung Punkt 2', 'Zusatzanwendung 1'
]
urls = ['', '2', 'app/1']
name_vars = ['main_1', 'main_2', 'app_1']
expected = ''.join((
"<ul>\n\n<li><a href='/", urls[0], "'>", expected_names[0],
"</a>\n\n<ul>\n\n<li><a href='/", urls[1], "'>", expected_names[1],
"</a>\n\n</li>\n\n</ul>\n\n</li>\n\n<li><a href='/", appname, '/', urls[2], "'>",
expected_names[2], '</a>\n\n</li>\n\n</ul>'
))
self.hub.addApp(
SAMSApp(
name = 'test',
manifest = {
'default_language': 'de',
'views':[
{'url': urls[0], 'function': 'views.menu_test'},
{'url': urls[1], 'function': 'views.do_nothing'}
],
'menu':[
{
'url': urls[0], 'name_string': name_vars[0],
'menu': [{'url': urls[1], 'name_string': name_vars[1]}]
}
]
}
, langDict = {'de': dict(zip(name_vars, expected_names))}
)
)
self.hub.addApp(
SAMSApp(
name = appname,
manifest = {
'default_language': 'de',
'views': [{'url': urls[2], 'function': 'views.do_nothing'}],
'menu': [{'url': urls[2], 'name_string': name_vars[2]}]
}, langDict = {'de': dict(zip(name_vars, expected_names))}
)
)
self.hub.flaskApp.config['DEBUG'] = True
with self.hub.flaskApp.test_client(self) as client:
response = client.get('/')
self.assertIs(response.status_code, 200)
self.assertEquals(response.data.decode('utf-8'), expected)
response = client.get('/' + urls[1])
self.assertIs(response.status_code, 200)
response = client.get('/' + appname + '/' + urls[2])
self.assertIs(response.status_code, 200)
class CaseSAMSHubInitExceptions(unittest.TestCase):
def test_missing_init_name(self): def test_missing_init_name(self):
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
hub = SAMSHub(config= {'default_language': 'de'}) SAMSHub(config= {'default_language': 'de'})
def test_missing_init_config(self): def test_missing_init_config(self):
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
hub = SAMSHub(name = 'test') SAMSHub(name = 'test')
def test_missing_init_default_language(self): def test_missing_init_default_language(self):
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
hub = SAMSHub(name ='test', config = {}) SAMSHub(name ='test', config = {})
class CaseMinimalSAMSHub(unittest.TestCase):
def setUp(self):
self.hub = SAMSHub(name = 'test', config = {'default_language': 'de'})
def test_apps_addable(self): def test_apps_addable(self):
hub = SAMSHub(name = 'test', config = {'default_language': 'de'}) self.assertIs(len(self.hub.appKeys), 0, 'Precondition, hub has 0 appKeys')
self.assertIs(len(hub.appKeys), 0, 'Precondition, hub has 0 appKeys')
with self.assertRaises(AppNotExist): with self.assertRaises(AppNotExist):
hub.app('test_app') self.hub.app('test_app')
hub.addApp( self.hub.addApp(
SAMSApp( SAMSApp(
name = 'test', manifest = {'default_language': 'en'} name = 'test', manifest = {'default_language': 'en'}
, langDict = {'en':{}} , langDict = {'en':{}}
) )
) )
self.assertIs(len(hub.appKeys), 1, 'Postcondition, hub has 1 appKey') self.assertIs(len(self.hub.appKeys), 1, 'Postcondition, hub has 1 appKey')
self.assertIsInstance( self.assertIsInstance(
hub.app('test') self.hub.app('test')
, SAMSApp, 'Postcondition, "test_app" in hub is a SAMSApp' , SAMSApp, 'Postcondition, "test_app" in hub is a SAMSApp'
) )
def test_error_apps_add_wrong_type(self): def test_error_apps_add_wrong_type(self):
hub = SAMSHub(name = 'test', config = {'default_language': 'de'})
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
hub.addApp('wrong') self.hub.addApp('wrong')
def test_has_flask_app(self): def test_has_flask_app(self):
hub = SAMSHub(name = 'test', config = {'default_language': 'de'}) self.assertIsInstance(self.hub.flaskApp, Flask)
self.assertIsInstance(hub.flaskApp, Flask)
def test_flask_app_readonly(self): def test_flask_app_readonly(self):
hub = SAMSHub(name = 'test', config = {'default_language': 'de'})
with self.assertRaises(AttributeError): with self.assertRaises(AttributeError):
hub.flaskApp = Flask('test') self.hub.flaskApp = Flask('test')
def test_add_app_registers_blueprint(self): def test_add_app_registers_blueprint(self):
"""The blueprint of the addedApp is registered in flaskApp""" """The blueprint of the addedApp is registered in flaskApp"""
hub = SAMSHub(name = 'test', config = {'default_language': 'de'})
self.assertEqual( self.assertEqual(
hub.flaskApp.blueprints.get('test') self.hub.flaskApp.blueprints.get('test')
, None, 'Precondition, hub.flaskApp has not Blueprint "test"' , None, 'Precondition, hub.flaskApp has not Blueprint "test"'
) )
hub.addApp( self.hub.addApp(
SAMSApp( SAMSApp(
name = 'test', manifest = {'default_language': 'en'} name = 'test', manifest = {'default_language': 'en'}
, langDict = {'en':{}} , langDict = {'en':{}}
) )
) )
self.assertIsInstance( self.assertIsInstance(
hub.flaskApp.blueprints.get('test') self.hub.flaskApp.blueprints.get('test')
, Blueprint, 'Postcondition, hub.flaskApp has a Blueprint "test"') , Blueprint, 'Postcondition, hub.flaskApp has a Blueprint "test"')
def test_context_processor_app_lang(self): def test_context_processor_app_lang(self):
"""The hub sets an app context processor that provides a app_lang dict """ """The hub sets an app context processor that provides a app_lang dict """
hub = SAMSHub(name = 'test', config = {'default_language': 'de'})
expected = 'Hallo Welt!' expected = 'Hallo Welt!'
hub.addApp( self.hub.addApp(
SAMSApp( SAMSApp(
name = 'test', manifest = {
'default_language': 'de', 'views':[{
'url': 'hello', 'function': 'views.hello'}]
}, langDict = {'de': {'hello': expected}}
)
)
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)
def test_menu_list_provided(self):
"""The Hub provides a menu list via context_processor"""
name = 'test' name = 'test'
, manifest = { expected_names = [
'default_language': 'de' 'Ebene 1: Eintrag 1', 'Eintrag 1 Ebene 2: Eintrag 1', 'Ebene 1: Eintrag 2'
, 'views':[ ]
{'url': 'hello' urls = ['1/1', '2/1', '1/2']
, 'function': 'views.hello'} name_vars = ['1_1', '2_1', '1_2']
expected = ''.join((
"<ul>\n\n<li><a href='/", name, '/', urls[0], "'>", expected_names[0],
"</a>\n\n<ul>\n\n<li><a href='/", name, '/', urls[1], "'>", expected_names[1],
"</a>\n\n</li>\n\n</ul>\n\n</li>\n\n<li><a href='/", name, '/', urls[2], "'>",
expected_names[2], '</a>\n\n</li>\n\n</ul>'
))
self.hub.addApp(
SAMSApp(
name = name, manifest = {
'default_language': 'de',
'views': [{'url': 'test-menu','function': 'views.menu_test'}],
'menu':[
{'url': urls[0],'name_string': name_vars[0], 'menu':[
{'url': urls[1],'name_string': name_vars[1]}
]},
{ 'url': urls[2], 'name_string': name_vars[2] }
] ]
} }
, langDict = { , langDict = {'de': dict(zip(name_vars, expected_names))}
'de': {'hello': expected}
}
) )
) )
hub.flaskApp.config['DEBUG'] = True self.hub.flaskApp.config['DEBUG'] = True
client = hub.flaskApp.test_client(self) with self.hub.flaskApp.test_client(self) as client:
response = client.get('/test/hello') response = client.get('/test/test-menu')
self.assertIs(response.status_code, 200) self.assertIs(response.status_code, 200)
self.assertEquals(response.data.decode('utf-8'), expected) self.assertEquals(response.data.decode('utf-8'), expected)
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 = 'Hallo Welt!' wrong = 'Hello world!'
expected = 'Hello world!' expected = 'Hallo Welt!'
hub = SAMSHub(name = 'test', config = {'default_language': 'en'}) self.hub.addApp(
hub.addApp(
SAMSApp( SAMSApp(
name = 'test' name = 'test'
, manifest = { , manifest = {
'default_language': 'de' 'default_language': 'en'
, 'views':[ , 'views':[
{'url': 'hello' {'url': 'hello'
, 'function': 'views.hello'} , 'function': 'views.hello'}
] ]
} }
, langDict = { , langDict = {
'de': {'hello': wrong} 'de': {'hello': expected}
, 'en': {'hello': expected} , 'en': {'hello': wrong}
} }
) )
) )
hub.flaskApp.config['DEBUG'] = True self.hub.flaskApp.config['DEBUG'] = True
client = hub.flaskApp.test_client(self) client = self.hub.flaskApp.test_client(self)
response = client.get('/test/hello') response = client.get('/test/hello')
self.assertIs(response.status_code, 200) self.assertIs(response.status_code, 200)
self.assertEquals(response.data.decode('utf-8'), expected) self.assertEquals(response.data.decode('utf-8'), expected)
def test_session_language_used(self): def test_session_language_used(self):
"""use Session['language'] if possible""" """use Session['language'] if possible"""
expected = 'Hallo Welt!' expected = 'Bonjour!'
hub = SAMSHub(name = 'test', config = {'default_language': 'fr'}) self.hub.addApp(
hub.addApp(
SAMSApp( SAMSApp(
name = 'test' name = 'test'
, manifest = { , manifest = {
...@@ -137,126 +220,16 @@ class TestSAMSHub(unittest.TestCase): ...@@ -137,126 +220,16 @@ class TestSAMSHub(unittest.TestCase):
] ]
} }
, langDict = { , langDict = {
'de': {'hello': expected} 'de': {'hello': 'falsch'}
, 'en': {'hello': 'wrong'} , 'en': {'hello': 'wrong'}
, 'fr': {'hello': 'mal'} , 'fr': {'hello': expected}
} }
) )
) )
hub.flaskApp.config['DEBUG'] = True self.hub.flaskApp.config['DEBUG'] = True
with hub.flaskApp.test_client(self) as client: with self.hub.flaskApp.test_client(self) as client:
with client.session_transaction() as session_simulation: with client.session_transaction() as session_simulation:
session_simulation['language'] = 'de' session_simulation['language'] = 'fr'
response = client.get('/test/hello') response = client.get('/test/hello')
self.assertIs(response.status_code, 200) self.assertIs(response.status_code, 200)
self.assertEquals(response.data.decode('utf-8'), expected) self.assertEquals(response.data.decode('utf-8'), expected)
\ No newline at end of file
def test_menu_list_provided(self):
"""The Hub provides a menu list via context_processor"""
name = 'test'
hub = SAMSHub(name = name, config = {'default_language': 'de'})
expected_names = [
'Ebene 1: Eintrag 1', 'Eintrag 1 Ebene 2: Eintrag 1', 'Ebene 1: Eintrag 2'
]
urls = ['1/1', '2/1', '1/2']
name_vars = ['1_1', '2_1', '1_2']
expected = ''.join((
"<ul>\n\n<li><a href='/", name, '/', urls[0], "'>", expected_names[0],
"</a>\n\n<ul>\n\n<li><a href='/", name, '/', urls[1], "'>", expected_names[1],
"</a>\n\n</li>\n\n</ul>\n\n</li>\n\n<li><a href='/", name, '/', urls[2], "'>",
expected_names[2], '</a>\n\n</li>\n\n</ul>'
))
hub.addApp(
SAMSApp(
name = name,
manifest = {
'default_language': 'de',
'views':[
{
'url': 'test-menu',
'function': 'views.menu_test'
}
],
'menu':[
{
'url': urls[0],
'name_string': name_vars[0],
'menu':[
{
'url': urls[1],
'name_string': name_vars[1]
}
]
},
{
'url': urls[2],
'name_string': name_vars[2]
}
]
}
, langDict = {
'de': dict(zip(name_vars, expected_names))
}
)
)
hub.flaskApp.config['DEBUG'] = True
with hub.flaskApp.test_client(self) as client:
response = client.get('/test/test-menu')
self.assertIs(response.status_code, 200)
self.assertEquals(response.data.decode('utf-8'), expected)
def test_main_app(self):
"""It is possible to declare a main app where the urls have no prefix"""
name = 'test'
appname = 'test.app'
hub = SAMSHub(
name = name, config = {'default_language': 'de', 'main_app' : 'test'})
expected_names = [
'Hauptanwendung Punkt 1', 'Hauptanwendung Punkt 2', 'Zusatzanwendung 1'
]
urls = ['', '2', 'app/1']
name_vars = ['main_1', 'main_2', 'app_1']
expected = ''.join((
"<ul>\n\n<li><a href='/", urls[0], "'>", expected_names[0],
"</a>\n\n<ul>\n\n<li><a href='/", urls[1], "'>", expected_names[1],
"</a>\n\n</li>\n\n</ul>\n\n</li>\n\n<li><a href='/", appname, '/', urls[2], "'>",
expected_names[2], '</a>\n\n</li>\n\n</ul>'
))
hub.addApp(
SAMSApp(
name = name,
manifest = {
'default_language': 'de',
'views':[
{'url': urls[0], 'function': 'views.menu_test'},
{'url': urls[1], 'function': 'views.do_nothing'}
],
'menu':[
{
'url': urls[0], 'name_string': name_vars[0],
'menu': [{'url': urls[1], 'name_string': name_vars[1]}]
}
]
}
, langDict = {'de': dict(zip(name_vars, expected_names))}
)
)
hub.addApp(
SAMSApp(
name = appname,
manifest = {
'default_language': 'de',
'views': [{'url': urls[2], 'function': 'views.do_nothing'}],
'menu': [{'url': urls[2], 'name_string': name_vars[2]}]
}, langDict = {'de': dict(zip(name_vars, expected_names))}
)
)
hub.flaskApp.config['DEBUG'] = True
with hub.flaskApp.test_client(self) as client:
response = client.get('/')
self.assertIs(response.status_code, 200)
self.assertEquals(response.data.decode('utf-8'), expected)
response = client.get('/' + urls[1])
self.assertIs(response.status_code, 200)
response = client.get('/' + appname + '/' + urls[2])
self.assertIs(response.status_code, 200)
\ 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