summaryrefslogtreecommitdiff
path: root/tests/unit/reports/test_views.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/reports/test_views.py')
-rw-r--r--tests/unit/reports/test_views.py420
1 files changed, 0 insertions, 420 deletions
diff --git a/tests/unit/reports/test_views.py b/tests/unit/reports/test_views.py
deleted file mode 100644
index fdc4fe35..00000000
--- a/tests/unit/reports/test_views.py
+++ /dev/null
@@ -1,420 +0,0 @@
-# Copyright 2013 Red Hat, Inc.
-#
-# 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 copy
-
-import mock
-from oslotest import base
-
-from openstack.common.report.models import base as base_model
-from openstack.common.report.models import with_default_views as mwdv
-from openstack.common.report import report
-from openstack.common.report.views import jinja_view as jv
-from openstack.common.report.views.json import generic as json_generic
-from openstack.common.report.views.text import generic as text_generic
-
-
-def mwdv_generator():
- return mwdv.ModelWithDefaultViews(data={'string': 'value', 'int': 1})
-
-
-class TestModelReportType(base.BaseTestCase):
- def test_model_with_default_views(self):
- model = mwdv_generator()
-
- model.set_current_view_type('text')
- self.assertEqual('int = 1\nstring = value', str(model))
-
- model.set_current_view_type('json')
- self.assertEqual('{"int": 1, "string": "value"}', str(model))
-
- model.set_current_view_type('xml')
-
- self.assertEqual('<model><int>1</int><string>value</string></model>',
- str(model))
-
- def test_recursive_type_propagation_with_nested_models(self):
- model = mwdv_generator()
- model['submodel'] = mwdv_generator()
-
- model.set_current_view_type('json')
-
- self.assertEqual(model.submodel.views['json'],
- model.submodel.attached_view)
-
- def test_recursive_type_propagation_with_nested_dicts(self):
- nested_model = mwdv.ModelWithDefaultViews(json_view='abc')
- data = {'a': 1, 'b': {'c': nested_model}}
- top_model = base_model.ReportModel(data=data)
-
- top_model.set_current_view_type('json')
- self.assertEqual(nested_model.attached_view,
- nested_model.views['json'])
-
- def test_recursive_type_propagation_with_nested_lists(self):
- nested_model = mwdv_generator()
- data = {'a': 1, 'b': [nested_model]}
- top_model = base_model.ReportModel(data=data)
-
- top_model.set_current_view_type('json')
- self.assertEqual(nested_model.attached_view,
- nested_model.views['json'])
-
- def test_recursive_type_propogation_on_recursive_structures(self):
- nested_model = mwdv_generator()
- data = {'a': 1, 'b': [nested_model]}
- nested_model['c'] = data
- top_model = base_model.ReportModel(data=data)
-
- top_model.set_current_view_type('json')
- self.assertEqual(nested_model.attached_view,
- nested_model.views['json'])
- del nested_model['c']
-
- def test_report_of_type(self):
- rep = report.ReportOfType('json')
- rep.add_section(lambda x: str(x), mwdv_generator)
-
- self.assertEqual('{"int": 1, "string": "value"}', rep.run())
-
- # NOTE: this also tests views.text.header
- def test_text_report(self):
- rep = report.TextReport('Test Report')
- rep.add_section('An Important Section', mwdv_generator)
- rep.add_section('Another Important Section', mwdv_generator)
-
- target_str = ('========================================================================\n' # noqa
- '==== Test Report ====\n' # noqa
- '========================================================================\n' # noqa
- '||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\n' # noqa
- '\n' # noqa
- '\n' # noqa
- '========================================================================\n' # noqa
- '==== An Important Section ====\n' # noqa
- '========================================================================\n' # noqa
- 'int = 1\n' # noqa
- 'string = value\n' # noqa
- '========================================================================\n' # noqa
- '==== Another Important Section ====\n' # noqa
- '========================================================================\n' # noqa
- 'int = 1\n' # noqa
- 'string = value') # noqa
- self.assertEqual(target_str, rep.run())
-
- def test_to_type(self):
- model = mwdv_generator()
-
- self.assertEqual('<model><int>1</int><string>value</string></model>',
- model.to_xml())
-
-
-class TestGenericXMLView(base.BaseTestCase):
- def setUp(self):
- super(TestGenericXMLView, self).setUp()
-
- self.model = mwdv_generator()
- self.model.set_current_view_type('xml')
-
- def test_dict_serialization(self):
- self.model['dt'] = {'a': 1, 'b': 2}
-
- target_str = ('<model>'
- '<dt><a>1</a><b>2</b></dt>'
- '<int>1</int>'
- '<string>value</string></model>')
- self.assertEqual(target_str, str(self.model))
-
- def test_list_serialization(self):
- self.model['lt'] = ['a', 'b']
-
- target_str = ('<model>'
- '<int>1</int>'
- '<lt><item>a</item><item>b</item></lt>'
- '<string>value</string></model>')
- self.assertEqual(target_str, str(self.model))
-
- def test_list_in_dict_serialization(self):
- self.model['dt'] = {'a': 1, 'b': [2, 3]}
-
- target_str = ('<model>'
- '<dt><a>1</a>'
- '<b><item>2</item><item>3</item></b></dt>'
- '<int>1</int>'
- '<string>value</string></model>')
- self.assertEqual(target_str, str(self.model))
-
- def test_dict_in_list_serialization(self):
- self.model['lt'] = [1, {'b': 2, 'c': 3}]
-
- target_str = ('<model>'
- '<int>1</int>'
- '<lt><item>1</item>'
- '<item><b>2</b><c>3</c></item></lt>'
- '<string>value</string></model>')
- self.assertEqual(target_str, str(self.model))
-
- def test_submodel_serialization(self):
- sm = mwdv_generator()
- sm.set_current_view_type('xml')
-
- self.model['submodel'] = sm
-
- target_str = ('<model>'
- '<int>1</int>'
- '<string>value</string>'
- '<submodel>'
- '<model><int>1</int><string>value</string></model>'
- '</submodel>'
- '</model>')
- self.assertEqual(target_str, str(self.model))
-
- def test_wrapper_name(self):
- self.model.attached_view.wrapper_name = 'cheese'
-
- target_str = ('<cheese>'
- '<int>1</int>'
- '<string>value</string>'
- '</cheese>')
- self.assertEqual(target_str, str(self.model))
-
-
-class TestGenericJSONViews(base.BaseTestCase):
- def setUp(self):
- super(TestGenericJSONViews, self).setUp()
-
- self.model = mwdv_generator()
- self.model.set_current_view_type('json')
-
- def test_basic_kv_view(self):
- attached_view = json_generic.BasicKeyValueView()
- self.model = base_model.ReportModel(data={'string': 'value', 'int': 1},
- attached_view=attached_view)
-
- self.assertEqual('{"int": 1, "string": "value"}', str(self.model))
-
- def test_dict_serialization(self):
- self.model['dt'] = {'a': 1, 'b': 2}
-
- target_str = ('{'
- '"dt": {"a": 1, "b": 2}, '
- '"int": 1, '
- '"string": "value"'
- '}')
- self.assertEqual(target_str, str(self.model))
-
- def test_list_serialization(self):
- self.model['lt'] = ['a', 'b']
-
- target_str = ('{'
- '"int": 1, '
- '"lt": ["a", "b"], '
- '"string": "value"'
- '}')
- self.assertEqual(target_str, str(self.model))
-
- def test_list_in_dict_serialization(self):
- self.model['dt'] = {'a': 1, 'b': [2, 3]}
-
- target_str = ('{'
- '"dt": {"a": 1, "b": [2, 3]}, '
- '"int": 1, '
- '"string": "value"'
- '}')
- self.assertEqual(target_str, str(self.model))
-
- def test_dict_in_list_serialization(self):
- self.model['lt'] = [1, {'b': 2, 'c': 3}]
-
- target_str = ('{'
- '"int": 1, '
- '"lt": [1, {"b": 2, "c": 3}], '
- '"string": "value"'
- '}')
- self.assertEqual(target_str, str(self.model))
-
- def test_submodel_serialization(self):
- sm = mwdv_generator()
- sm.set_current_view_type('json')
-
- self.model['submodel'] = sm
-
- target_str = ('{'
- '"int": 1, '
- '"string": "value", '
- '"submodel": {"int": 1, "string": "value"}'
- '}')
- self.assertEqual(target_str, str(self.model))
-
-
-class TestGenericTextViews(base.BaseTestCase):
- def setUp(self):
- super(TestGenericTextViews, self).setUp()
-
- self.model = mwdv_generator()
- self.model.set_current_view_type('text')
-
- def test_multi_view(self):
- attached_view = text_generic.MultiView()
- self.model = base_model.ReportModel(data={},
- attached_view=attached_view)
-
- self.model['1'] = mwdv_generator()
- self.model['2'] = mwdv_generator()
- self.model['2']['int'] = 2
- self.model.set_current_view_type('text')
-
- target_str = ('int = 1\n'
- 'string = value\n'
- 'int = 2\n'
- 'string = value')
- self.assertEqual(target_str, str(self.model))
-
- def test_basic_kv_view(self):
- attached_view = text_generic.BasicKeyValueView()
- self.model = base_model.ReportModel(data={'string': 'value', 'int': 1},
- attached_view=attached_view)
-
- self.assertEqual('int = 1\nstring = value\n', str(self.model))
-
- def test_table_view(self):
- column_names = ['Column A', 'Column B']
- column_values = ['a', 'b']
- attached_view = text_generic.TableView(column_names, column_values,
- 'table')
- self.model = base_model.ReportModel(data={},
- attached_view=attached_view)
-
- self.model['table'] = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}]
-
- target_str = (' Column A | Column B \n' # noqa
- '------------------------------------------------------------------------\n' # noqa
- ' 1 | 2 \n' # noqa
- ' 3 | 4 \n') # noqa
-
- self.assertEqual(target_str, str(self.model))
-
- def test_dict_serialization(self):
- self.model['dt'] = {'a': 1, 'b': 2}
-
- target_str = ('dt = \n'
- ' a = 1\n'
- ' b = 2\n'
- 'int = 1\n'
- 'string = value')
- self.assertEqual(target_str, str(self.model))
-
- def test_list_serialization(self):
- self.model['lt'] = ['a', 'b']
-
- target_str = ('int = 1\n'
- 'lt = \n'
- ' a\n'
- ' b\n'
- 'string = value')
- self.assertEqual(target_str, str(self.model))
-
- def test_list_in_dict_serialization(self):
- self.model['dt'] = {'a': 1, 'b': [2, 3]}
-
- target_str = ('dt = \n'
- ' a = 1\n'
- ' b = \n'
- ' 2\n'
- ' 3\n'
- 'int = 1\n'
- 'string = value')
-
- self.assertEqual(target_str, str(self.model))
-
- def test_dict_in_list_serialization(self):
- self.model['lt'] = [1, {'b': 2, 'c': 3}]
-
- target_str = ('int = 1\n'
- 'lt = \n'
- ' 1\n'
- ' [dict]\n'
- ' b = 2\n'
- ' c = 3\n'
- 'string = value')
- self.assertEqual(target_str, str(self.model))
-
- def test_submodel_serialization(self):
- sm = mwdv_generator()
- sm.set_current_view_type('text')
-
- self.model['submodel'] = sm
-
- target_str = ('int = 1\n'
- 'string = value\n'
- 'submodel = \n'
- ' int = 1\n'
- ' string = value')
- self.assertEqual(target_str, str(self.model))
-
- def test_custom_indent_string(self):
- view = text_generic.KeyValueView(indent_str='~~')
-
- self.model['lt'] = ['a', 'b']
- self.model.attached_view = view
-
- target_str = ('int = 1\n'
- 'lt = \n'
- '~~a\n'
- '~~b\n'
- 'string = value')
- self.assertEqual(target_str, str(self.model))
-
-
-def get_open_mocks(rv):
- file_mock = mock.MagicMock(name='file_obj')
- file_mock.read.return_value = rv
- open_mock = mock.MagicMock(name='open')
- open_mock().__enter__.return_value = file_mock
- return (open_mock, file_mock)
-
-
-class TestJinjaView(base.BaseTestCase):
-
- TEMPL_STR = "int is {{ int }}, string is {{ string }}"
- MM_OPEN, MM_FILE = get_open_mocks(TEMPL_STR)
-
- def setUp(self):
- super(TestJinjaView, self).setUp()
- self.model = base_model.ReportModel(data={'int': 1, 'string': 'value'})
-
- @mock.mock_open(MM_OPEN)
- def test_load_from_file(self):
- self.model.attached_view = jv.JinjaView(path='a/b/c/d.jinja.txt')
-
- self.assertEqual('int is 1, string is value', str(self.model))
- self.MM_FILE.assert_called_with_once('a/b/c/d.jinja.txt')
-
- def test_direct_pass(self):
- self.model.attached_view = jv.JinjaView(text=self.TEMPL_STR)
-
- self.assertEqual('int is 1, string is value', str(self.model))
-
- def test_load_from_class(self):
- class TmpJinjaView(jv.JinjaView):
- VIEW_TEXT = TestJinjaView.TEMPL_STR
-
- self.model.attached_view = TmpJinjaView()
-
- self.assertEqual('int is 1, string is value', str(self.model))
-
- def test_is_deepcopiable(self):
- view_orig = jv.JinjaView(text=self.TEMPL_STR)
- view_cpy = copy.deepcopy(view_orig)
-
- self.assertIsNot(view_orig, view_cpy)