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
# under the License.
import json
import mock
import testtools
from horizon import exceptions
from muranodashboard.images import tables
from muranodashboard.images import views
class TestImagesForms(testtools.TestCase):
def setUp(self):
super(TestImagesForms, self).setUp()
self.mock_request = mock.MagicMock()
self.miv = views.MarkedImagesView(request=self.mock_request)
class TestMarkedImagesView(testtools.TestCase):
@mock.patch.object(views, 'reverse')
def test_get_data_error(self, mock_reverse):
self.assertRaises(exceptions.Http302, self.miv.get_data)
mock_reverse.assert_called_once_with('horizon:app-catalog:'
'catalog:index')
def setUp(self):
super(TestMarkedImagesView, self).setUp()
mock_request = mock.Mock(horizon={'async_messages': []})
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')