summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-04-23 19:01:38 +0000
committerGerrit Code Review <review@openstack.org>2015-04-23 19:01:38 +0000
commit25acfcb24801613f5994f1e6e215d4b76f0dd527 (patch)
tree1aa7c28b33268efd7dfb394e101f105a4bf747e0
parentbd9a28699b8a3b6d681919d78b826564da941ce7 (diff)
parent5c1604275bfbe621e5e168f8ba1f937d308d6ab8 (diff)
downloadhorizon-25acfcb24801613f5994f1e6e215d4b76f0dd527.tar.gz
Merge "Fix addition of plugin panel to panel group" into stable/kilo
-rw-r--r--horizon/base.py11
-rw-r--r--openstack_dashboard/test/helpers.py3
-rw-r--r--openstack_dashboard/test/test_panels/plugin_panel/views.py4
-rw-r--r--openstack_dashboard/test/test_panels/second_panel/__init__.py0
-rw-r--r--openstack_dashboard/test/test_panels/second_panel/panel.py18
-rw-r--r--openstack_dashboard/test/test_panels/second_panel/templates/second_panel/index.html11
-rw-r--r--openstack_dashboard/test/test_panels/second_panel/urls.py21
-rw-r--r--openstack_dashboard/test/test_panels/second_panel/views.py18
-rw-r--r--openstack_dashboard/test/test_plugins/panel_group_config/_30_admin_add_second_panel_group.py6
-rw-r--r--openstack_dashboard/test/test_plugins/panel_group_config/_40_admin_add_panel_to_second_group.py10
-rw-r--r--openstack_dashboard/test/test_plugins/panel_group_tests.py28
-rw-r--r--openstack_dashboard/test/test_plugins/panel_tests.py10
12 files changed, 128 insertions, 12 deletions
diff --git a/horizon/base.py b/horizon/base.py
index ee0bf2d09..61f944f0f 100644
--- a/horizon/base.py
+++ b/horizon/base.py
@@ -871,14 +871,21 @@ class Site(Registry, HorizonComponent):
"""
panel_customization = self._conf.get("panel_customization", [])
+ # Process all the panel groups first so that they exist before panels
+ # are added to them and Dashboard._autodiscover() doesn't wipe out any
+ # panels previously added when its panel groups are instantiated.
+ panel_configs = []
for config in panel_customization:
if config.get('PANEL'):
- self._process_panel_configuration(config)
+ panel_configs.append(config)
elif config.get('PANEL_GROUP'):
self._process_panel_group_configuration(config)
else:
LOG.warning("Skipping %s because it doesn't have PANEL or "
"PANEL_GROUP defined.", config.__name__)
+ # Now process the panels.
+ for config in panel_configs:
+ self._process_panel_configuration(config)
def _process_panel_configuration(self, config):
"""Add, remove and set default panels on the dashboard."""
@@ -914,8 +921,6 @@ class Site(Registry, HorizonComponent):
panel = getattr(mod, panel_cls)
dashboard_cls.register(panel)
if panel_group:
- dashboard_cls.get_panel_group(panel_group).__class__.\
- panels.append(panel.slug)
dashboard_cls.get_panel_group(panel_group).\
panels.append(panel.slug)
else:
diff --git a/openstack_dashboard/test/helpers.py b/openstack_dashboard/test/helpers.py
index 324810ced..c73888542 100644
--- a/openstack_dashboard/test/helpers.py
+++ b/openstack_dashboard/test/helpers.py
@@ -534,9 +534,6 @@ class PluginTestCase(TestCase):
self.old_horizon_config = conf.HORIZON_CONFIG
conf.HORIZON_CONFIG = conf.LazySettings()
base.Horizon._urls()
- # Trigger discovery, registration, and URLconf generation if it
- # hasn't happened yet.
- self.client.get("/")
# Store our original dashboards
self._discovered_dashboards = base.Horizon._registry.keys()
# Gather up and store our original panels for each dashboard
diff --git a/openstack_dashboard/test/test_panels/plugin_panel/views.py b/openstack_dashboard/test/test_panels/plugin_panel/views.py
index db3f98b88..49c4f7ad2 100644
--- a/openstack_dashboard/test/test_panels/plugin_panel/views.py
+++ b/openstack_dashboard/test/test_panels/plugin_panel/views.py
@@ -10,11 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
-from django.utils.translation import ugettext_lazy as _
-
from horizon import views
class IndexView(views.HorizonTemplateView):
template_name = 'admin/plugin_panel/index.html'
- page_title = _("Plugin-based Panel")
+ page_title = 'Plugin-based Panel'
diff --git a/openstack_dashboard/test/test_panels/second_panel/__init__.py b/openstack_dashboard/test/test_panels/second_panel/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/openstack_dashboard/test/test_panels/second_panel/__init__.py
diff --git a/openstack_dashboard/test/test_panels/second_panel/panel.py b/openstack_dashboard/test/test_panels/second_panel/panel.py
new file mode 100644
index 000000000..52f61b981
--- /dev/null
+++ b/openstack_dashboard/test/test_panels/second_panel/panel.py
@@ -0,0 +1,18 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import horizon
+
+
+class SecondPanel(horizon.Panel):
+ name = "Second Plugin Panel"
+ slug = 'second_panel'
diff --git a/openstack_dashboard/test/test_panels/second_panel/templates/second_panel/index.html b/openstack_dashboard/test/test_panels/second_panel/templates/second_panel/index.html
new file mode 100644
index 000000000..62a1d6b49
--- /dev/null
+++ b/openstack_dashboard/test/test_panels/second_panel/templates/second_panel/index.html
@@ -0,0 +1,11 @@
+{% extends 'base.html' %}
+{% load i18n %}
+{% block title %}Second Plugin-based Panel{% endblock %}
+
+{% block main %}
+<div class="row">
+ <div class="col-sm-12">
+ Second Plugin-based Panel
+ </div>
+</div>
+{% endblock %}
diff --git a/openstack_dashboard/test/test_panels/second_panel/urls.py b/openstack_dashboard/test/test_panels/second_panel/urls.py
new file mode 100644
index 000000000..277a98229
--- /dev/null
+++ b/openstack_dashboard/test/test_panels/second_panel/urls.py
@@ -0,0 +1,21 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from django.conf.urls import patterns
+from django.conf.urls import url
+
+from openstack_dashboard.test.test_panels.second_panel import views
+
+urlpatterns = patterns(
+ '',
+ url(r'^$', views.IndexView.as_view(), name='index'),
+)
diff --git a/openstack_dashboard/test/test_panels/second_panel/views.py b/openstack_dashboard/test/test_panels/second_panel/views.py
new file mode 100644
index 000000000..b656b6cb2
--- /dev/null
+++ b/openstack_dashboard/test/test_panels/second_panel/views.py
@@ -0,0 +1,18 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from horizon import views
+
+
+class IndexView(views.HorizonTemplateView):
+ template_name = 'admin/second_panel/index.html'
+ page_title = 'Second Plugin-based Panel'
diff --git a/openstack_dashboard/test/test_plugins/panel_group_config/_30_admin_add_second_panel_group.py b/openstack_dashboard/test/test_plugins/panel_group_config/_30_admin_add_second_panel_group.py
new file mode 100644
index 000000000..407d19984
--- /dev/null
+++ b/openstack_dashboard/test/test_plugins/panel_group_config/_30_admin_add_second_panel_group.py
@@ -0,0 +1,6 @@
+# The name of the panel group to be added to HORIZON_CONFIG. Required.
+PANEL_GROUP = 'second_panel_group'
+# The display name of the PANEL_GROUP. Required.
+PANEL_GROUP_NAME = 'Second Plugin Panel Group'
+# The name of the dashboard the PANEL_GROUP associated with. Required.
+PANEL_GROUP_DASHBOARD = 'admin'
diff --git a/openstack_dashboard/test/test_plugins/panel_group_config/_40_admin_add_panel_to_second_group.py b/openstack_dashboard/test/test_plugins/panel_group_config/_40_admin_add_panel_to_second_group.py
new file mode 100644
index 000000000..7ce597584
--- /dev/null
+++ b/openstack_dashboard/test/test_plugins/panel_group_config/_40_admin_add_panel_to_second_group.py
@@ -0,0 +1,10 @@
+# The name of the panel to be added to HORIZON_CONFIG. Required.
+PANEL = 'second_panel'
+# The name of the dashboard the PANEL associated with. Required.
+PANEL_DASHBOARD = 'admin'
+# The name of the panel group the PANEL is associated with.
+PANEL_GROUP = 'second_panel_group'
+
+# Python panel class of the PANEL to be added.
+ADD_PANEL = \
+ 'openstack_dashboard.test.test_panels.second_panel.panel.SecondPanel'
diff --git a/openstack_dashboard/test/test_plugins/panel_group_tests.py b/openstack_dashboard/test/test_plugins/panel_group_tests.py
index 4ae184f26..7e85802de 100644
--- a/openstack_dashboard/test/test_plugins/panel_group_tests.py
+++ b/openstack_dashboard/test/test_plugins/panel_group_tests.py
@@ -20,11 +20,14 @@ import horizon
from openstack_dashboard.test import helpers as test
from openstack_dashboard.test.test_panels.plugin_panel \
import panel as plugin_panel
+from openstack_dashboard.test.test_panels.second_panel \
+ import panel as second_panel
import openstack_dashboard.test.test_plugins.panel_group_config
from openstack_dashboard.utils import settings as util_settings
PANEL_GROUP_SLUG = 'plugin_panel_group'
+SECOND_PANEL_GROUP_SLUG = 'second_panel_group'
HORIZON_CONFIG = copy.deepcopy(settings.HORIZON_CONFIG)
INSTALLED_APPS = list(settings.INSTALLED_APPS)
@@ -45,12 +48,31 @@ class PanelGroupPluginTests(test.PluginTestCase):
dashboard = horizon.get_dashboard("admin")
self.assertIsNotNone(dashboard.get_panel_group(PANEL_GROUP_SLUG))
+ def test_add_second_panel_group(self):
+ # Check that the second panel group was added to the dashboard.
+ dashboard = horizon.get_dashboard("admin")
+ self.assertIsNotNone(
+ dashboard.get_panel_group(SECOND_PANEL_GROUP_SLUG))
+
def test_add_panel(self):
+ # Check that the panel is in its configured dashboard and panel group.
dashboard = horizon.get_dashboard("admin")
+ panel_group = dashboard.get_panel_group(PANEL_GROUP_SLUG)
self.assertIn(plugin_panel.PluginPanel,
[p.__class__ for p in dashboard.get_panels()])
+ self.assertIn(plugin_panel.PluginPanel,
+ [p.__class__ for p in panel_group])
- def test_unregistered_panel_group(self):
- dashboard = horizon.get_dashboard("admin")
- self.assertIsNone(dashboard.get_panel_group("nonexistent_panel"))
+ def test_add_second_panel(self):
+ # Check that the second panel is in its configured dashboard and panel
+ # group.
+ dashboard = horizon.get_dashboard("admin")
+ second_panel_group = dashboard.get_panel_group(SECOND_PANEL_GROUP_SLUG)
+ self.assertIn(second_panel.SecondPanel,
+ [p.__class__ for p in dashboard.get_panels()])
+ self.assertIn(second_panel.SecondPanel,
+ [p.__class__ for p in second_panel_group])
+ def test_unregistered_panel_group(self):
+ dashboard = horizon.get_dashboard("admin")
+ self.assertIsNone(dashboard.get_panel_group("nonexistent_panel"))
diff --git a/openstack_dashboard/test/test_plugins/panel_tests.py b/openstack_dashboard/test/test_plugins/panel_tests.py
index 059a3f509..83afb2612 100644
--- a/openstack_dashboard/test/test_plugins/panel_tests.py
+++ b/openstack_dashboard/test/test_plugins/panel_tests.py
@@ -43,13 +43,23 @@ util_settings.update_dashboards([
class PanelPluginTests(test.PluginTestCase):
def test_add_panel(self):
dashboard = horizon.get_dashboard("admin")
+ panel_group = dashboard.get_panel_group('admin')
+ # Check that the panel is in its configured dashboard.
self.assertIn(plugin_panel.PluginPanel,
[p.__class__ for p in dashboard.get_panels()])
+ # Check that the panel is in its configured panel group.
+ self.assertIn(plugin_panel.PluginPanel,
+ [p.__class__ for p in panel_group])
def test_remove_panel(self):
dashboard = horizon.get_dashboard("admin")
+ panel_group = dashboard.get_panel_group('admin')
+ # Check that the panel is no longer in the configured dashboard.
self.assertNotIn(info_panel.Info,
[p.__class__ for p in dashboard.get_panels()])
+ # Check that the panel is no longer in the configured panel group.
+ self.assertNotIn(info_panel.Info,
+ [p.__class__ for p in panel_group])
def test_default_panel(self):
dashboard = horizon.get_dashboard("admin")