Add details page for packages

Package should add details link for user can see the
more information of the package.

Implements: blueprint add-fqpn-field
Change-Id: Iabcddfeffab67c82fa0f6715a98fc6dc6dfddf94
Closes-bug: #1501108
This commit is contained in:
zhurong 2016-01-14 00:41:55 +08:00
parent 2350c6d2a0
commit 6ffaec95bd
8 changed files with 108 additions and 2 deletions

View File

@ -213,12 +213,13 @@ class ModifyPackage(tables.LinkAction):
class PackageDefinitionsTable(tables.DataTable):
name = tables.Column('name', verbose_name=_('Package Name'))
name = tables.Column('name',
link="horizon:murano:packages:detail",
verbose_name=_('Package Name'))
tenant_name = tables.Column('tenant_name', verbose_name=_('Tenant Name'))
enabled = tables.Column('enabled', verbose_name=_('Active'))
is_public = tables.Column('is_public', verbose_name=_('Public'))
type = tables.Column('type', verbose_name=_('Type'))
author = tables.Column('author', verbose_name=_('Author'))
version = tables.Column(lambda obj: getattr(obj, 'version', None),
verbose_name=_('Version'))
created_time = tables.Column('created',

View File

@ -25,4 +25,6 @@ urlpatterns = [
views.BUNDLE_FORMS), name='import_bundle'),
urls.url(r'^modify/(?P<app_id>[^/]+)?$',
views.ModifyPackageView.as_view(), name='modify'),
urls.url(r'^(?P<app_id>[^/]+)?$',
views.DetailView.as_view(), name='detail'),
]

View File

@ -32,6 +32,7 @@ from horizon.forms import views
from horizon import messages
from horizon import tables as horizon_tables
from horizon.utils import functions as utils
from horizon import views as horizon_views
from muranoclient.common import exceptions as exc
from muranoclient.common import utils as muranoclient_utils
from openstack_dashboard.api import glance
@ -564,3 +565,25 @@ class ModifyPackageView(views.ModalFormView):
context = super(ModifyPackageView, self).get_context_data(**kwargs)
context['app_id'] = self.kwargs['app_id']
return context
class DetailView(horizon_views.HorizonTemplateView):
template_name = 'packages/detail.html'
page_title = "{{ app.name }}"
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
app = self.get_data()
context["app"] = app
return context
def get_data(self):
try:
app_id = self.kwargs['app_id']
app = api.muranoclient(self.request).packages.get(app_id)
except Exception:
INDEX_URL = 'horizon:murano:packages:index'
exceptions.handle(self.request,
_('Unable to retrieve package details.'),
redirect=reverse(INDEX_URL))
return app

View File

@ -0,0 +1,31 @@
{% load i18n %}
<div class="detail">
<dl class="dl-horizontal">
<dt>{% trans "Name" %}</dt>
<dd>{{ app.name }}</dd>
<dt>{% trans "FQN" %}</dt>
<dd>{{ app.fully_qualified_name }}</dd>
<dt>{% trans "Type" %}</dt>
<dd>{{ app.type }}</dd>
<dt>{% trans "ID" %}</dt>
<dd>{{ app.id }}</dd>
<dt>{% trans "Package Tags" %}</dt>
<dd>{{ app.tags|join:", " }}</dd>
<dt>{% trans "Enabled" %}</dt>
<dd>{{ app.enabled|yesno|capfirst }}</dd>
<dt>{% trans "Public" %}</dt>
<dd>{{ app.is_public|yesno|capfirst }}</dd>
<dt>{% trans "Categories" %}</dt>
<dd>{{ app.categories|join:", "|default:_("None") }}</dd>
<dt>{% trans "Version" %}</dt>
<dd>{{ app.version|default:_("-") }}</dd>
<dt>{% trans "Author" %}</dt>
<dd>{{ app.author }}</dd>
<dt>{% trans "Created" %}</dt>
<dd>{{ app.created|parse_isotime }}</dd>
<dt>{% trans "Description" %}</dt>
<dd>{{ app.description|default:_("None") }}</dd>
</dl>
</div>

View File

@ -0,0 +1,20 @@
{% extends 'base.html' %}
{% load i18n %}
{% load breadcrumb_nav %}
{% block title %}{% trans "Package Details" %}{% endblock %}
{% block page_header %}
<div class='page-header'>
{% breadcrumb_nav %}
</div>
{% endblock %}
{% block main %}
<div class="row">
<div class="col-sm-12">
{% include "packages/_detail.html" %}
</div>
</div>
{% endblock %}

View File

@ -9,6 +9,7 @@ CategorySelector = "//a[contains(text(), '{0}')][contains(@class, 'dropdown-togg
App = "//div[contains(@class, 'app-list')]//h4[contains(text(), '{0}')]"
MockAppDescr = "//div[h4[contains(text(), 'MockApp')]]/p"
AppPackages = u"//tr[@data-display='{0}']"
AppDetail = "//dl[dt[contains(text(), 'Name')]]/dd"
TagInDetails = "//div[contains(@class, 'app-meta')]//ul//li[strong[contains(text(), 'Tags')]]" # noqa
TestImage = "//tr[td[contains(text(), '{0}')]]"
DeleteImageMeta = TestImage + "//td//button[contains(text(), 'Delete Metadata')]" # noqa

View File

@ -1014,6 +1014,30 @@ class TestSuitePackages(base.PackageTestCase):
self.check_package_parameter_by_name(pkg_name, 'Public', 'True')
self.check_package_parameter_by_name(pkg_name, 'Active', 'False')
def test_upload_package_detail(self):
"""Test check ability to view package details after uploading it."""
self.navigate_to('Manage')
self.go_to_submenu('Packages')
self.driver.find_element_by_id(c.UploadPackage).click()
el = self.driver.find_element_by_css_selector(
"input[name='upload-package']")
el.send_keys(self.archive)
self.driver.find_element_by_xpath(c.InputSubmit).click()
# No application data modification is needed
self.driver.find_element_by_xpath(c.InputSubmit).click()
self.driver.find_element_by_xpath(c.InputSubmit).click()
self.wait_for_alert_message()
pkg_name = self.archive_name
self.driver.find_element_by_xpath(
"//a[contains(text(), '{0}')]".format(pkg_name)).click()
self.assertIn(pkg_name,
self.driver.find_element(by.By.XPATH, c.AppDetail).text)
def test_category_management(self):
"""Test application category adds and deletes successfully

View File

@ -0,0 +1,4 @@
---
features:
- Add details page for packages, The details page will show more info
to user, such as FQN, Description, etc.