[IMP] mis_builder: add a wide-coverage integration test
This reveals a couple of bugs!pull/189/head
parent
b45a346abb
commit
e34bd39f17
|
@ -229,6 +229,7 @@ class KpiMatrix(object):
|
|||
col = self._cols[col_key]
|
||||
cell_tuple = []
|
||||
assert len(vals) == col.colspan
|
||||
assert len(drilldown_args) == col.colspan
|
||||
for val, drilldown_arg, subcol in \
|
||||
izip(vals, drilldown_args, col.iter_subcols()):
|
||||
if isinstance(val, DataError):
|
||||
|
@ -266,6 +267,7 @@ class KpiMatrix(object):
|
|||
cell = KpiMatrixCell(row, subcol, val, val_rendered, val_comment,
|
||||
cell_style_props, drilldown_arg)
|
||||
cell_tuple.append(cell)
|
||||
assert len(cell_tuple) == col.colspan
|
||||
col._set_cell_tuple(row, cell_tuple)
|
||||
|
||||
def compute_comparisons(self):
|
||||
|
|
|
@ -298,7 +298,7 @@ class MisReportInstance(models.Model):
|
|||
|
||||
@api.multi
|
||||
def preview(self):
|
||||
assert len(self) == 1
|
||||
self.ensure_one()
|
||||
view_id = self.env.ref('mis_builder.'
|
||||
'mis_report_instance_result_view_form')
|
||||
return {
|
||||
|
|
|
@ -115,6 +115,9 @@ class MisBuilderXslx(ReportXlsx):
|
|||
cell_xlsx_style = style_obj.to_xlsx_style(cell.style_props)
|
||||
cell_xlsx_style['align'] = 'right'
|
||||
cell_format = workbook.add_format(cell_xlsx_style)
|
||||
if cell.val is None or cell.val is AccountingNone:
|
||||
val = ''
|
||||
else:
|
||||
val = cell.val / float(cell.style_props.get('divider', 1))
|
||||
sheet.write(row_pos, col_pos, val, cell_format)
|
||||
col_width[col_pos] = max(col_width[col_pos],
|
||||
|
|
|
@ -6,6 +6,7 @@ from . import test_accounting_none
|
|||
from . import test_aep
|
||||
from . import test_aggregate
|
||||
from . import test_fetch_query
|
||||
from . import test_mis_report_instance
|
||||
from . import test_mis_safe_eval
|
||||
from . import test_render
|
||||
from . import test_simple_array
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 ACSONE SA/NV (<http://acsone.eu>)
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import openerp.tests.common as common
|
||||
from openerp.tools import test_reports
|
||||
|
||||
|
||||
class TestMisReportInstance(common.TransactionCase):
|
||||
""" Basic integration test to exercise mis.report.instance.
|
||||
|
||||
We don't check the actual results here too much as computation correctness
|
||||
should be covered by lower level unit tests.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestMisReportInstance, self).setUp()
|
||||
partner_model_id = \
|
||||
self.env.ref('base.model_res_partner').id
|
||||
partner_create_date_field_id = \
|
||||
self.env.ref('base.field_res_partner_create_date').id
|
||||
partner_debit_field_id = \
|
||||
self.env.ref('account.field_res_partner_debit').id
|
||||
# create a report with 2 subkpis and one query
|
||||
self.report = self.env['mis.report'].create(dict(
|
||||
name='test report',
|
||||
subkpi_ids=[(0, 0, dict(
|
||||
name='sk1',
|
||||
description='subkpi 1',
|
||||
sequence=1,
|
||||
)), (0, 0, dict(
|
||||
name='sk2',
|
||||
description='subkpi 2',
|
||||
sequence=2,
|
||||
)),
|
||||
],
|
||||
query_ids=[(0, 0, dict(
|
||||
name='partner',
|
||||
model_id=partner_model_id,
|
||||
field_ids=[(4, partner_debit_field_id, None)],
|
||||
date_field=partner_create_date_field_id,
|
||||
aggregate='sum',
|
||||
)),
|
||||
],
|
||||
))
|
||||
# kpi with accounting formulas
|
||||
self.env['mis.report.kpi'].create(dict(
|
||||
report_id=self.report.id,
|
||||
description='kpi 1',
|
||||
name='k1',
|
||||
multi=True,
|
||||
expression_ids=[(0, 0, dict(
|
||||
name='bale[200%]',
|
||||
subkpi_id=self.report.subkpi_ids[0].id,
|
||||
)), (0, 0, dict(
|
||||
name='balp[200%]',
|
||||
subkpi_id=self.report.subkpi_ids[1].id,
|
||||
)),
|
||||
],
|
||||
))
|
||||
# kpi with accounting formula and query
|
||||
self.env['mis.report.kpi'].create(dict(
|
||||
report_id=self.report.id,
|
||||
description='kpi 2',
|
||||
name='k2',
|
||||
multi=True,
|
||||
expression_ids=[(0, 0, dict(
|
||||
name='balp[200%]',
|
||||
subkpi_id=self.report.subkpi_ids[0].id,
|
||||
)), (0, 0, dict(
|
||||
name='partner.debit',
|
||||
subkpi_id=self.report.subkpi_ids[1].id,
|
||||
)),
|
||||
],
|
||||
))
|
||||
# kpi with 2 constants
|
||||
self.env['mis.report.kpi'].create(dict(
|
||||
report_id=self.report.id,
|
||||
description='kpi 3',
|
||||
name='k3',
|
||||
multi=True,
|
||||
expression_ids=[(0, 0, dict(
|
||||
name='AccountingNone',
|
||||
subkpi_id=self.report.subkpi_ids[0].id,
|
||||
)), (0, 0, dict(
|
||||
name='1.0',
|
||||
subkpi_id=self.report.subkpi_ids[1].id,
|
||||
)),
|
||||
],
|
||||
))
|
||||
# kpi with a simple expression summing other multi-valued kpis
|
||||
self.env['mis.report.kpi'].create(dict(
|
||||
report_id=self.report.id,
|
||||
description='kpi 4',
|
||||
name='k4',
|
||||
multi=False,
|
||||
expression='k1 + k2 + k3',
|
||||
))
|
||||
# create a report instance
|
||||
self.report_instance = self.env['mis.report.instance'].create(dict(
|
||||
name='test instance',
|
||||
report_id=self.report.id,
|
||||
company_id=self.env.ref('base.main_company').id,
|
||||
period_ids=[(0, 0, dict(
|
||||
name='p1',
|
||||
mode='relative',
|
||||
type='d',
|
||||
subkpi_ids=[(4, self.report.subkpi_ids[0].id, None)],
|
||||
)), (0, 0, dict(
|
||||
name='p2',
|
||||
mode='fix',
|
||||
manual_date_from='2014-01-01',
|
||||
manual_date_to='2014-12-31',
|
||||
)),
|
||||
],
|
||||
))
|
||||
|
||||
def test_json(self):
|
||||
self.report_instance.compute()
|
||||
|
||||
def test_qweb(self):
|
||||
test_reports.try_report(self.env.cr, self.env.uid,
|
||||
'mis_builder.report_mis_report_instance',
|
||||
[self.report_instance.id],
|
||||
report_type='qweb-pdf')
|
||||
|
||||
def test_xlsx(self):
|
||||
test_reports.try_report(self.env.cr, self.env.uid,
|
||||
'mis.report.instance.xlsx',
|
||||
[self.report_instance.id],
|
||||
report_type='xlsx')
|
Loading…
Reference in New Issue