Increase unit test coverage for muranodashboard Images Views.

implements bp: murano-unit-test-coverage

Change-Id: I0e663793f2a6fdfe4b95249165947f68b17202ce
This commit is contained in:
Felipe Monteiro 2016-12-02 14:11:14 -05:00
parent 4a335ac674
commit 66b4f534ee
1 changed files with 170 additions and 10 deletions

View File

@ -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')