def test_get_value_model_attr_callable(self): o = SimpleDemoModel() ds = SimpleDemoModelSource.as_datasource() o.fake = F c = Column('fake') v = c.get_value(o, ds) self.assertIsInstance(v, RowValue) self.assertEqual(v, 'called without obj')
def test_init(self): attr = 'char' c = Column(attr) self.assertEqual(c.attr, attr) self.assertEqual(str(c), attr) self.assertEqual(repr(c), "'%s'" % attr) c = Column(attr, widget='Widget') self.assertEqual(c.widget, 'Widget')
def test_custom_column(self): G(SimpleDemoModel, n=2, char='abc', integer1=1, integer2=3) ds = Datasource.as_datasource(model=SimpleDemoModel, columns=[ Column('integer1'), Column('integer2'), CalcColumn(['integer1', 'integer2']) ]) self.assertSequenceEqual(ds, [(1, 3, 4), (1, 3, 4)])
def test_apply_manipulator(self): class FakeCell(): value = 'low' def upper(v): return v.upper() c = Column('char', manipulator=upper) v = c.apply_manipulator(FakeCell()) self.assertEqual(v.value, 'LOW')
def test_get_value_attr_on_ds(self): """Test get value where attr not found on model, but on ds""" o = SimpleDemoModel() ds = SimpleDemoModelSource.as_datasource() ds.fake = 'Hello' c = Column('fake') v = c.get_value(o, ds) self.assertIsInstance(v, RowValue) self.assertEqual(v, 'Hello')
def test_columns(self): G(SimpleDemoModel, n=2, char='abc', integer1=1) ds = Datasource.as_datasource( model=SimpleDemoModel, columns=[Column('char', 'AAA'), Column('integer1')]) self.assertSequenceEqual([c.name for c in ds.columns], ['char', 'integer1']) self.assertSequenceEqual([c.title for c in ds.columns], ['AAA', 'Integer #1']) self.assertSequenceEqual(ds, [(u'abc', 1), (u'abc', 1)])
def test_get_value_attr_callable_on_ds(self): """Test get value where attr is not found on model and is callable attr on ds """ o = SimpleDemoModel() ds = SimpleDemoModelSource.as_datasource() ds.fake = F c = Column('fake') v = c.get_value(o, ds) self.assertIsInstance(v, RowValue) self.assertEqual(v, 'called with obj')
def test_custom_column_from_datasource_method(self): G(SimpleDemoModel, n=2, char='abc', integer1=1, integer2=3) ds = Datasource.as_datasource(model=SimpleDemoModel, extra_column=lambda obj: 'extra_value', columns=[ Column('integer1'), Column('integer2'), Column('extra_column'), CalcColumn(['integer1', 'integer2']) ]) self.assertSequenceEqual(ds, [(1, 3, 'extra_value', 4), (1, 3, 'extra_value', 4)])
def test_custom_column_callable(self): G(SimpleDemoModel, n=2, char='abc', integer1=10, integer2=20) def _custom_callable(obj, ds): return obj.integer1 + 100 ds = Datasource.as_datasource(model=SimpleDemoModel, columns=[ Column('integer1'), Column('integer2'), ColumnCallable(_custom_callable) ]) self.assertSequenceEqual(ds, [(10, 20, 110), (10, 20, 110)])
def test_with_widget(): c = Column('user.first_name') r = RowValue('Test', column=c) assert with_widget(r) == 'Test' assert with_widget(r, format='foo') == 'Test' c = Column('normal', format="%Y-%m-%d") r = RowValue(datetime.date(2000, 1, 1), column=c) assert with_widget(r, format='xls') == datetime.date(2000, 1, 1) e = RowValueError('Test') assert with_widget(e) == 'Test' with pytest.raises(ValueError): with_widget('Wrong')
def test_currencywidget(): c = Column('normal') r = RowValue(1000.00, column=c) assert CurrencyWidget.render(r) == "1,000.00" r = RowValue(1000, column=c) assert CurrencyWidget.render(r) == "1,000.00"
def test_columnwidget(): c = Column('normal') r = RowValue('abc', column=c) assert ColumnWidget.render(r) == 'abc' r = RowValue(None, column=c) assert ColumnWidget.render(r) == ''
def test_timewidget(): c = Column('normal', format="%H:%M") r = RowValue(datetime.time(16, 20, 10), column=c) assert TimeWidget.render(r) == "16:20" r = RowValue(None, column=c) assert TimeWidget.render(r) == ""
def test_datewidget(): c = Column('normal', format="%Y-%m-%d") r = RowValue(datetime.date(2000, 1, 1), column=c) assert DateWidget.render(r) == "2000-01-01" r = RowValue(None, column=c) assert DateWidget.render(r) == ""
def test_col_to_css_class(): c = Column('user.first_name') r = RowValue('Test', column=c) assert col_to_css_class(r) == 'ereports_engine_columns_column' e = RowValueError('Test') assert col_to_css_class(e) == 'Test' with pytest.raises(ValueError): col_to_css_class('Wrong') ds = Datasource.as_datasource( model=User, queryset=FakeQuerySet( model=User, items=[User(username='******'), User(username='******')])) TestReport = type('TestReport', (BaseReport, ), { 'model': User, 'datasource': ds }) report = TestReport.as_report() assert col_to_css_class( report[0].username) == 'ereports_engine_columns_charcolumn' assert col_to_css_class( report[0]['username']) == 'ereports_engine_columns_charcolumn'
def test_pickle(self): import pickle value = 'val' c = Column('char') r = RowValue(value, column=c) p = pickle.dumps(r) up = pickle.loads(p) self.assertEqual(up.column, None)
def test_yesnowidget(): c = Column('normal') r = RowValue(True, column=c) assert YesNoWidget.render(r) == 'Yes' r = RowValue('abc', column=c) assert YesNoWidget.render(r) == 'Yes' r = RowValue(False, column=c) assert YesNoWidget.render(r) == 'No'
def test_with_widget(): c = Column('user.first_name') r = RowValue('Test', column=c) assert with_widget(r) == 'Test' e = RowValueError('Test') assert with_widget(e) == 'Test' with pytest.raises(ValueError): with_widget('Wrong')
def test_optional_column_optional(self): G(DemoOptionalModel, n=2, name='abc', user=None) ds = Datasource.as_datasource( model=DemoOptionalModel, columns=[Column('name'), OptionalColumn('user.first_name')]) self.assertSequenceEqual([c.title for c in ds.columns], ['name', 'first name']) self.assertSequenceEqual(ds, [( 'abc', '', ), ('abc', '')])
def test_percentwidget(): c = Column('normal') r = RowValue("10", column=c) assert PercentWidget.render(r) == "10 %" r = RowValue(10, column=c) assert PercentWidget.render(r) == "10 %" r = RowValue(10.0, column=c) assert PercentWidget.render(r) == "10.0 %" r = RowValue(10.01, column=c) assert PercentWidget.render(r) == "10.01 %"
def test_custom_filter(self): G(SimpleDemoModel, n=10, char='abc') ds = Datasource.as_datasource(model=SimpleDemoModel, columns=[Column('filter_source')]) ds._get_queryset = mock.Mock(wraps=ds._get_queryset) ds._create_result_cache = mock.Mock(wraps=ds._create_result_cache) def filter_odd(row): if not row.filter_source.value % 2: raise RecordFilteredError ds.add_custom_filter(filter_odd) list(ds) list(ds) self.assertSequenceEqual(ds, [(1, ), (3, ), (5, ), (7, ), (9, )]) assert ds._get_queryset.call_count == 1 assert ds._create_result_cache.call_count == 1
def test_title(self): title = 'AAA' c = Column('char', title=title) self.assertEqual(c.title, title) c = Column('char') self.assertEqual(c.title, "Char") c = Column('char', title="") self.assertEqual(c.title, "") c = Column('char', model="AAA") self.assertEqual(c.title, "Char") c = Column('char', model="AAA", title="") self.assertEqual(c.title, "") c = Column('name', model=DemoModel) self.assertEqual(c.title, 'Name') c = Column('user.first_name', model=DemoModelGroup) self.assertEqual(c.title, 'first name')
def test_manipulator(self): G(SimpleDemoModel, n=2, char='abc', integer1=1) ds = Datasource.as_datasource( model=SimpleDemoModel, columns=[Column('char', manipulator=lambda v: v.upper())]) self.assertSequenceEqual(ds, [(u'ABC', ), (u'ABC', )])
def test_get_value(self): o = SimpleDemoModel() ds = SimpleDemoModelSource.as_datasource() # model found return attr c = Column('char') v = c.get_value(o, ds) self.assertIsInstance(v, RowValue) # raise last ValueError c = Column('nonexistant') with self.assertRaises(ValueError): c.get_value(o, ds) # Exception with raise ValueError c = Column(FakeCallable, name='fake') with self.assertRaises(ValueError): c.get_value(o, ds)