From 30d318803f88656ba38877f5e00019b883ccfb8d Mon Sep 17 00:00:00 2001 From: nirajsingh Date: Tue, 30 Jan 2018 16:21:43 +0530 Subject: [PATCH] Implement delete segment Added delete segment functionality. Also added test cases that actually not covering the line of code but tested the delete segment functionally. Partial-Implements: blueprint masakari-dashboard Change-Id: Iabf59e92be9de09d2d2fde48fea403b7cd2bcd26 --- masakaridashboard/api/api.py | 6 ++++++ masakaridashboard/segments/tables.py | 26 +++++++++++++++++++++++++- masakaridashboard/segments/tests.py | 22 ++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/masakaridashboard/api/api.py b/masakaridashboard/api/api.py index 72e450a..4ccbbba 100644 --- a/masakaridashboard/api/api.py +++ b/masakaridashboard/api/api.py @@ -110,3 +110,9 @@ def segment_create(request, data): def get_segment(request, segment_id): """Returns segment by id""" return openstack_connection(request).get_segment(segment_id) + + +@handle_errors(_("Unable to delete segment"), []) +def segment_delete(request, segment_id, ignore_missing=True): + return openstack_connection(request).delete_segment( + segment_id, ignore_missing) diff --git a/masakaridashboard/segments/tables.py b/masakaridashboard/segments/tables.py index f4b0b06..e295907 100644 --- a/masakaridashboard/segments/tables.py +++ b/masakaridashboard/segments/tables.py @@ -14,6 +14,9 @@ # under the License. from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ungettext_lazy + +from masakaridashboard.api import api from horizon import tables @@ -37,6 +40,27 @@ class SegmentFilterAction(tables.FilterAction): filter_choices = SEGMENT_FILTER_CHOICES +class DeleteSegment(tables.DeleteAction): + @staticmethod + def action_present(count): + return ungettext_lazy( + u"Delete Segment", + u"Delete Segments", + count + ) + + @staticmethod + def action_past(count): + return ungettext_lazy( + u"Deleted Segment", + u"Deleted Segments", + count + ) + + def delete(self, request, segment_uuid): + api.segment_delete(request, segment_uuid, ignore_missing=True) + + class FailoverSegmentTable(tables.DataTable): name = tables.WrappingColumn('name', verbose_name=_("Name"), truncate=40) @@ -55,4 +79,4 @@ class FailoverSegmentTable(tables.DataTable): class Meta(object): name = "failover_segment" verbose_name = _("FailoverSegment") - table_actions = (CreateSegment, SegmentFilterAction) + table_actions = (DeleteSegment, CreateSegment, SegmentFilterAction) diff --git a/masakaridashboard/segments/tests.py b/masakaridashboard/segments/tests.py index a12def6..37035d6 100644 --- a/masakaridashboard/segments/tests.py +++ b/masakaridashboard/segments/tests.py @@ -149,3 +149,25 @@ class SegmentTest(test.TestCase): url=url, has_more=True, has_prev=False) segments = res.context['failover_segment_table'].data self.assertItemsEqual(segments, expected_segments) + + def test_delete_ok(self): + + segment = self.masakari_segment.list()[0] + data = {'object_ids': [segment.uuid], + 'action': 'failover_segment__delete'} + with mock.patch( + 'masakaridashboard.api.api.get_segment_list', + return_value=(self.masakari_segment.list(), True, True) + ), mock.patch( + 'masakaridashboard.api.api.segment_delete', + return_value=None + ) as mocked_delete: + res = self.client.post(INDEX_URL, data) + + self.assertNoFormErrors(res) + self.assertRedirectsNoFollow(res, INDEX_URL) + mocked_delete.assert_called_once_with( + mock.ANY, + segment.uuid, + ignore_missing=True + )