[Erp5-report] r13332 - /erp5/trunk/products/ERP5/tests/testAccountingReports.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Mar 12 10:30:29 CET 2007
Author: jerome
Date: Mon Mar 12 10:30:27 2007
New Revision: 13332
URL: http://svn.erp5.org?rev=13332&view=rev
Log:
Add tests for account statement report
Modified:
erp5/trunk/products/ERP5/tests/testAccountingReports.py
Modified: erp5/trunk/products/ERP5/tests/testAccountingReports.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testAccountingReports.py?rev=13332&r1=13331&r2=13332&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testAccountingReports.py (original)
+++ erp5/trunk/products/ERP5/tests/testAccountingReports.py Mon Mar 12 10:30:27 2007
@@ -38,7 +38,17 @@
class TestAccountingReports(AccountingTestCase):
- """Test Accounting reports"""
+ """Test Accounting reports
+
+ Test basic cases of gathering data to render reports, the purpose of those
+ tests is to exercise basic reporting features to make sure no regression
+ happen. Input data used for tests usually contain edge cases, for example:
+ * movements at the boundaries of the period.
+ * movements with other simulation states.
+ * movements with node in the section_category we want to exclude (Persons).
+ * movements with source & destination for other sections.
+ ...
+ """
# utility methods for ERP5 Report
def getReportSectionList(self, report_name):
@@ -62,7 +72,13 @@
report_section.popReport(self.portal)
return result
-
+ def checkLineProperties(self, line, **kw):
+ """Check properties of a report line.
+ """
+ for k, v in kw.items():
+ self.assertEquals(v, line.getColumnProperty(k),
+ '`%s`: expected: %r actual: %r' % (k, v, line.getColumnProperty(k)))
+
def testJournal(self):
# Journal report.
# this will be a journal for 2006/02/02, for Sale Invoice Transaction
@@ -368,6 +384,378 @@
self.assertEquals(100, stat_line.getColumnProperty('credit'))
+ def createAccountStatementDataSet(self):
+ """Create transactions for Account statement report.
+ """
+ account_module = self.account_module
+
+ bank1 = self.section.newContent(portal_type='Bank Account')
+ bank1.validate()
+
+ # before
+ t1 = self._makeOne(
+ portal_type='Accounting Transaction',
+ title='Transaction 1',
+ source_reference='1',
+ simulation_state='delivered',
+ destination_section_value=self.organisation_module.client_1,
+ start_date=DateTime(2006, 2, 1),
+ lines=(dict(source_value=account_module.receivable,
+ source_debit=100.0),
+ dict(source_value=account_module.payable,
+ source_credit=100.0)))
+
+ t2 = self._makeOne(
+ portal_type='Accounting Transaction',
+ title='Transaction 2',
+ source_reference='2',
+ simulation_state='delivered',
+ destination_section_value=self.organisation_module.client_1,
+ start_date=DateTime(2006, 2, 1, 0, 1),
+ lines=(dict(source_value=account_module.payable,
+ source_debit=200.0),
+ dict(source_value=account_module.receivable,
+ source_credit=200.0)))
+
+ # in the period
+ t3 = self._makeOne(
+ portal_type='Payment Transaction',
+ title='Transaction 3',
+ source_reference='3',
+ simulation_state='delivered',
+ source_payment_value=bank1,
+ destination_section_value=self.organisation_module.client_1,
+ start_date=DateTime(2006, 2, 2, 0, 2),
+ lines=(dict(source_value=account_module.receivable,
+ source_debit=300.0),
+ dict(source_value=account_module.bank,
+ source_credit=300.0)))
+
+ t4 = self._makeOne(
+ portal_type='Payment Transaction',
+ title='Transaction 4',
+ destination_reference='4',
+ simulation_state='delivered',
+ destination_section_value=self.section,
+ destination_payment_value=bank1,
+ source_section_value=self.organisation_module.client_2,
+ stop_date=DateTime(2006, 2, 2, 0, 3),
+ start_date=DateTime(2006, 2, 1),
+ lines=(dict(destination_value=account_module.receivable,
+ destination_debit=400.0),
+ dict(destination_value=account_module.bank,
+ destination_credit=400.0)))
+
+ t5 = self._makeOne(
+ portal_type='Accounting Transaction',
+ title='Transaction 5',
+ source_reference='5',
+ simulation_state='delivered',
+ destination_section_value=self.person_module.john_smith,
+ start_date=DateTime(2006, 2, 2, 0, 4),
+ lines=(dict(source_value=account_module.receivable,
+ source_debit=500.0),
+ dict(source_value=account_module.bank,
+ source_credit=500.0)))
+
+ t6 = self._makeOne(
+ portal_type='Purchase Invoice Transaction',
+ title='Transaction 6',
+ destination_reference='6',
+ simulation_state='delivered',
+ source_section_value=self.organisation_module.client_1,
+ stop_date=DateTime(2006, 2, 2, 0, 5),
+ lines=(dict(destination_value=account_module.receivable,
+ destination_debit=600.0),
+ dict(destination_value=account_module.bank,
+ destination_credit=600.0)))
+
+ # another simulation state
+ t7 = self._makeOne(
+ portal_type='Accounting Transaction',
+ title='Transaction 7',
+ source_reference='7',
+ simulation_state='stopped',
+ destination_section_value=self.organisation_module.client_1,
+ start_date=DateTime(2006, 2, 2, 0, 6),
+ lines=(dict(source_value=account_module.receivable,
+ source_debit=700.0),
+ dict(source_value=account_module.bank,
+ source_credit=700.0)))
+
+ # after the period
+ t8 = self._makeOne(
+ portal_type='Accounting Transaction',
+ title='Transaction 8',
+ source_reference='8',
+ simulation_state='delivered',
+ destination_section_value=self.organisation_module.client_1,
+ start_date=DateTime(2006, 2, 3),
+ lines=(dict(source_value=account_module.receivable,
+ source_debit=800.0),
+ dict(source_value=account_module.bank,
+ source_credit=800.0)))
+
+ return bank1, (t1, t2, t3, t4, t5, t6, t7, t8)
+
+
+ def testAccountStatement(self):
+ # Simple Account Statement for "Receivable" account
+ self.createAccountStatementDataSet()
+
+ # set request variables and render
+ request_form = self.portal.REQUEST.form
+ request_form['node'] = \
+ self.portal.account_module.receivable.getRelativeUrl()
+ request_form['at_date'] = DateTime(2006, 2, 2)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['simulation_state'] = ['delivered']
+
+ report_section_list = self.getReportSectionList(
+ 'AccountModule_viewAccountStatementReport')
+ self.assertEquals(1, len(report_section_list))
+
+ # precision is set in the REQUEST (so that fields know how to format)
+ precision = self.portal.REQUEST.get('precision')
+ self.assertEquals(2, precision)
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 6 transactions, because 7th is after
+ self.assertEquals(6, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['Movement_getSpecificReference', 'date',
+ 'Movement_getExplanationTitle', 'Movement_getMirrorSectionTitle',
+ 'debit', 'credit', 'running_total_price'])
+
+ self.checkLineProperties(data_line_list[0],
+ Movement_getSpecificReference='1',
+ date=DateTime(2006, 2, 1),
+ Movement_getExplanationTitle='Transaction 1',
+ Movement_getMirrorSectionTitle='Client 1',
+ debit=100,
+ credit=0,
+ running_total_price=100)
+
+ self.checkLineProperties(data_line_list[1],
+ Movement_getSpecificReference='2',
+ date=DateTime(2006, 2, 1, 0, 1),
+ Movement_getExplanationTitle='Transaction 2',
+ Movement_getMirrorSectionTitle='Client 1',
+ debit=0,
+ credit=200,
+ running_total_price=-100)
+
+ self.checkLineProperties(data_line_list[2],
+ Movement_getSpecificReference='3',
+ date=DateTime(2006, 2, 2, 0, 2),
+ Movement_getExplanationTitle='Transaction 3',
+ Movement_getMirrorSectionTitle='Client 1',
+ debit=300,
+ credit=0,
+ running_total_price=200)
+
+ self.checkLineProperties(data_line_list[3],
+ Movement_getSpecificReference='4',
+ date=DateTime(2006, 2, 2, 0, 3),
+ Movement_getExplanationTitle='Transaction 4',
+ Movement_getMirrorSectionTitle='Client 2',
+ debit=400,
+ credit=0,
+ running_total_price=600)
+
+ self.checkLineProperties(data_line_list[4],
+ Movement_getSpecificReference='5',
+ date=DateTime(2006, 2, 2, 0, 4),
+ Movement_getExplanationTitle='Transaction 5',
+ Movement_getMirrorSectionTitle='John Smith',
+ debit=500,
+ credit=0,
+ running_total_price=1100)
+
+ self.checkLineProperties(data_line_list[5],
+ Movement_getSpecificReference='6',
+ date=DateTime(2006, 2, 2, 0, 5),
+ Movement_getExplanationTitle='Transaction 6',
+ Movement_getMirrorSectionTitle='Client 1',
+ debit=600,
+ credit=0,
+ running_total_price=1700)
+
+ self.failUnless(line_list[-1].isStatLine())
+ self.checkLineProperties(line_list[-1],
+ Movement_getSpecificReference=None,
+ date=None,
+ Movement_getExplanationTitle=None,
+ Movement_getMirrorSectionTitle=None,
+ debit=1900,
+ credit=200,
+ running_total_price=None)
+
+
+ def testAccountStatementFromDateSummary(self):
+ # A from date summary shows balance at the beginning of the period
+ self.createAccountStatementDataSet()
+
+ # set request variables and render
+ request_form = self.portal.REQUEST.form
+ request_form['node'] = \
+ self.portal.account_module.receivable.getRelativeUrl()
+ request_form['from_date'] = DateTime(2006, 2, 2)
+ request_form['at_date'] = DateTime(2006, 2, 2)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['simulation_state'] = ['delivered']
+
+ report_section_list = self.getReportSectionList(
+ 'AccountModule_viewAccountStatementReport')
+ self.assertEquals(1, len(report_section_list))
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 1 summary line and 4 transactions
+ self.assertEquals(5, len(data_line_list))
+
+ self.checkLineProperties(data_line_list[0],
+ Movement_getSpecificReference='Previous Balance',
+ date=DateTime(2006, 2, 2),
+ Movement_getExplanationTitle='',
+ Movement_getMirrorSectionTitle='',
+ debit=100,
+ credit=200,
+ running_total_price=-100)
+
+ self.checkLineProperties(data_line_list[1],
+ Movement_getSpecificReference='3',
+ date=DateTime(2006, 2, 2, 0, 2),
+ Movement_getExplanationTitle='Transaction 3',
+ Movement_getMirrorSectionTitle='Client 1',
+ debit=300,
+ credit=0,
+ running_total_price=200)
+
+ self.checkLineProperties(data_line_list[2],
+ Movement_getSpecificReference='4',
+ date=DateTime(2006, 2, 2, 0, 3),
+ Movement_getExplanationTitle='Transaction 4',
+ Movement_getMirrorSectionTitle='Client 2',
+ debit=400,
+ credit=0,
+ running_total_price=600)
+
+ self.checkLineProperties(data_line_list[3],
+ Movement_getSpecificReference='5',
+ date=DateTime(2006, 2, 2, 0, 4),
+ Movement_getExplanationTitle='Transaction 5',
+ Movement_getMirrorSectionTitle='John Smith',
+ debit=500,
+ credit=0,
+ running_total_price=1100)
+
+ self.checkLineProperties(data_line_list[4],
+ Movement_getSpecificReference='6',
+ date=DateTime(2006, 2, 2, 0, 5),
+ Movement_getExplanationTitle='Transaction 6',
+ Movement_getMirrorSectionTitle='Client 1',
+ debit=600,
+ credit=0,
+ running_total_price=1700)
+
+ self.failUnless(line_list[-1].isStatLine())
+ self.checkLineProperties(line_list[-1], debit=1900, credit=200,)
+
+
+ def testAccountStatementFromDateSummaryEmpty(self):
+ # A from date summary shows balance at the beginning of the period, but
+ # avoids showing a '0' line
+ self.createAccountStatementDataSet()
+
+ # set request variables and render
+ request_form = self.portal.REQUEST.form
+ request_form['node'] = \
+ self.portal.account_module.receivable.getRelativeUrl()
+ request_form['from_date'] = DateTime(2000, 2, 2)
+ request_form['at_date'] = DateTime(2006, 2, 2)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['simulation_state'] = ['delivered']
+
+ report_section_list = self.getReportSectionList(
+ 'AccountModule_viewAccountStatementReport')
+ self.assertEquals(1, len(report_section_list))
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ self.assertNotEquals('Previous Balance',
+ data_line_list[0].getColumnProperty('Movement_getSpecificReference'))
+
+
+ def testAccountStatementMirrorSection(self):
+ # 'Mirror Section' parameter is taken into account.
+ self.createAccountStatementDataSet()
+
+ # set request variables and render
+ request_form = self.portal.REQUEST.form
+ request_form['node'] = \
+ self.portal.account_module.receivable.getRelativeUrl()
+ request_form['mirror_section'] = \
+ self.portal.organisation_module.client_2.getRelativeUrl()
+ request_form['from_date'] = DateTime(2006, 2, 2)
+ request_form['at_date'] = DateTime(2006, 2, 2)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['simulation_state'] = ['delivered']
+
+ report_section_list = self.getReportSectionList(
+ 'AccountModule_viewAccountStatementReport')
+ self.assertEquals(1, len(report_section_list))
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ self.assertEquals(1, len(data_line_list))
+
+ self.checkLineProperties(data_line_list[0],
+ Movement_getSpecificReference='4',
+ date=DateTime(2006, 2, 2, 0, 3),
+ Movement_getExplanationTitle='Transaction 4',
+ Movement_getMirrorSectionTitle='Client 2',
+ debit=400,
+ credit=0,
+ running_total_price=400)
+
+ self.failUnless(line_list[-1].isStatLine())
+ self.checkLineProperties(line_list[-1], debit=400, credit=0)
+
+
+ def testAccountStatementSimulationState(self):
+ # Simulation State parameter is taken into account.
+ self.createAccountStatementDataSet()
+
+ # set request variables and render
+ request_form = self.portal.REQUEST.form
+ request_form['node'] = \
+ self.portal.account_module.receivable.getRelativeUrl()
+ request_form['at_date'] = DateTime(2006, 2, 2)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['simulation_state'] = ['stopped', 'confirmed']
+
+ report_section_list = self.getReportSectionList(
+ 'AccountModule_viewAccountStatementReport')
+ self.assertEquals(1, len(report_section_list))
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ self.assertEquals(1, len(data_line_list))
+
+ self.checkLineProperties(data_line_list[0],
+ Movement_getSpecificReference='7',
+ date=DateTime(2006, 2, 2, 0, 6),
+ Movement_getExplanationTitle='Transaction 7',
+ Movement_getMirrorSectionTitle='Client 1',
+ debit=700,
+ credit=0,
+ running_total_price=700)
+
+ self.failUnless(line_list[-1].isStatLine())
+ self.checkLineProperties(line_list[-1], debit=700, credit=0)
+
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestAccountingReports))
More information about the Erp5-report
mailing list