You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
6.4 KiB

  1. # -*- coding: utf-8 -*-
  2. # © 2016 ACSONE SA/NV (<http://acsone.eu>)
  3. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  4. import openerp.tests.common as common
  5. from ..models.accounting_none import AccountingNone
  6. class TestRendering(common.TransactionCase):
  7. def setUp(self):
  8. super(TestRendering, self).setUp()
  9. self.style_obj = self.env['mis.report.style']
  10. self.kpi_obj = self.env['mis.report.kpi']
  11. self.style = self.style_obj.create(dict(
  12. name='teststyle',
  13. ))
  14. self.kpi = self.kpi_obj.create(dict(
  15. name='testkpi',
  16. description='test kpi',
  17. type='num',
  18. style_id=self.style.id,
  19. ))
  20. self.lang = self.env['res.lang'].search([('code', '=', 'en_US')])[0]
  21. def _render(self, value):
  22. style_props = self.style_obj.merge([self.style])
  23. return self.kpi.render(self.lang, style_props, value)
  24. def _compare_and_render(self, value, base_value):
  25. style_props = self.style_obj.merge([self.style])
  26. return self.kpi.compare_and_render(self.lang, style_props,
  27. value, base_value)[:2]
  28. def test_render(self):
  29. self.assertEquals(u'1', self._render(1))
  30. self.assertEquals(u'1', self._render(1.1))
  31. self.assertEquals(u'2', self._render(1.6))
  32. self.style.dp_inherit = False
  33. self.style.dp = 2
  34. self.assertEquals(u'1.00', self._render(1))
  35. self.assertEquals(u'1.10', self._render(1.1))
  36. self.assertEquals(u'1.60', self._render(1.6))
  37. self.assertEquals(u'1.61', self._render(1.606))
  38. self.assertEquals(u'12,345.67', self._render(12345.67))
  39. def test_render_negative(self):
  40. # non breaking hyphen
  41. self.assertEquals(u'\u20111', self._render(-1))
  42. def test_render_zero(self):
  43. self.assertEquals(u'0', self._render(0))
  44. self.assertEquals(u'', self._render(None))
  45. self.assertEquals(u'', self._render(AccountingNone))
  46. def test_render_suffix(self):
  47. self.style.suffix_inherit = False
  48. self.style.suffix = u''
  49. self.assertEquals(u'1\xa0', self._render(1))
  50. self.style.suffix = u'k€'
  51. self.style.divider_inherit = False
  52. self.style.divider = '1e3'
  53. self.assertEquals(u'1\xa0k€', self._render(1000))
  54. def test_render_prefix(self):
  55. self.style.prefix_inherit = False
  56. self.style.prefix = u'$'
  57. self.assertEquals(u'$\xa01', self._render(1))
  58. self.style.prefix = u'k$'
  59. self.style.divider_inherit = False
  60. self.style.divider = '1e3'
  61. self.assertEquals(u'k$\xa01', self._render(1000))
  62. def test_render_divider(self):
  63. self.style.divider_inherit = False
  64. self.style.divider = '1e3'
  65. self.style.dp_inherit = False
  66. self.style.dp = 0
  67. self.assertEquals(u'1', self._render(1000))
  68. self.style.divider = '1e6'
  69. self.style.dp = 3
  70. self.assertEquals(u'0.001', self._render(1000))
  71. self.style.divider = '1e-3'
  72. self.style.dp = 0
  73. self.assertEquals(u'1,000', self._render(1))
  74. self.style.divider = '1e-6'
  75. self.style.dp = 0
  76. self.assertEquals(u'1,000,000', self._render(1))
  77. def test_render_pct(self):
  78. self.kpi.type = 'pct'
  79. self.assertEquals(u'100\xa0%', self._render(1))
  80. self.assertEquals(u'50\xa0%', self._render(0.5))
  81. self.style.dp_inherit = False
  82. self.style.dp = 2
  83. self.assertEquals(u'51.23\xa0%', self._render(0.5123))
  84. def test_render_string(self):
  85. self.kpi.type = 'str'
  86. self.assertEquals(u'', self._render(''))
  87. self.assertEquals(u'', self._render(None))
  88. self.assertEquals(u'abcdé', self._render(u'abcdé'))
  89. def test_compare_num_pct(self):
  90. self.assertEquals('pct', self.kpi.compare_method)
  91. self.assertEquals((1.0, u'+100.0\xa0%'),
  92. self._compare_and_render(100, 50))
  93. self.assertEquals((0.5, u'+50.0\xa0%'),
  94. self._compare_and_render(75, 50))
  95. self.assertEquals((0.5, u'+50.0\xa0%'),
  96. self._compare_and_render(-25, -50))
  97. self.assertEquals((1.0, u'+100.0\xa0%'),
  98. self._compare_and_render(0, -50))
  99. self.assertEquals((2.0, u'+200.0\xa0%'),
  100. self._compare_and_render(50, -50))
  101. self.assertEquals((-0.5, u'\u201150.0\xa0%'),
  102. self._compare_and_render(25, 50))
  103. self.assertEquals((-1.0, u'\u2011100.0\xa0%'),
  104. self._compare_and_render(0, 50))
  105. self.assertEquals((-2.0, u'\u2011200.0\xa0%'),
  106. self._compare_and_render(-50, 50))
  107. self.assertEquals((-0.5, u'\u201150.0\xa0%'),
  108. self._compare_and_render(-75, -50))
  109. self.assertEquals((AccountingNone, u''),
  110. self._compare_and_render(50, AccountingNone))
  111. self.assertEquals((AccountingNone, u''),
  112. self._compare_and_render(50, None))
  113. self.assertEquals((-1.0, u'\u2011100.0\xa0%'),
  114. self._compare_and_render(AccountingNone, 50))
  115. self.assertEquals((-1.0, u'\u2011100.0\xa0%'),
  116. self._compare_and_render(None, 50))
  117. def test_compare_num_diff(self):
  118. self.kpi.compare_method = 'diff'
  119. self.assertEquals((25, u'+25'),
  120. self._compare_and_render(75, 50))
  121. self.assertEquals((-25, u'\u201125'),
  122. self._compare_and_render(25, 50))
  123. self.style.suffix_inherit = False
  124. self.style.suffix = u''
  125. self.assertEquals((-25, u'\u201125\xa0'),
  126. self._compare_and_render(25, 50))
  127. self.style.suffix = u''
  128. self.assertEquals((50.0, u'+50'),
  129. self._compare_and_render(50, AccountingNone))
  130. self.assertEquals((50.0, u'+50'),
  131. self._compare_and_render(50, None))
  132. self.assertEquals((-50.0, u'\u201150'),
  133. self._compare_and_render(AccountingNone, 50))
  134. self.assertEquals((-50.0, u'\u201150'),
  135. self._compare_and_render(None, 50))
  136. def test_compare_pct(self):
  137. self.kpi.type = 'pct'
  138. self.assertEquals((0.25, u'+25\xa0pp'),
  139. self._compare_and_render(0.75, 0.50))