diff --git a/sams_classes/sams_hub.py b/sams_classes/sams_hub.py index 920428c9de5c1233592889c9fdd61230804fa6bc..fa727debbd58595bd976561b5cc49e4663463729 100644 --- a/sams_classes/sams_hub.py +++ b/sams_classes/sams_hub.py @@ -33,12 +33,13 @@ class SAMSHub: def addApp(self, app: SAMSApp = None, alias = None): if not isinstance(app, SAMSApp): raise TypeError('Argument app has to be a SAMSApp.') - self._apps[app.name] = app - self._appList.append(app) + appDict = {'app': app, 'urlPrefix': (alias or app.name)} + self._apps[app.name] = appDict + self._appList.append(appDict) if app.name == self._config.get('main_app'): self._flaskApp.register_blueprint(app.blueprint) self._flaskApp.register_blueprint( - app.blueprint, url_prefix = '/' + (alias or app.name)) + app.blueprint, url_prefix = '/' + appDict['urlPrefix']) @property def appKeys(self): @@ -50,7 +51,7 @@ class SAMSHub: def app(self, name): try: - return self._apps[name] + return self._apps[name]['app'] except: raise AppNotExist @@ -76,11 +77,12 @@ class SAMSHub: def menu(self, langCode): menu = [] - for app in self._appList: - if self._config.get('main_app') == app.name: - menu.extend(app.menu(langCode = langCode)) + for appDict in self._appList: + if self._config.get('main_app') == appDict['app'].name: + menu.extend(appDict['app'].menu(langCode = langCode)) else: - menu.extend(app.menu(langCode = langCode, urlPrefix = app.name)) + menu.extend(appDict['app'].menu(langCode = langCode, + urlPrefix = appDict['urlPrefix'])) return menu @staticmethod diff --git a/test/test_sams_hub.py b/test/test_sams_hub.py index 673b5338b0e35413b8d2922cc555f74e83386572..eed5b4d5f06846756b0fad48bb72626afe28c884 100644 --- a/test/test_sams_hub.py +++ b/test/test_sams_hub.py @@ -18,12 +18,12 @@ class CaseSAMSHubWithThreadedAPI(unittest.TestCase): apiApp.config['TESTING'] = True thApi = FlaskInThread(apiApp, host="localhost", port=4711) thApi.start() - time.sleep(0.01) + time.sleep(1) def tearDown(self): response = requests.get('http://localhost:4711/shutdown') print(response.content.decode('utf-8')) - time.sleep(0.01) + time.sleep(1) def test_hub_provides_apps_with_proxies(self): manifest = { @@ -223,14 +223,7 @@ class CaseMinimalSAMSHub(unittest.TestCase): ] 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>' - )) - self.hub.addApp( - SAMSApp( + testSamsApp = SAMSApp( name = name, manifest = { 'default_language': 'de', 'views': [{'url': 'test-menu','function': 'views.menu_test'}], @@ -242,13 +235,25 @@ class CaseMinimalSAMSHub(unittest.TestCase): ] } , 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('/test/test-menu') - self.assertIs(response.status_code, 200) - self.assertEquals(response.data.decode('utf-8'), expected) + for addAppParams in ( + {'app': testSamsApp}, {'app': testSamsApp, 'alias': 'testAlias'}): + hub = SAMSHub(name = 'test', config = {'default_language': 'de'}) + effectiveName = addAppParams.get('alias', name) + expected = ''.join(( + "<ul>\n\n<li><a href='/", effectiveName, '/', urls[0], "'>", + expected_names[0], "</a>\n\n<ul>\n\n<li><a href='/", effectiveName, + '/', urls[1], "'>", expected_names[1], + "</a>\n\n</li>\n\n</ul>\n\n</li>\n\n<li><a href='/", effectiveName, '/', + urls[2], "'>", expected_names[2], '</a>\n\n</li>\n\n</ul>' + )) + hub.addApp(**addAppParams) + hub.flaskApp.config['DEBUG'] = True + with hub.flaskApp.test_client(self) as client: + response = client.get('/' + effectiveName + '/test-menu') + with self.subTest(addAppParams): + self.assertIs(response.status_code, 200) + self.assertEquals(response.data.decode('utf-8'), expected) def test_hub_default_language_used(self): """The hub default_language is prefered instead of app default_language"""