dashboard: Add unit tests for bgpvpn_dashboard
Unit tests for dashboard elements regarding BGP VPN. Test dashboard elements (except workflows) only for a admin user. Change-Id: I5bd6b154725a60a94d98e2e64ca8fba95ec20c80
This commit is contained in:
5 changed files with 167 additions and 2 deletions
@@ -17,6 +17,7 @@ import mock
from openstack_dashboard.test import helpers
from bgpvpn_dashboard.api import bgpvpn as bgpvpn_api
from bgpvpn_dashboard.dashboards.admin.bgpvpn import forms as bgpvpn_a_form
from bgpvpn_dashboard.dashboards.project.bgpvpn import forms as bgpvpn_p_form
@@ -62,3 +63,33 @@ class TestCreateDataBgpVpn(helpers.APITestCase):
self.assertFalse(self.bgpvpn_form.has_error("route_targets"))
self.assertFalse(self.bgpvpn_form.has_error("import_targets"))
self.assertFalse(self.bgpvpn_form.has_error("export_targets"))
@mock.patch.object(bgpvpn_p_form, 'bgpvpn_api')
@mock.patch.object(bgpvpn_a_form, 'api')
def test_handle_update(self, mock_api, mock_bgpvpn_api):
data = {"bgpvpn_id": "foo-id",
"type": "l3",
"name": "foo-name",
"route_targets": "65421:1",
"import_targets": "65421:2",
"export_targets": "65421:3"}
mock_api.keystone.tenant_list.return_value = [], False
self.bgpvpn_form = bgpvpn_a_form.CreateBgpVpn(self.mock_request)
self.bgpvpn_form.action = "update"
expected_data = bgpvpn_api.Bgpvpn({"bgpvpn_id": "foo-id",
"name": "foo-name",
"tenant_id": "tenant_id",
"route_targets": ["65421:1"],
"import_targets": ["65421:2"],
"export_targets": ["65421:3"]})
mock_bgpvpn_api.bgpvpn_update.return_value = expected_data
result = self.bgpvpn_form.handle(self.mock_request, data)
mock_bgpvpn_api.bgpvpn_update.assert_called_once_with(
self.mock_request, "foo-id",
name="foo-name",
route_targets=["65421:1"],
import_targets=["65421:2"],
export_targets=["65421:3"])
self.assertEqual(result, expected_data)
29
bgpvpn_dashboard/test/admin/test_tables.py
Normal file
29
bgpvpn_dashboard/test/admin/test_tables.py
Normal file
@@ -0,0 +1,29 @@
# Copyright (c) 2017 Orange.
# All Rights Reserved.
#
# 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 mock
import testtools
from bgpvpn_dashboard.dashboards.admin.bgpvpn import tables as bgpvpn_tables
class TestDeleteBgpvpns(testtools.TestCase):
@mock.patch.object(bgpvpn_tables, 'bgpvpn_api')
def test_delete(self, mock_bgpvpn_api):
mock_request = mock.Mock()
delete_bgpvpn = bgpvpn_tables.DeleteBgpvpn()
delete_bgpvpn.delete(mock_request, "id")
mock_bgpvpn_api.bgpvpn_delete.assert_called_once_with(mock_request,
"id")
81
bgpvpn_dashboard/test/admin/test_views.py
Normal file
81
bgpvpn_dashboard/test/admin/test_views.py
Normal file
@@ -0,0 +1,81 @@
# Copyright (c) 2017 Orange.
#
# 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 mock
from collections import namedtuple
from bgpvpn_dashboard.api import bgpvpn as bgpvpn_api
from bgpvpn_dashboard.dashboards.admin.bgpvpn import tables as bgpvpn_tables
from bgpvpn_dashboard.dashboards.admin.bgpvpn import views as bgpvpn_views
from openstack_dashboard.test import helpers
VIEWS = "bgpvpn_dashboard.dashboards.admin.bgpvpn.views"
class TestIndexView(helpers.APITestCase):
def setUp(self):
super(TestIndexView, self).setUp()
mock_request = mock.Mock(horizon={'async_messages': []})
self.bgpvpn_view = bgpvpn_views.IndexView(request=mock_request)
self.assertEqual(bgpvpn_tables.BgpvpnTable,
self.bgpvpn_view.table_class)
def _get_mock_bgpvpn(self, prefix):
bgpvpn_info = {}
if prefix:
bgpvpn_info = {
"name": "%s_name" % prefix,
"route_targets": [],
"import_targets": [],
"export_targets": [],
"networks": [],
"routers": [],
"tenant_id": "tenant_id",
"type": "l3"
}
return bgpvpn_api.Bgpvpn(bgpvpn_info)
@mock.patch.object(bgpvpn_views.api, 'keystone', autospec=True)
def test_get_tenant_name(self, mock_api):
Tenant = namedtuple("Tenant", ["id", "name"])
tenant = Tenant("tenant_id", "tenant_name")
mock_api.tenant_get.return_value = tenant
result = self.bgpvpn_view._get_tenant_name("tenant_id")
mock_api.tenant_get.assert_called_once_with(
self.bgpvpn_view.request, "tenant_id")
self.assertEqual(result, "tenant_name")
@mock.patch('%s.IndexView._get_tenant_name' % VIEWS,
return_value={"tenant_id": "tenant_name"})
@mock.patch.object(bgpvpn_views, 'api', autospec=True)
@mock.patch.object(bgpvpn_views, 'bgpvpn_api', autospec=True)
def test_get_data(self, mock_bgpvpn_api, mock_api, mock_get_tenant_name):
bgpvpn_foo = self._get_mock_bgpvpn("foo")
bgpvpn_bar = self._get_mock_bgpvpn("bar")
mock_neutron_client = mock_api.neutron.neutronclient(mock.Mock())
mock_bgpvpn_api.bgpvpns_list.return_value = [bgpvpn_foo, bgpvpn_bar]
mock_neutron_client.list_networks.return_value = []
mock_neutron_client.list_routers.return_value = []
expected_bgpvpns = [bgpvpn_foo, bgpvpn_bar]
result = self.bgpvpn_view.get_data()
calls = [mock.call("tenant_id"), mock.call("tenant_id")]
mock_get_tenant_name.assert_has_calls(calls)
self.assertEqual(result, expected_bgpvpns)
@@ -63,7 +63,7 @@ class TestUpdateRouterAssociations(testtools.TestCase):
self.assertEqual('foo_reverse_url?step=update_bgpvpn_router', result)
class TestFonctionGet(testtools.TestCase):
class TestFunctionGet(testtools.TestCase):
@mock.patch.object(bgpvpn_tables, 'reverse')
def test_get_network_url(self, mock_reverse):
@@ -89,7 +89,7 @@ class TestEditDataView(helpers.APITestCase):
self.bgpvpn_view.template_name)
@mock.patch.object(bgpvpn_views, 'bgpvpn_api', autospec=True)
def test_get_initial(self, mock_bgpvpn_api):
def test_get_initial_user(self, mock_bgpvpn_api):
self.bgpvpn_view.request.user.is_superuser = False
bgpvpn_data = {"name": "foo-name",
"id": "foo-id",
@@ -106,6 +106,30 @@ class TestEditDataView(helpers.APITestCase):
for key, val in expected_data.items():
self.assertEqual(val, result[key])
@mock.patch.object(bgpvpn_views, 'bgpvpn_api', autospec=True)
def test_get_initial_admin(self, mock_bgpvpn_api):
self.bgpvpn_view.request.user.is_superuser = True
bgpvpn_data = {"name": "foo-name",
"id": "foo-id",
"type": "l3",
"route_targets": ["65432:1", "65432:2"],
"import_targets": [],
"export_targets": []}
expected_data = {"name": "foo-name",
"bgpvpn_id": "foo-id",
"type": "l3",
"route_targets": "65432:1,65432:2",
"import_targets": "",
"export_targets": ""}
mock_bgpvpn_api.bgpvpn_get.return_value = bgpvpn_api.Bgpvpn(
bgpvpn_data)
result = self.bgpvpn_view.get_initial()
mock_bgpvpn_api.bgpvpn_get.assert_called_once_with(
self.bgpvpn_view.request, "foo-id")
for key, val in expected_data.items():
self.assertEqual(val, result[key])
def test_get_context_data(self):
mock_form = mock.Mock()
args = ("foo-id",)
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.