def test_model_repr(self): model1 = base_model.ReportModel(data={'a': 1, 'b': 2}, attached_view=BasicView()) model2 = base_model.ReportModel(data={'a': 1, 'b': 2}) base_re = r"<Model [^ ]+\.[^ ]+ \{.+\} with " with_view_re = base_re + r"view [^ ]+\.[^ ]+>" without_view_re = base_re + r"no view>" self.assertTrue(re.match(with_view_re, repr(model1))) self.assertTrue(re.match(without_view_re, repr(model2)))
def test_str_returns_string_with_attached_view(self): model = base_model.ReportModel(data={ 'a': 1, 'b': 2 }, attached_view=BasicView()) self.assertEqual(str(model), 'a: 1;b: 2;')
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_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_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_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_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_str_throws_error_with_no_attached_view(self): model = base_model.ReportModel(data={'c': [1, 2, 3]}) # ugly code for python 2.6 compat, since python 2.6 # does not have assertRaisesRegexp try: str(model) except Exception as e: err_str = 'Cannot stringify model: no attached view' self.assertEqual(str(e), err_str) else: self.assertTrue(False)
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_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_immutable_mappings_produce_mutable_models(self): class SomeImmutableMapping(col.Mapping): def __init__(self): self.data = {'a': 2, 'b': 4, 'c': 8} def __getitem__(self, key): return self.data[key] def __len__(self): return len(self.data) def __iter__(self): return iter(self.data) mp = SomeImmutableMapping() model = base_model.ReportModel(data=mp) model.attached_view = BasicView() self.assertEqual('a: 2;b: 4;c: 8;', str(model)) model['d'] = 16 self.assertEqual('a: 2;b: 4;c: 8;d: 16;', str(model)) self.assertEqual({'a': 2, 'b': 4, 'c': 8}, mp.data)
def generate_model_with_submodel(): base_m = basic_generator() tv = TmpView() base_m['submodel'] = base_model.ReportModel(data={'c': [1, 2, 3]}, attached_view=tv) return base_m
def basic_generator(): return base_model.ReportModel(data={'string': 'value', 'int': 1})
def test_getattr(self): model = base_model.ReportModel(data={'a': 1}) self.assertEqual(model.a, 1) self.assertRaises(AttributeError, getattr, model, 'b')
def setUp(self): super(TestJinjaView, self).setUp() self.model = base_model.ReportModel(data={'int': 1, 'string': 'value'})
def test_data_as_sequence_is_handled_properly(self): model = base_model.ReportModel(data=['a', 'b']) model.attached_view = BasicView() # if we don't handle lists properly, we'll get a TypeError here self.assertEqual('0: a;1: b;', str(model))