3
0
Fork 0

fix: add grid renderers for bool, currency, quantity

also set bool renderer by default when possible
This commit is contained in:
Lance Edgar 2025-01-02 20:13:04 -06:00
parent 08a895a07b
commit a612bf3846
2 changed files with 130 additions and 14 deletions

View file

@ -1,6 +1,7 @@
# -*- coding: utf-8; -*-
import datetime
import decimal
from unittest import TestCase
from unittest.mock import patch, MagicMock
@ -232,6 +233,17 @@ class TestGrid(WebTestCase):
self.assertIn('created', grid.renderers)
self.assertIs(grid.renderers['created'], myrender)
# renderer set for boolean mapped field
grid = self.make_grid(model_class=model.Upgrade)
self.assertIn('executing', grid.renderers)
self.assertIsNot(grid.renderers['executing'], myrender)
# renderer *not* set for boolean, if override present
grid = self.make_grid(model_class=model.Upgrade,
renderers={'executing': myrender})
self.assertIn('executing', grid.renderers)
self.assertIs(grid.renderers['executing'], myrender)
def test_linked_columns(self):
grid = self.make_grid(columns=['foo', 'bar'])
self.assertEqual(grid.linked_columns, [])
@ -1331,6 +1343,62 @@ class TestGrid(WebTestCase):
# rendering methods
##############################
def test_render_boolean(self):
grid = self.make_grid(columns=['foo', 'bar'])
# null
obj = MagicMock(foo=None)
self.assertEqual(grid.render_boolean(obj, 'foo', None), "")
# true
obj = MagicMock(foo=True)
self.assertEqual(grid.render_boolean(obj, 'foo', True), "Yes")
# false
obj = MagicMock(foo=False)
self.assertEqual(grid.render_boolean(obj, 'foo', False), "No")
def test_render_currency(self):
grid = self.make_grid(columns=['foo', 'bar'])
obj = MagicMock()
# null
self.assertEqual(grid.render_currency(obj, 'foo', None), '')
# basic decimal example
value = decimal.Decimal('42.00')
self.assertEqual(grid.render_currency(obj, 'foo', value), '$42.00')
# basic float example
value = 42.00
self.assertEqual(grid.render_currency(obj, 'foo', value), '$42.00')
# decimal places will be rounded
value = decimal.Decimal('42.12345')
self.assertEqual(grid.render_currency(obj, 'foo', value), '$42.12')
# negative numbers get parens
value = decimal.Decimal('-42.42')
self.assertEqual(grid.render_currency(obj, 'foo', value), '($42.42)')
def test_render_quantity(self):
grid = self.make_grid(columns=['foo', 'bar'])
obj = MagicMock()
# null
self.assertEqual(grid.render_quantity(obj, 'foo', None), "")
# integer decimals become integers
value = decimal.Decimal('1.000')
self.assertEqual(grid.render_quantity(obj, 'foo', value), "1")
# but decimal places are preserved
value = decimal.Decimal('1.234')
self.assertEqual(grid.render_quantity(obj ,'foo', value), "1.234")
# zero is *not* empty string (with this renderer)
self.assertEqual(grid.render_quantity(obj, 'foo', 0), "0")
def test_render_datetime(self):
grid = self.make_grid(columns=['foo', 'bar'])