# -*- coding: utf-8; -*- from unittest import TestCase from unittest.mock import patch from pyramid import testing from wuttjamaican.conf import WuttaConfig from wuttaweb.grids import base from wuttaweb.forms import FieldList from tests.util import WebTestCase class TestGrid(WebTestCase): def make_grid(self, request=None, **kwargs): return base.Grid(request or self.request, **kwargs) def test_constructor(self): # empty grid = self.make_grid() self.assertIsNone(grid.key) self.assertEqual(grid.columns, []) self.assertIsNone(grid.data) # now with columns grid = self.make_grid(columns=['foo', 'bar']) self.assertIsInstance(grid.columns, FieldList) self.assertEqual(grid.columns, ['foo', 'bar']) def test_vue_tagname(self): grid = self.make_grid() self.assertEqual(grid.vue_tagname, 'wutta-grid') def test_vue_component(self): grid = self.make_grid() self.assertEqual(grid.vue_component, 'WuttaGrid') def test_get_columns(self): model = self.app.model # empty grid = self.make_grid() self.assertEqual(grid.columns, []) self.assertEqual(grid.get_columns(), []) # explicit grid = self.make_grid(columns=['foo', 'bar']) self.assertEqual(grid.columns, ['foo', 'bar']) self.assertEqual(grid.get_columns(), ['foo', 'bar']) # derived from model grid = self.make_grid(model_class=model.Setting) self.assertEqual(grid.columns, ['name', 'value']) self.assertEqual(grid.get_columns(), ['name', 'value']) def test_append(self): grid = self.make_grid(columns=['one', 'two']) self.assertEqual(grid.columns, ['one', 'two']) grid.append('one', 'two', 'three') self.assertEqual(grid.columns, ['one', 'two', 'three']) def test_remove(self): grid = self.make_grid(columns=['one', 'two', 'three', 'four']) self.assertEqual(grid.columns, ['one', 'two', 'three', 'four']) grid.remove('two', 'three') self.assertEqual(grid.columns, ['one', 'four']) def test_set_label(self): grid = self.make_grid(columns=['foo', 'bar']) self.assertEqual(grid.labels, {}) # basic grid.set_label('foo', "Foo Fighters") self.assertEqual(grid.labels['foo'], "Foo Fighters") # can replace label grid.set_label('foo', "Different") self.assertEqual(grid.labels['foo'], "Different") self.assertEqual(grid.get_label('foo'), "Different") def test_get_label(self): grid = self.make_grid(columns=['foo', 'bar']) self.assertEqual(grid.labels, {}) # default derived from key self.assertEqual(grid.get_label('foo'), "Foo") # can override grid.set_label('foo', "Different") self.assertEqual(grid.get_label('foo'), "Different") def test_set_renderer(self): grid = self.make_grid(columns=['foo', 'bar']) self.assertEqual(grid.renderers, {}) def render1(record, key, value): pass # basic grid.set_renderer('foo', render1) self.assertIs(grid.renderers['foo'], render1) def render2(record, key, value, extra=None): return extra # can pass kwargs to get a partial grid.set_renderer('foo', render2, extra=42) self.assertIsNot(grid.renderers['foo'], render2) self.assertEqual(grid.renderers['foo'](None, None, None), 42) def test_linked_columns(self): grid = self.make_grid(columns=['foo', 'bar']) self.assertEqual(grid.linked_columns, []) self.assertFalse(grid.is_linked('foo')) grid.set_link('foo') self.assertEqual(grid.linked_columns, ['foo']) self.assertTrue(grid.is_linked('foo')) self.assertFalse(grid.is_linked('bar')) grid.set_link('bar') self.assertEqual(grid.linked_columns, ['foo', 'bar']) self.assertTrue(grid.is_linked('foo')) self.assertTrue(grid.is_linked('bar')) grid.set_link('foo', False) self.assertEqual(grid.linked_columns, ['bar']) self.assertFalse(grid.is_linked('foo')) self.assertTrue(grid.is_linked('bar')) def test_get_pagesize_options(self): grid = self.make_grid() # default options = grid.get_pagesize_options() self.assertEqual(options, [5, 10, 20, 50, 100, 200]) # override default options = grid.get_pagesize_options(default=[42]) self.assertEqual(options, [42]) # from config self.config.setdefault('wuttaweb.grids.default_pagesize_options', '1 2 3') options = grid.get_pagesize_options() self.assertEqual(options, [1, 2, 3]) def test_get_pagesize(self): grid = self.make_grid() # default size = grid.get_pagesize() self.assertEqual(size, 20) # override default size = grid.get_pagesize(default=42) self.assertEqual(size, 42) # override default options self.config.setdefault('wuttaweb.grids.default_pagesize_options', '10 15 30') grid = self.make_grid() size = grid.get_pagesize() self.assertEqual(size, 10) # from config self.config.setdefault('wuttaweb.grids.default_pagesize', '15') size = grid.get_pagesize() self.assertEqual(size, 15) def test_render_vue_tag(self): grid = self.make_grid(columns=['foo', 'bar']) html = grid.render_vue_tag() self.assertEqual(html, '') def test_render_vue_template(self): self.pyramid_config.include('pyramid_mako') self.pyramid_config.add_subscriber('wuttaweb.subscribers.before_render', 'pyramid.events.BeforeRender') grid = self.make_grid(columns=['foo', 'bar']) html = grid.render_vue_template() self.assertIn('