Increase unit test coverage for muranodashboard Images Views.
implements bp: murano-unit-test-coverage Change-Id: I0e663793f2a6fdfe4b95249165947f68b17202ce
This commit is contained in:
parent
4a335ac674
commit
66b4f534ee
|
@ -12,22 +12,182 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import json
|
||||||
import mock
|
import mock
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
|
|
||||||
|
from muranodashboard.images import tables
|
||||||
from muranodashboard.images import views
|
from muranodashboard.images import views
|
||||||
|
|
||||||
|
|
||||||
class TestImagesForms(testtools.TestCase):
|
class TestMarkedImagesView(testtools.TestCase):
|
||||||
def setUp(self):
|
|
||||||
super(TestImagesForms, self).setUp()
|
|
||||||
self.mock_request = mock.MagicMock()
|
|
||||||
self.miv = views.MarkedImagesView(request=self.mock_request)
|
|
||||||
|
|
||||||
@mock.patch.object(views, 'reverse')
|
def setUp(self):
|
||||||
def test_get_data_error(self, mock_reverse):
|
super(TestMarkedImagesView, self).setUp()
|
||||||
self.assertRaises(exceptions.Http302, self.miv.get_data)
|
|
||||||
mock_reverse.assert_called_once_with('horizon:app-catalog:'
|
mock_request = mock.Mock(horizon={'async_messages': []})
|
||||||
'catalog:index')
|
mock_request.session = {'horizon_pagesize': 2}
|
||||||
|
self.images_view = views.MarkedImagesView(request=mock_request)
|
||||||
|
self.images_view._prev = False
|
||||||
|
self.images_view._more = False
|
||||||
|
|
||||||
|
self.assertEqual(tables.MarkedImagesTable,
|
||||||
|
self.images_view.table_class)
|
||||||
|
self.assertEqual('images/index.html', self.images_view.template_name)
|
||||||
|
self.assertEqual('Marked Images', self.images_view.page_title)
|
||||||
|
|
||||||
|
def _get_mock_image(self, prefix):
|
||||||
|
image_info = {}
|
||||||
|
if prefix:
|
||||||
|
image_info = {
|
||||||
|
"title": "{0}_title".format(prefix),
|
||||||
|
"type": "{0}_type".format(prefix)
|
||||||
|
}
|
||||||
|
mock_image = mock.Mock(
|
||||||
|
properties={'murano_image_info': json.dumps(image_info)})
|
||||||
|
return mock_image
|
||||||
|
|
||||||
|
def test_has_prev_data(self):
|
||||||
|
self.assertFalse(self.images_view.has_prev_data(None))
|
||||||
|
|
||||||
|
def test_has_more_data(self):
|
||||||
|
self.assertFalse(self.images_view.has_more_data(None))
|
||||||
|
|
||||||
|
@mock.patch.object(views, 'glance', autospec=True)
|
||||||
|
def test_get_data(self, mock_glance):
|
||||||
|
"""Test that get_data works."""
|
||||||
|
foo_mock_image = self._get_mock_image('foo')
|
||||||
|
bar_mock_image = self._get_mock_image('bar')
|
||||||
|
# Filtered out by forms.filter_murano_images.
|
||||||
|
mock_image_to_filter = self._get_mock_image(None)
|
||||||
|
|
||||||
|
mock_glance_client = mock.Mock()
|
||||||
|
mock_glance_client.images.list.return_value = [
|
||||||
|
foo_mock_image, bar_mock_image, mock_image_to_filter]
|
||||||
|
mock_glance.glanceclient.return_value = mock_glance_client
|
||||||
|
|
||||||
|
self.images_view.request.GET.get.return_value = 'foo_marker'
|
||||||
|
result = self.images_view.get_data()
|
||||||
|
|
||||||
|
expected_images = [bar_mock_image, foo_mock_image]
|
||||||
|
expected_kwargs = {
|
||||||
|
'filters': {},
|
||||||
|
'marker': 'foo_marker',
|
||||||
|
'sort_dir': 'asc'
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertEqual(expected_images, result)
|
||||||
|
self.assertTrue(self.images_view.has_more_data(None))
|
||||||
|
self.assertTrue(self.images_view.has_prev_data(None))
|
||||||
|
mock_glance_client.images.list.assert_called_once_with(
|
||||||
|
**expected_kwargs)
|
||||||
|
self.images_view.request.GET.get.assert_called_once_with(
|
||||||
|
tables.MarkedImagesTable._meta.prev_pagination_param, None)
|
||||||
|
mock_glance.glanceclient.assert_called_once_with(
|
||||||
|
self.images_view.request, "1")
|
||||||
|
|
||||||
|
@mock.patch.object(views, 'glance', autospec=True)
|
||||||
|
def test_get_data_with_desc_sort_dir(self, mock_glance):
|
||||||
|
"""Test that sorting in descending order works."""
|
||||||
|
foo_mock_image = self._get_mock_image('foo')
|
||||||
|
bar_mock_image = self._get_mock_image('bar')
|
||||||
|
|
||||||
|
mock_glance_client = mock.Mock()
|
||||||
|
mock_glance_client.images.list.return_value = [
|
||||||
|
foo_mock_image, bar_mock_image]
|
||||||
|
mock_glance.glanceclient.return_value = mock_glance_client
|
||||||
|
|
||||||
|
self.images_view.request.GET.get.return_value = None
|
||||||
|
result = self.images_view.get_data()
|
||||||
|
|
||||||
|
expected_images = [foo_mock_image, bar_mock_image]
|
||||||
|
expected_kwargs = {
|
||||||
|
'filters': {},
|
||||||
|
'sort_dir': 'desc'
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertEqual(expected_images, result)
|
||||||
|
self.assertFalse(self.images_view.has_more_data(None))
|
||||||
|
self.assertFalse(self.images_view.has_prev_data(None))
|
||||||
|
mock_glance_client.images.list.assert_called_once_with(
|
||||||
|
**expected_kwargs)
|
||||||
|
self.images_view.request.GET.get.assert_has_calls([
|
||||||
|
mock.call(tables.MarkedImagesTable._meta.prev_pagination_param,
|
||||||
|
None),
|
||||||
|
mock.call(tables.MarkedImagesTable._meta.pagination_param, None)
|
||||||
|
])
|
||||||
|
mock_glance.glanceclient.assert_called_once_with(
|
||||||
|
self.images_view.request, "1")
|
||||||
|
|
||||||
|
@mock.patch.object(views, 'glance', autospec=True)
|
||||||
|
def test_get_data_with_more_results(self, mock_glance):
|
||||||
|
"""Test that extra results are not included in return value."""
|
||||||
|
foo_mock_image = self._get_mock_image('foo')
|
||||||
|
bar_mock_image = self._get_mock_image('bar')
|
||||||
|
extra_mock_image = self._get_mock_image('baz') # Extra result.
|
||||||
|
# Filtered out by forms.filter_murano_images.
|
||||||
|
mock_image_to_filter = self._get_mock_image(None)
|
||||||
|
|
||||||
|
mock_glance_client = mock.Mock()
|
||||||
|
mock_glance_client.images.list.return_value = [
|
||||||
|
foo_mock_image, bar_mock_image, extra_mock_image,
|
||||||
|
mock_image_to_filter]
|
||||||
|
mock_glance.glanceclient.return_value = mock_glance_client
|
||||||
|
|
||||||
|
self.images_view.request.GET.get.return_value = 'foo_marker'
|
||||||
|
result = self.images_view.get_data()
|
||||||
|
|
||||||
|
# Extra result not included, and result should be reversed.
|
||||||
|
expected_images = [bar_mock_image, foo_mock_image]
|
||||||
|
expected_kwargs = {
|
||||||
|
'filters': {},
|
||||||
|
'marker': 'foo_marker',
|
||||||
|
'sort_dir': 'asc'
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertEqual(expected_images, result)
|
||||||
|
self.assertTrue(self.images_view.has_more_data(None))
|
||||||
|
self.assertTrue(self.images_view.has_prev_data(None))
|
||||||
|
mock_glance_client.images.list.assert_called_once_with(
|
||||||
|
**expected_kwargs)
|
||||||
|
self.images_view.request.GET.get.assert_called_once_with(
|
||||||
|
tables.MarkedImagesTable._meta.prev_pagination_param, None)
|
||||||
|
mock_glance.glanceclient.assert_called_once_with(
|
||||||
|
self.images_view.request, "1")
|
||||||
|
|
||||||
|
@mock.patch.object(views, 'reverse', autospec=True)
|
||||||
|
@mock.patch.object(views, 'glance', autospec=True)
|
||||||
|
def test_get_data_except_glance_exception(self, mock_glance, mock_reverse):
|
||||||
|
"""Test that glance.glanceclient exception is handled."""
|
||||||
|
mock_glance.glanceclient.side_effect = Exception()
|
||||||
|
mock_reverse.return_value = 'foo_reverse_url'
|
||||||
|
self.images_view.request.GET.get.return_value = None
|
||||||
|
|
||||||
|
e = self.assertRaises(exceptions.Http302, self.images_view.get_data)
|
||||||
|
self.assertEqual('foo_reverse_url', e.location)
|
||||||
|
|
||||||
|
mock_glance.glanceclient.assert_called_once_with(
|
||||||
|
self.images_view.request, "1")
|
||||||
|
mock_reverse.assert_called_once_with(
|
||||||
|
'horizon:app-catalog:catalog:index')
|
||||||
|
|
||||||
|
@mock.patch.object(views, 'reverse', autospec=True)
|
||||||
|
@mock.patch.object(views, 'glance', autospec=True)
|
||||||
|
def test_get_data_except_glance_image_list_exception(self, mock_glance,
|
||||||
|
mock_reverse):
|
||||||
|
"""Test that glance_v1_client.images.list exception is handled."""
|
||||||
|
mock_glance_client = mock.Mock()
|
||||||
|
mock_glance_client.images.list.side_effect = Exception()
|
||||||
|
mock_glance.glanceclient.return_value = mock_glance_client
|
||||||
|
mock_reverse.return_value = 'foo_reverse_url'
|
||||||
|
self.images_view.request.GET.get.return_value = None
|
||||||
|
|
||||||
|
e = self.assertRaises(exceptions.Http302, self.images_view.get_data)
|
||||||
|
self.assertEqual('foo_reverse_url', e.location)
|
||||||
|
|
||||||
|
mock_glance.glanceclient.assert_called_once_with(
|
||||||
|
self.images_view.request, "1")
|
||||||
|
mock_reverse.assert_called_once_with(
|
||||||
|
'horizon:app-catalog:catalog:index')
|
||||||
|
|
Loading…
Reference in New Issue