Implement segment detail tab
Implemented segment detail functionality. Added test cases that actually not covering the line of code but tested the detail segment functionally. Partial-Implements: blueprint masakari-dashboard Change-Id: I214c9df87af3c4ff29abc2e2b30b287b81cd603c
This commit is contained in:
parent
30d318803f
commit
4996c377ad
|
@ -63,8 +63,11 @@ class DeleteSegment(tables.DeleteAction):
|
|||
|
||||
class FailoverSegmentTable(tables.DataTable):
|
||||
|
||||
name = tables.WrappingColumn('name', verbose_name=_("Name"), truncate=40)
|
||||
uuid = tables.Column('uuid', verbose_name=_("UUID"))
|
||||
name = tables.WrappingColumn(
|
||||
'name', verbose_name=_("Name"),
|
||||
link="horizon:masakaridashboard:segments:detail", truncate=40)
|
||||
uuid = tables.Column('uuid', verbose_name=_("UUID"),
|
||||
link="horizon:masakaridashboard:segments:detail")
|
||||
recovery_method = tables.Column(
|
||||
'recovery_method', verbose_name=_("Recovery Method"))
|
||||
service_type = tables.Column(
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# Copyright (c) 2018 NTT DATA
|
||||
#
|
||||
# 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.utils.translation import ugettext_lazy as _
|
||||
|
||||
from horizon import tabs
|
||||
|
||||
|
||||
class OverviewTab(tabs.Tab):
|
||||
name = _("Segments")
|
||||
slug = "segments"
|
||||
template_name = ("masakaridashboard/segments/_detail_overview.html")
|
||||
|
||||
def get_context_data(self, request):
|
||||
return {"segment": self.tab_group.kwargs['segment']}
|
||||
|
||||
|
||||
class SegmentDetailTabs(tabs.DetailTabsGroup):
|
||||
slug = "segment_details"
|
||||
tabs = (OverviewTab,)
|
|
@ -0,0 +1,21 @@
|
|||
{% load i18n sizeformat parse_date %}
|
||||
<div class="detail">
|
||||
<h4>{% trans "Segment Detail" %}</h4>
|
||||
<hr class="header_rule">
|
||||
<dl class="dl-horizontal">
|
||||
<dt>{% trans "Name" %}</dt>
|
||||
<dd>{{ segment.name }}</dd>
|
||||
<dt>{% trans "ID" %}</dt>
|
||||
<dd>{{ segment.id }}</dd>
|
||||
<dt>{% trans "Description" %}</dt>
|
||||
<dd>{{ segment.description }}</dd>
|
||||
<dt>{% trans "Recovery Method" %}</dt>
|
||||
<dd>{{ segment.recovery_method }}</dd>
|
||||
<dt>{% trans "Service Type" %}</dt>
|
||||
<dd>{{ segment.service_type }}</dd>
|
||||
<dt>{% trans "Created at" %}</dt>
|
||||
<dd>{{ segment.created_at|parse_isotime }}</dd>
|
||||
<dt>{% trans "Updated at" %}</dt>
|
||||
<dd>{{ segment.updated_at|parse_isotime }}</dd>
|
||||
</dl>
|
||||
</div>
|
|
@ -171,3 +171,17 @@ class SegmentTest(test.TestCase):
|
|||
segment.uuid,
|
||||
ignore_missing=True
|
||||
)
|
||||
|
||||
def test_detail(self):
|
||||
segment = self.masakari_segment.list()[0]
|
||||
detail_url = reverse('horizon:masakaridashboard:segments:detail',
|
||||
args=[segment.uuid])
|
||||
with mock.patch('masakaridashboard.api.api.get_segment',
|
||||
return_value=segment):
|
||||
res = self.client.get(detail_url)
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertEqual(200, res.status_code)
|
||||
self.assertEqual(segment.uuid, res.context['segment'].uuid)
|
||||
self.assertTemplateUsed(res, 'horizon/common/_detail.html')
|
||||
self.assertTemplateUsed(
|
||||
res, 'masakaridashboard/segments/_detail_overview.html')
|
||||
|
|
|
@ -18,9 +18,11 @@ from django.conf.urls import url
|
|||
from masakaridashboard.segments import views
|
||||
|
||||
|
||||
SEGMENT = r'^(?P<segment_id>[^/]+)/%s$'
|
||||
urlpatterns = [
|
||||
url(r'^$', views.IndexView.as_view(), name='index'),
|
||||
url(r'^create_segment$',
|
||||
views.CreateSegmentView.as_view(),
|
||||
name='create_segment'),
|
||||
url(SEGMENT % 'detail', views.DetailView.as_view(), name='detail'),
|
||||
]
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
# under the License.
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
@ -23,8 +24,13 @@ from masakaridashboard.segments import tables as masakari_tab
|
|||
|
||||
from horizon import exceptions
|
||||
from horizon import forms
|
||||
|
||||
from horizon.utils import memoized
|
||||
from masakaridashboard.segments import forms as segment_forms
|
||||
|
||||
from horizon import tabs
|
||||
from masakaridashboard.segments import tabs as seg_tab
|
||||
|
||||
|
||||
class IndexView(tables.DataTableView):
|
||||
table_class = masakari_tab.FailoverSegmentTable
|
||||
|
@ -92,3 +98,37 @@ class CreateSegmentView(forms.ModalFormView):
|
|||
def get_form_kwargs(self):
|
||||
kwargs = super(CreateSegmentView, self).get_form_kwargs()
|
||||
return kwargs
|
||||
|
||||
|
||||
class DetailView(tabs.TabbedTableView):
|
||||
tab_group_class = seg_tab.SegmentDetailTabs
|
||||
template_name = 'horizon/common/_detail.html'
|
||||
page_title = "{{ segment.name|default:segment.id }}"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(DetailView, self).get_context_data(**kwargs)
|
||||
segment = self.get_data()
|
||||
table = masakari_tab.FailoverSegmentTable(self.request)
|
||||
context["segment"] = segment
|
||||
context["url"] = self.get_redirect_url()
|
||||
context["actions"] = table.render_row_actions(segment)
|
||||
return context
|
||||
|
||||
@memoized.memoized_method
|
||||
def get_data(self):
|
||||
try:
|
||||
segment_id = self.kwargs['segment_id']
|
||||
segment = api.get_segment(self.request, segment_id)
|
||||
except Exception:
|
||||
msg = _('Unable to get segment "%s".') % segment_id
|
||||
redirect = reverse('horizon:masakaridashboard:segments:index')
|
||||
exceptions.handle(self.request, msg, redirect=redirect)
|
||||
|
||||
return segment
|
||||
|
||||
def get_redirect_url(self):
|
||||
return reverse('horizon:masakaridashboard:segments:index')
|
||||
|
||||
def get_tabs(self, request, *args, **kwargs):
|
||||
segment = self.get_data()
|
||||
return self.tab_group_class(request, segment=segment, **kwargs)
|
||||
|
|
Loading…
Reference in New Issue