[#6391] Provide default sitemap on Application class
Signed-off-by: Tim Van Steenburgh <tvansteenburgh@gmail.com>
diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index 7ce847d..4599009 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -176,9 +176,6 @@
Application. Default is True.
:cvar list permissions: Named permissions used by instances of this
Application. Default is [].
- :cvar list sitemap: :class:`SitemapEntries <allura.app.SitemapEntry>`
- used to create the Application's navigation in the main project nav.
- Default is [].
:cvar bool installable: Default is True, Application can be installed in
projects.
:cvar bool hidden: Default is False, Application is not hidden from the
@@ -211,7 +208,6 @@
root = None # root controller
api_root = None
permissions = []
- sitemap = []
installable = True
searchable = False
DiscussionClass = model.Discussion
@@ -244,6 +240,17 @@
self.admin = DefaultAdminController(self)
@LazyProperty
+ def sitemap(self):
+ """Return a list of :class:`SitemapEntries <allura.app.SitemapEntry>`
+ describing the page hierarchy provided by this Application.
+
+ If the list is empty, the Application will not be displayed in the
+ main project nav bar.
+
+ """
+ return [SitemapEntry(self.config.options.mount_label, '.')]
+
+ @LazyProperty
def url(self):
"""Return the URL for this Application.
diff --git a/Allura/allura/tests/unit/factories.py b/Allura/allura/tests/unit/factories.py
index b4a5f1c..50f24dd 100644
--- a/Allura/allura/tests/unit/factories.py
+++ b/Allura/allura/tests/unit/factories.py
@@ -53,7 +53,10 @@
return AppConfig(
project_id=project._id,
tool_name='myapp',
- options={'mount_point': 'my_mounted_app'},
+ options={
+ 'mount_point': 'my_mounted_app',
+ 'mount_label': 'My Mounted App',
+ },
acl=[])
diff --git a/Allura/allura/tests/unit/test_app.py b/Allura/allura/tests/unit/test_app.py
index 8f0c0db..01f4be1 100644
--- a/Allura/allura/tests/unit/test_app.py
+++ b/Allura/allura/tests/unit/test_app.py
@@ -80,6 +80,10 @@
def test_that_it_denies_access_for_everything(self):
assert not self.app.has_access(model.User.anonymous(), 'any.topic')
+ def test_default_sitemap(self):
+ assert self.app.sitemap[0].label == 'My Mounted App'
+ assert self.app.sitemap[0].url == '.'
+
def install_app():
project = create_project('myproject')