From 7378be6d21d48d7b6d5b9b3bd9f96edc5d62728f Mon Sep 17 00:00:00 2001 From: Kirill Zaitsev Date: Mon, 29 Aug 2016 02:16:10 +0300 Subject: [PATCH] Split muranodashboard config into multiple files This commit splits muranodashboard's config file into multiple small file, each adding a dashboard or a panel. It also adds machinery to allow sharing app-catalog dashboard config file between muranodashboard and app-catalog-ui. Renames dashboard and panels in accordance to https://etherpad.openstack.org/p/apps-dashboard-structure Targets bp: catalog-dashboard-reorg Depends-On: I6d1d8c99aecf10567608d0c96de69a5309e706e3 Change-Id: I7aee5d26185cc0a7bb54f2b39b85d580daa400ae --- muranodashboard/api/rest/packages.py | 6 +- muranodashboard/catalog/panel.py | 7 +- muranodashboard/categories/panel.py | 5 - muranodashboard/dashboard.py | 26 +---- muranodashboard/environments/panel.py | 5 - muranodashboard/images/panel.py | 5 - .../local/enabled/_50_dashboard_catalog.py | 5 + .../{_50_murano.py => _51_muranodashboard.py} | 8 +- .../local/enabled/_60_panel_group_browse.py | 8 ++ .../local/enabled/_63_panel_murano_catalog.py | 9 ++ .../local/enabled/_70_panel_group_manage.py | 8 ++ .../enabled/_71_panel_murano_packages.py | 9 ++ .../local/enabled/_72_panel_murano_images.py | 9 ++ .../enabled/_73_panel_murano_categories.py | 9 ++ .../enabled/_80_panel_group_applications.py | 8 ++ .../_81_panel_applications_environments.py | 9 ++ .../local/local_settings.d/_50_murano.py | 4 +- muranodashboard/packages/panel.py | 5 - muranodashboard/tests/functional/base.py | 5 +- muranodashboard/tests/functional/consts.py | 7 +- .../tests/functional/sanity_check.py | 108 ++++++++++++------ ...shboard-rename-split-650ba2f7d4f846c2.yaml | 16 +++ 22 files changed, 184 insertions(+), 97 deletions(-) create mode 100644 muranodashboard/local/enabled/_50_dashboard_catalog.py rename muranodashboard/local/enabled/{_50_murano.py => _51_muranodashboard.py} (84%) create mode 100644 muranodashboard/local/enabled/_60_panel_group_browse.py create mode 100644 muranodashboard/local/enabled/_63_panel_murano_catalog.py create mode 100644 muranodashboard/local/enabled/_70_panel_group_manage.py create mode 100644 muranodashboard/local/enabled/_71_panel_murano_packages.py create mode 100644 muranodashboard/local/enabled/_72_panel_murano_images.py create mode 100644 muranodashboard/local/enabled/_73_panel_murano_categories.py create mode 100644 muranodashboard/local/enabled/_80_panel_group_applications.py create mode 100644 muranodashboard/local/enabled/_81_panel_applications_environments.py create mode 100644 releasenotes/notes/dashboard-rename-split-650ba2f7d4f846c2.yaml diff --git a/muranodashboard/api/rest/packages.py b/muranodashboard/api/rest/packages.py index ade315ed4..a3ab18921 100644 --- a/muranodashboard/api/rest/packages.py +++ b/muranodashboard/api/rest/packages.py @@ -9,8 +9,7 @@ # 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. -"""API for the murano packages service. -""" +"""API for the murano packages service.""" from django.views import generic from openstack_dashboard.api.rest import utils as rest_utils @@ -24,8 +23,7 @@ CLIENT_KEYWORDS = {'marker', 'sort_dir', 'paginate'} @urls.register class Packages(generic.View): - """API for Murano packages. - """ + """API for Murano packages.""" url_regex = r'app-catalog/packages/$' @rest_utils.ajax() diff --git a/muranodashboard/catalog/panel.py b/muranodashboard/catalog/panel.py index b4705c9f0..6e4e2fdf4 100644 --- a/muranodashboard/catalog/panel.py +++ b/muranodashboard/catalog/panel.py @@ -15,12 +15,7 @@ from django.utils.translation import ugettext_lazy as _ import horizon -from muranodashboard import dashboard - class AppCatalog(horizon.Panel): - name = _('Browse') + name = _('Browse Local') slug = 'catalog' - - -dashboard.Murano.register(AppCatalog) diff --git a/muranodashboard/categories/panel.py b/muranodashboard/categories/panel.py index cedc740ca..108d5cf95 100644 --- a/muranodashboard/categories/panel.py +++ b/muranodashboard/categories/panel.py @@ -15,13 +15,8 @@ from django.utils.translation import ugettext_lazy as _ import horizon -from muranodashboard import dashboard - class Categories(horizon.Panel): name = _("Categories") slug = 'categories' policy_rules = (("murano", "get_category"),) - - -dashboard.Murano.register(Categories) diff --git a/muranodashboard/dashboard.py b/muranodashboard/dashboard.py index 08f1a5dc2..ec56be6f9 100644 --- a/muranodashboard/dashboard.py +++ b/muranodashboard/dashboard.py @@ -18,29 +18,15 @@ import horizon # Load the api rest services into Horizon import muranodashboard.api.rest # noqa -from muranodashboard import exceptions -# prevent pyflakes from fail -assert exceptions -class DeployPanels(horizon.PanelGroup): - slug = "deployment_group" - name = _("Catalog") - panels = ("environments", "catalog") - - -class ManagePanels(horizon.PanelGroup): - slug = "manage_metadata" - name = _("Manage") - panels = ("images", "packages", "categories") - - -class Murano(horizon.Dashboard): - name = getattr(settings, 'MURANO_DASHBOARD_NAME', _("Applications")) +class AppCatalog(horizon.Dashboard): + name = getattr(settings, 'MURANO_DASHBOARD_NAME', _("App Catalog")) slug = "app-catalog" - panels = (DeployPanels, ManagePanels) default_panel = "environments" supports_tenants = True - -horizon.register(Murano) +try: + horizon.base.Horizon.registered('app-catalog') +except horizon.base.NotRegistered: + horizon.register(AppCatalog) diff --git a/muranodashboard/environments/panel.py b/muranodashboard/environments/panel.py index 19e720797..675769b83 100644 --- a/muranodashboard/environments/panel.py +++ b/muranodashboard/environments/panel.py @@ -15,13 +15,8 @@ from django.utils.translation import ugettext_lazy as _ import horizon -from muranodashboard import dashboard - class Environments(horizon.Panel): name = _("Environments") slug = 'environments' policy_rules = (("murano", "list_environments"),) - - -dashboard.Murano.register(Environments) diff --git a/muranodashboard/images/panel.py b/muranodashboard/images/panel.py index 95760d64b..ea4eacced 100644 --- a/muranodashboard/images/panel.py +++ b/muranodashboard/images/panel.py @@ -15,12 +15,7 @@ from django.utils.translation import ugettext_lazy as _ import horizon -from muranodashboard import dashboard - class Images(horizon.Panel): name = _("Images") slug = 'images' - - -dashboard.Murano.register(Images) diff --git a/muranodashboard/local/enabled/_50_dashboard_catalog.py b/muranodashboard/local/enabled/_50_dashboard_catalog.py new file mode 100644 index 000000000..e2520e0c1 --- /dev/null +++ b/muranodashboard/local/enabled/_50_dashboard_catalog.py @@ -0,0 +1,5 @@ +# The name of the dashboard to be added to HORIZON['dashboards']. Required. +DASHBOARD = 'app-catalog' + +# If set to True, this dashboard will not be added to the settings. +DISABLED = False diff --git a/muranodashboard/local/enabled/_50_murano.py b/muranodashboard/local/enabled/_51_muranodashboard.py similarity index 84% rename from muranodashboard/local/enabled/_50_murano.py rename to muranodashboard/local/enabled/_51_muranodashboard.py index fdbebff47..d94f1b655 100644 --- a/muranodashboard/local/enabled/_50_murano.py +++ b/muranodashboard/local/enabled/_51_muranodashboard.py @@ -12,12 +12,6 @@ from muranodashboard import exceptions -# The name of the dashboard to be added to HORIZON['dashboards']. Required. -DASHBOARD = 'app-catalog' - -# If set to True, this dashboard will not be added to the settings. -DISABLED = False - ADD_INSTALLED_APPS = [ 'muranodashboard', ] @@ -39,3 +33,5 @@ ADD_JS_FILES = [ 'app/murano/murano.module.js' ] + +FEATURE = True diff --git a/muranodashboard/local/enabled/_60_panel_group_browse.py b/muranodashboard/local/enabled/_60_panel_group_browse.py new file mode 100644 index 000000000..13428d8d3 --- /dev/null +++ b/muranodashboard/local/enabled/_60_panel_group_browse.py @@ -0,0 +1,8 @@ +from django.utils.translation import ugettext_lazy as _ + +# The name of the panel group to be added to HORIZON_CONFIG. Required. +PANEL_GROUP = 'app-catalog_browse_group' +# The display name of the PANEL_GROUP. Required. +PANEL_GROUP_NAME = _('Browse') +# The name of the dashboard the PANEL_GROUP associated with. Required. +PANEL_GROUP_DASHBOARD = 'app-catalog' diff --git a/muranodashboard/local/enabled/_63_panel_murano_catalog.py b/muranodashboard/local/enabled/_63_panel_murano_catalog.py new file mode 100644 index 000000000..ce23382c1 --- /dev/null +++ b/muranodashboard/local/enabled/_63_panel_murano_catalog.py @@ -0,0 +1,9 @@ +# The name of the panel to be added to HORIZON_CONFIG. Required. +PANEL = 'catalog' +# The name of the dashboard the PANEL associated with. Required. +PANEL_DASHBOARD = 'app-catalog' +# The name of the panel group the PANEL is associated with. +PANEL_GROUP = 'app-catalog_browse_group' + +# Python panel class of the PANEL to be added. +ADD_PANEL = 'muranodashboard.catalog.panel.AppCatalog' diff --git a/muranodashboard/local/enabled/_70_panel_group_manage.py b/muranodashboard/local/enabled/_70_panel_group_manage.py new file mode 100644 index 000000000..87242dadf --- /dev/null +++ b/muranodashboard/local/enabled/_70_panel_group_manage.py @@ -0,0 +1,8 @@ +from django.utils.translation import ugettext_lazy as _ + +# The name of the panel group to be added to HORIZON_CONFIG. Required. +PANEL_GROUP = 'app-catalog_manage_group' +# The display name of the PANEL_GROUP. Required. +PANEL_GROUP_NAME = _('Manage') +# The name of the dashboard the PANEL_GROUP associated with. Required. +PANEL_GROUP_DASHBOARD = 'app-catalog' diff --git a/muranodashboard/local/enabled/_71_panel_murano_packages.py b/muranodashboard/local/enabled/_71_panel_murano_packages.py new file mode 100644 index 000000000..2b2cb3927 --- /dev/null +++ b/muranodashboard/local/enabled/_71_panel_murano_packages.py @@ -0,0 +1,9 @@ +# The name of the panel to be added to HORIZON_CONFIG. Required. +PANEL = 'packages' +# The name of the dashboard the PANEL associated with. Required. +PANEL_DASHBOARD = 'app-catalog' +# The name of the panel group the PANEL is associated with. +PANEL_GROUP = 'app-catalog_manage_group' + +# Python panel class of the PANEL to be added. +ADD_PANEL = 'muranodashboard.packages.panel.PackageDefinitions' diff --git a/muranodashboard/local/enabled/_72_panel_murano_images.py b/muranodashboard/local/enabled/_72_panel_murano_images.py new file mode 100644 index 000000000..ae969a5bb --- /dev/null +++ b/muranodashboard/local/enabled/_72_panel_murano_images.py @@ -0,0 +1,9 @@ +# The name of the panel to be added to HORIZON_CONFIG. Required. +PANEL = 'images' +# The name of the dashboard the PANEL associated with. Required. +PANEL_DASHBOARD = 'app-catalog' +# The name of the panel group the PANEL is associated with. +PANEL_GROUP = 'app-catalog_manage_group' + +# Python panel class of the PANEL to be added. +ADD_PANEL = 'muranodashboard.images.panel.Images' diff --git a/muranodashboard/local/enabled/_73_panel_murano_categories.py b/muranodashboard/local/enabled/_73_panel_murano_categories.py new file mode 100644 index 000000000..faa72b8d2 --- /dev/null +++ b/muranodashboard/local/enabled/_73_panel_murano_categories.py @@ -0,0 +1,9 @@ +# The name of the panel to be added to HORIZON_CONFIG. Required. +PANEL = 'categories' +# The name of the dashboard the PANEL associated with. Required. +PANEL_DASHBOARD = 'app-catalog' +# The name of the panel group the PANEL is associated with. +PANEL_GROUP = 'app-catalog_manage_group' + +# Python panel class of the PANEL to be added. +ADD_PANEL = 'muranodashboard.categories.panel.Categories' diff --git a/muranodashboard/local/enabled/_80_panel_group_applications.py b/muranodashboard/local/enabled/_80_panel_group_applications.py new file mode 100644 index 000000000..750f37bb5 --- /dev/null +++ b/muranodashboard/local/enabled/_80_panel_group_applications.py @@ -0,0 +1,8 @@ +from django.utils.translation import ugettext_lazy as _ + +# The name of the panel group to be added to HORIZON_CONFIG. Required. +PANEL_GROUP = 'app-catalog_applications_group' +# The display name of the PANEL_GROUP. Required. +PANEL_GROUP_NAME = _('Applications') +# The name of the dashboard the PANEL_GROUP associated with. Required. +PANEL_GROUP_DASHBOARD = 'app-catalog' diff --git a/muranodashboard/local/enabled/_81_panel_applications_environments.py b/muranodashboard/local/enabled/_81_panel_applications_environments.py new file mode 100644 index 000000000..7f477a518 --- /dev/null +++ b/muranodashboard/local/enabled/_81_panel_applications_environments.py @@ -0,0 +1,9 @@ +# The name of the panel to be added to HORIZON_CONFIG. Required. +PANEL = 'environments' +# The name of the dashboard the PANEL associated with. Required. +PANEL_DASHBOARD = 'app-catalog' +# The name of the panel group the PANEL is associated with. +PANEL_GROUP = 'app-catalog_applications_group' + +# Python panel class of the PANEL to be added. +ADD_PANEL = 'muranodashboard.environments.panel.Environments' diff --git a/muranodashboard/local/local_settings.d/_50_murano.py b/muranodashboard/local/local_settings.d/_50_murano.py index b51191f7c..229e4dac0 100644 --- a/muranodashboard/local/local_settings.d/_50_murano.py +++ b/muranodashboard/local/local_settings.d/_50_murano.py @@ -11,9 +11,9 @@ MURANO_REPO_URL = 'http://apps.openstack.org/api/v1/murano_repo/liberty/' DISPLAY_MURANO_REPO_URL = 'http://apps.openstack.org/#tab=murano-apps' -# Overrides the default dashboard name (Murano) that is displayed +# Overrides the default dashboard name (App Catalog) that is displayed # in the main accordion navigation -# MURANO_DASHBOARD_NAME = "Murano" +# MURANO_DASHBOARD_NAME = "App Catalog" # Specify a maximum number of limit packages. # PACKAGES_LIMIT = 100 diff --git a/muranodashboard/packages/panel.py b/muranodashboard/packages/panel.py index 757a76af0..c37ea538d 100644 --- a/muranodashboard/packages/panel.py +++ b/muranodashboard/packages/panel.py @@ -15,13 +15,8 @@ from django.utils.translation import ugettext_lazy as _ import horizon -from muranodashboard import dashboard - class PackageDefinitions(horizon.Panel): name = _("Packages") slug = 'packages' policy_rules = (("murano", "get_package"),) - - -dashboard.Murano.register(PackageDefinitions) diff --git a/muranodashboard/tests/functional/base.py b/muranodashboard/tests/functional/base.py index 071a3753b..39c8f8048 100644 --- a/muranodashboard/tests/functional/base.py +++ b/muranodashboard/tests/functional/base.py @@ -218,7 +218,7 @@ class UITestCase(BaseDeps): self.fill_field(by.By.ID, 'id_username', username) self.fill_field(by.By.ID, 'id_password', password) self.driver.find_element_by_xpath("//button[@type='submit']").click() - murano = self.driver.find_element_by_xpath(consts.Applications) + murano = self.driver.find_element_by_xpath(consts.AppCatalog) if 'collapsed' in murano.get_attribute('class'): murano.click() @@ -524,7 +524,8 @@ class ApplicationTestCase(ImageTestCase): self.wait_for_alert_message() def add_app_to_env(self, app_id, app_name='TestApp', env_id=None): - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') if env_id: action = 'add' app = '{0}/{1}'.format(app_id, env_id) diff --git a/muranodashboard/tests/functional/consts.py b/muranodashboard/tests/functional/consts.py index ba7854178..a2f076a0d 100644 --- a/muranodashboard/tests/functional/consts.py +++ b/muranodashboard/tests/functional/consts.py @@ -73,6 +73,7 @@ DeleteComponent = ".btn[id^='services__row_'][id$='__action_delete']" # Panel's -Applications = "//*[@id='main_content']/div[2]//a[contains(text(), 'Applications')]" # noqa -Catalog = Applications + "/following::a[span[contains(text(), 'Catalog')]]" -Manage = Applications + "/following::a[span[contains(text(), 'Manage')]]" +AppCatalog = "//*[@id='main_content']/div[2]//a[contains(text(), 'App Catalog')]" # noqa +Browse = AppCatalog + "/following::a[span[contains(text(), 'Browse')]]" +Manage = AppCatalog + "/following::a[span[contains(text(), 'Manage')]]" +Applications = AppCatalog + "/following::a[span[contains(text(), 'Applications')]]" # noqa diff --git a/muranodashboard/tests/functional/sanity_check.py b/muranodashboard/tests/functional/sanity_check.py index 94590b8bf..a7d705f25 100644 --- a/muranodashboard/tests/functional/sanity_check.py +++ b/muranodashboard/tests/functional/sanity_check.py @@ -33,11 +33,13 @@ from muranodashboard.tests.functional import utils class TestSuiteSmoke(base.UITestCase): """This class keeps smoke tests which check operability of main panels""" def test_smoke_environments_panel(self): + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_panel_is_present('Environments') def test_smoke_applications_panel(self): - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.check_panel_is_present('Browse') def test_smoke_images_panel(self): @@ -60,6 +62,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 2. Navigate to this environment 3. Go back to environment list and delete created environment """ + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment('test_create_del_env') self.go_to_submenu('Environments') @@ -74,6 +77,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 2. Change environment's name 3. Check that renamed environment is in environment list """ + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment('test_edit_env') self.go_to_submenu('Environments') @@ -92,6 +96,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 2. Change environment's name to empty 3. Check warning message appear """ + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment('test_edit_env') self.go_to_submenu('Environments') @@ -109,7 +114,8 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 2. Press 'Create Env' 3. Make sure that it's possible to choose just created environment """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.driver.find_elements_by_xpath( "//a[contains(text(), 'Create Env')]")[0].click() self.fill_field(by.By.ID, 'id_name', 'TestEnv') @@ -128,6 +134,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 3. Go back to environment list and delete created environment """ unicode_name = u'$yaql \u2665 unicode' + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment(unicode_name) self.go_to_submenu('Environments') @@ -143,6 +150,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 3. Check a set of names, if current name isn't valid appropriate error message should appear """ + self.navigate_to('Applications') self.go_to_submenu('Environments') self.driver.find_element_by_css_selector(c.CreateEnvironment).click() @@ -168,6 +176,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): """ # uuid.uuid4() generates random uuid env_name = str(uuid.uuid4()) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment(env_name) @@ -186,6 +195,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 5. Sort rows by name and check it again. 6. Sort rows in other direction and check it again. """ + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment('quick-env-1') self.add_app_to_env(self.deployingapp_id) @@ -236,12 +246,14 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 6. Check that env status is 'Ready to configure'. """ self.add_app_to_env(self.mockapp_id) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_element_on_page(by.By.XPATH, c.EnvStatus.format('quick-env-1', 'Ready to deploy')) self.log_out() self.log_in(cfg.common.user, cfg.common.password) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_element_on_page(by.By.XPATH, c.EnvStatus.format('quick-env-1', @@ -265,6 +277,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): self.check_element_on_page(by.By.XPATH, c.Status.format('Ready'), sec=90) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_element_on_page(by.By.LINK_TEXT, 'quick-env-1') env_id = self.get_element_id('quick-env-1') @@ -275,6 +288,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 'Ready to deploy')) self.log_out() self.log_in(cfg.common.user, cfg.common.password) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_element_on_page(by.By.XPATH, c.EnvStatus.format('quick-env-1', @@ -300,12 +314,14 @@ class TestSuiteEnvironment(base.ApplicationTestCase): sec=90) self.delete_component() self.check_element_not_on_page(by.By.LINK_TEXT, 'TestApp') + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_element_on_page(by.By.XPATH, c.EnvStatus.format('quick-env-1', 'Ready to deploy')) self.log_out() self.log_in(cfg.common.user, cfg.common.password) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_element_on_page(by.By.XPATH, c.EnvStatus.format('quick-env-1', @@ -325,6 +341,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 8. Check that env status is 'Ready'. """ self.add_app_to_env(self.mockapp_id) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_element_on_page(by.By.LINK_TEXT, 'quick-env-1') env_id = self.get_element_id('quick-env-1') @@ -340,6 +357,7 @@ class TestSuiteEnvironment(base.ApplicationTestCase): 'Ready to deploy')) self.log_out() self.log_in(cfg.common.user, cfg.common.password) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.check_element_on_page(by.By.XPATH, c.EnvStatus.format('quick-env-1', @@ -430,7 +448,8 @@ class TestSuiteFields(base.FieldsTestCase): 12. Set "domain.local" as a domain name and check that error message didn't appear """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.mockapp_id) field_id = self.mockapp_id + "_0-domain" @@ -487,7 +506,8 @@ class TestSuiteFields(base.FieldsTestCase): 3. Check a set of names, if current name isn't valid appropriate error message should appears """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.mockapp_id) @@ -518,7 +538,8 @@ class TestSuiteFields(base.FieldsTestCase): 4. Set app name and click 'Next', check that there is no error message """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.mockapp_id) @@ -542,7 +563,8 @@ class TestSuiteFields(base.FieldsTestCase): field, check that validation failed 5. Set correct password. Validation has to pass """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.mockapp_id) @@ -569,7 +591,8 @@ class TestSuiteApplications(base.ApplicationTestCase): will appear 4. Click 'Back' and check that first wizard step is shown """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.mockapp_id) @@ -594,7 +617,8 @@ class TestSuiteApplications(base.ApplicationTestCase): 4. Click '+' and verify that creation of second app is possible """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.mockapp_id) @@ -615,7 +639,8 @@ class TestSuiteApplications(base.ApplicationTestCase): 4. Delete TestApp app from environment """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.mockapp_id) @@ -639,7 +664,8 @@ class TestSuiteApplications(base.ApplicationTestCase): 2. Set search criterion in the search field(e.g 'PostgreSQL') 3. Click on 'Filter' and check result """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.fill_field(by.By.CSS_SELECTOR, 'input.form-control', 'PostgreSQL') self.driver.find_element_by_id('apps__action_filter').click() @@ -661,7 +687,8 @@ class TestSuiteApplications(base.ApplicationTestCase): 4. Select 'Web' category in 'App Category' dropdown menu 5. Verify that MockApp is shown """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.driver.find_element_by_xpath( c.CategorySelector.format('All')).click() self.driver.find_element_by_partial_link_text('Databases').click() @@ -689,6 +716,7 @@ class TestSuiteApplications(base.ApplicationTestCase): and go to the env2 9. Check that added application is here """ + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment('env1') self.go_to_submenu('Environments') @@ -699,7 +727,8 @@ class TestSuiteApplications(base.ApplicationTestCase): env_id = self.get_element_id('env2') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.driver.find_element_by_xpath( ".//*[@id='environment_switcher']/a").click() @@ -729,7 +758,8 @@ class TestSuiteApplications(base.ApplicationTestCase): 3. Click deploy 4. Check that for "Deploying" status progress bar is seen """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.mockapp_id) field_id = "{0}_0-name".format(self.mockapp_id) self.fill_field(by.By.ID, field_id, value='TestApp') @@ -795,7 +825,8 @@ class TestSuiteApplications(base.ApplicationTestCase): 2. Choose some application and click on 'More info' 3. Verify info about application """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('details', self.mockapp_id) self.assertEqual('MockApp for webUI tests', @@ -902,7 +933,8 @@ class TestSuiteApplications(base.ApplicationTestCase): 2. Check for YAQL validator 3. Check that app is added to the environment """ - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('quick-add', self.hot_app_id) field_id = "{0}_0-name".format(self.hot_app_id) self.fill_field(by.By.ID, field_id, value='TestHotApp') @@ -945,6 +977,7 @@ class TestSuiteApplications(base.ApplicationTestCase): # In case of application some short name is needed to fit on page app_names.append(str(uuid.uuid4())[::4]) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment(env_name) self.go_to_submenu('Environments') @@ -953,7 +986,8 @@ class TestSuiteApplications(base.ApplicationTestCase): for idx, app_name in enumerate(app_names): # Add application to the environment - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app( 'add', '{0}/{1}'.format(self.mockapp_id, env_id)) self.fill_field(by.By.NAME, @@ -1008,6 +1042,7 @@ class TestSuiteApplications(base.ApplicationTestCase): # In case of application some short name is needed to fit on page app_names.append(str(uuid.uuid4())[::4]) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment(env_name) self.go_to_submenu('Environments') @@ -1016,7 +1051,8 @@ class TestSuiteApplications(base.ApplicationTestCase): for idx, app_name in enumerate(app_names, 1): # Add application to the environment - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app( 'add', '{0}/{1}'.format(self.mockapp_id, env_id)) self.fill_field(by.By.NAME, @@ -1085,8 +1121,8 @@ class TestSuiteAppsPagination(base.UITestCase): def test_apps_pagination(self): """Test check pagination in case of many applications installed.""" - self.navigate_to('Catalog') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') packages_list = [elem.name for elem in self.murano_client.packages.list()] # No list of apps available in the client only packages are. @@ -1181,8 +1217,8 @@ class TestSuitePackages(base.PackageTestCase): self.fill_field(by.By.ID, 'id_tags', 'TEST_TAG') self.modify_package('tags', 'TEST_TAG') - self.navigate_to('Catalog') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.select_and_click_action_for_app('details', self.postgre_id) self.assertIn('TEST_TAG', self.driver.find_element_by_xpath( @@ -1225,8 +1261,8 @@ class TestSuitePackages(base.PackageTestCase): self.wait_for_alert_message() self.check_package_parameter_by_id(self.postgre_id, 'Active', 'False') - self.navigate_to('Catalog') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') # 'Quick Deploy' button contains id of the application. # So it is possible to definitely determinate is it in catalog or not. btn_xpath = ("//*[@href='{0}/app-catalog/catalog/quick-add/{1}']" @@ -1243,8 +1279,8 @@ class TestSuitePackages(base.PackageTestCase): self.check_package_parameter_by_id(self.postgre_id, 'Active', 'True') - self.navigate_to('Catalog') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.check_element_on_page(by.By.XPATH, btn_xpath) def test_check_toggle_public_package(self): @@ -1282,8 +1318,8 @@ class TestSuitePackages(base.PackageTestCase): # Check that application is available in other project. self.switch_to_project(new_project) - self.navigate_to('Catalog') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') # 'Quick Deploy' button contains id of the application. # So it is possible to definitely determine is it in catalog or not. btn_xpath = ("//*[@href='{0}/app-catalog/catalog/quick-add/{1}']" @@ -1304,8 +1340,8 @@ class TestSuitePackages(base.PackageTestCase): # Check that application now is not available in other porject. self.switch_to_project(new_project) - self.navigate_to('Catalog') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.check_element_not_on_page(by.By.XPATH, btn_xpath) def test_modify_description(self): @@ -1323,8 +1359,8 @@ class TestSuitePackages(base.PackageTestCase): self.modify_package('description', 'New Description') - self.navigate_to('Catalog') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.assertEqual('New Description', self.driver.find_element_by_xpath( c.MockAppDescr).text) @@ -2237,8 +2273,8 @@ class TestSuitePackageCategory(base.PackageTestCase): 9. Select new category in "App category" dropdown list """ self._import_package_with_category(self.archive, self.category) - self.navigate_to('Catalog') - self.go_to_submenu('Browse') + self.navigate_to('Browse') + self.go_to_submenu('Browse Local') self.driver.find_element_by_xpath( c.CategorySelector.format('All')).click() self.driver.find_element_by_partial_link_text(self.category).click() @@ -2269,7 +2305,7 @@ class TestSuitePackageCategory(base.PackageTestCase): # create environment env_name = str(uuid.uuid4()) - self.navigate_to('Catalog') + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment(env_name) self.go_to_submenu('Environments') @@ -2417,6 +2453,7 @@ class TestSuiteMultipleEnvironments(base.ApplicationTestCase): 3. Check created environments 4. Delete created environments at once """ + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment('test_create_del_env_1') self.go_to_submenu('Environments') @@ -2444,6 +2481,7 @@ class TestSuiteMultipleEnvironments(base.ApplicationTestCase): """ self.add_app_to_env(self.mockapp_id) self.add_app_to_env(self.mockapp_id) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.driver.find_element_by_css_selector( "label[for=ui-id-1]").click() @@ -2469,6 +2507,7 @@ class TestSuiteMultipleEnvironments(base.ApplicationTestCase): """ self.add_app_to_env(self.deployingapp_id) self.add_app_to_env(self.deployingapp_id) + self.navigate_to('Applications') self.go_to_submenu('Environments') self.driver.find_element_by_css_selector( "label[for=ui-id-1]").click() @@ -2498,6 +2537,7 @@ class TestSuiteMultipleEnvironments(base.ApplicationTestCase): 5. Check that "Abandon Environments" button is only clickable if env with status "Ready", "Deploying" are checked """ + self.navigate_to('Applications') self.go_to_submenu('Environments') self.create_environment('quick-env-1') self.go_to_submenu('Environments') diff --git a/releasenotes/notes/dashboard-rename-split-650ba2f7d4f846c2.yaml b/releasenotes/notes/dashboard-rename-split-650ba2f7d4f846c2.yaml new file mode 100644 index 000000000..8661a157b --- /dev/null +++ b/releasenotes/notes/dashboard-rename-split-650ba2f7d4f846c2.yaml @@ -0,0 +1,16 @@ +--- +prelude: > + Murano Dashboard has been renamed to App Catalog and now allows + seamless integration and single panel structure + with App Catalog UI dashboard. +features: + - Murano dashboard has been renamed to App Catalog, + monolithic config file has been split into multiple small files. + Every such file defines either a panel group or adds + general murano-related settings to horizon. +upgrade: + - To upgrade to Newton version of app catalog you need to remove old + ``_50_murano.py`` config file, that defined in murano dashboard. Be sure to + also remove any .pyc and .po files. After that you need to copy all new + config files from ``muranodashboard/local/enabled/*.py`` to + ``openstack_dashboard/local/enabled/`` and restart horizon