From c9013298e0825b4c58c24234c85b93b8c66a0aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Wed, 8 Nov 2006 16:45:14 +0000 Subject: [PATCH] add tests for creating a related payment fix createEntities to create entities with correct categories ( setGroup('group/client') is a mistake ) fix setup to create transactions in a logical Debit Credit scheme git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@11210 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/tests/testAccounting.py | 118 +++++++++++++++++++++++++-- 1 file changed, 111 insertions(+), 7 deletions(-) diff --git a/product/ERP5/tests/testAccounting.py b/product/ERP5/tests/testAccounting.py index 4d310cf082..eb77ad2570 100644 --- a/product/ERP5/tests/testAccounting.py +++ b/product/ERP5/tests/testAccounting.py @@ -93,10 +93,23 @@ class TestAccounting(ERP5TypeTestCase): def afterSetUp(self): """Prepare the test.""" + self.portal = self.getPortal() + self.workflow_tool = self.portal.portal_workflow + self.organisation_module = self.portal.organisation_module + self.account_module = self.portal.account_module + self.accounting_module = self.portal.accounting_module self.createCategories() self.createCurrencies() self.createEntities() self.createAccounts() + + # setup preference for the vendor group + self.pref = self.portal.portal_preferences.newContent( + portal_type='Preference', preferred_section_category='group/vendor', + preferred_accounting_transaction_section_category='group/vendor', + priority=3 ) + self.workflow_tool.doActionFor(self.pref, 'enable_action') + self.login() def login(self) : @@ -131,11 +144,11 @@ class TestAccounting(ERP5TypeTestCase): def getNeededCategoryList(self): """Returns a list of categories that should be created.""" return ('group/client', 'group/vendor/sub1', 'group/vendor/sub2', - 'region/%s'%self.default_region, ) + 'payment_mode/check', 'region/%s' % self.default_region, ) def getBusinessTemplateList(self): """Returns list of BT to be installed.""" - return ('erp5_base', 'erp5_pdm', 'erp5_trade', 'erp5_accounting',) + return ('erp5_base', 'erp5_pdm', 'erp5_trade', 'erp5_accounting', ) def stepTic(self, **kw): """Flush activity queue. """ @@ -145,15 +158,15 @@ class TestAccounting(ERP5TypeTestCase): """Create entities. """ self.client = self.getOrganisationModule().newContent( portal_type = self.organisation_portal_type, - group = "group/client", + group = "client", price_currency = "currency_module/USD") self.vendor = self.getOrganisationModule().newContent( portal_type = self.organisation_portal_type, - group = "group/vendor/sub1", + group = "vendor/sub1", price_currency = "currency_module/EUR") self.other_vendor = self.getOrganisationModule().newContent( portal_type = self.organisation_portal_type, - group = "group/vendor/sub2", + group = "vendor/sub2", price_currency = "currency_module/EUR") # validate entities for entity in (self.client, self.vendor, self.other_vendor): @@ -727,7 +740,7 @@ class TestAccounting(ERP5TypeTestCase): income = transaction.newContent( id='income', portal_type=line_portal_type, - quantity=quantity, + quantity=-quantity, source_value=kw.get('income_account', self.income_account), destination_value=kw.get('expense_account', self.expense_account), ) @@ -737,7 +750,7 @@ class TestAccounting(ERP5TypeTestCase): receivable = transaction.newContent( id='receivable', portal_type=line_portal_type, - quantity=-quantity, + quantity=quantity, source_value=kw.get('receivable_account', self.receivable_account), destination_value=kw.get('payable_account', @@ -752,6 +765,20 @@ class TestAccounting(ERP5TypeTestCase): "Check consistency failed : %s" % transaction.checkConsistency()) return transaction + def test_createAccountingTransaction(self): + """Make sure acounting transactions created by createAccountingTransaction + method are valid. + """ + transaction = self.createAccountingTransaction() + self.assertEquals(self.vendor, transaction.getSourceSectionValue()) + self.assertEquals(self.client, transaction.getDestinationSectionValue()) + self.assertEquals(self.EUR, transaction.getResourceValue()) + self.failUnless(transaction.AccountingTransaction_isSourceView()) + + self.workflow_tool.doActionFor(transaction, 'stop_action') + self.assertEquals('stopped', transaction.getSimulationState()) + self.assertEquals([] , transaction.checkConsistency()) + def stepCreateValidAccountingTransaction(self, sequence, sequence_list=None, **kw) : """Creates a valid accounting transaction and put it in @@ -1334,7 +1361,84 @@ class TestAccounting(ERP5TypeTestCase): self.failIf(account.isCreditAccount()) account.edit(is_credit_account=True) self.failUnless(account.getProperty('is_credit_account')) + + + # tests for Invoice_createRelatedPaymentTransaction + def _checkRelatedSalePayment(self, invoice, payment, payment_node, quantity): + """Check payment of a Sale Invoice. + """ + eq = self.assertEquals + eq('Payment Transaction', payment.getPortalTypeName()) + eq([invoice], payment.getCausalityValueList()) + eq(invoice.getSourceSection(), payment.getSourceSection()) + eq(invoice.getDestinationSection(), payment.getDestinationSection()) + eq(payment_node, payment.getSourcePaymentValue()) + eq(self.getCategoryTool().payment_mode.check, + payment.getPaymentModeValue()) + # test lines + eq(2, len(payment.getMovementList())) + for line in payment.getMovementList(): + if line.getId() == 'bank': + eq(quantity, line.getSourceCredit()) + eq(self.bank_account, line.getSourceValue()) + else: + eq(quantity, line.getSourceDebit()) + eq(self.receivable_account, line.getSourceValue()) + # this transaction can be validated + eq([], payment.checkConsistency()) + self.workflow_tool.doActionFor(payment, 'stop_action') + self.assertEquals('stopped', payment.getSimulationState()) + + def test_Invoice_createRelatedPaymentTransactionSimple(self): + """Simple case of creating a related payment transaction. + """ + payment_node = self.vendor.newContent(portal_type='Bank Account') + invoice = self.createAccountingTransaction() + payment = invoice.Invoice_createRelatedPaymentTransaction( + node=self.bank_account.getRelativeUrl(), + payment=payment_node.getRelativeUrl(), + payment_mode='check', + batch_mode=1) + self._checkRelatedSalePayment(invoice, payment, payment_node, 100) + + def test_Invoice_createRelatedPaymentTransactionGroupedLines(self): + """Simple creating a related payment transaction when grouping reference of + some lines is already set. + """ + payment_node = self.vendor.newContent(portal_type='Bank Account') + invoice = self.createAccountingTransaction() + invoice.receivable.setSourceCredit(60) + invoice.newContent(id='receivable_groupped', + source_credit=40, + source_value=self.receivable_account) + invoice.receivable_groupped.setGroupingReference('A') + payment = invoice.Invoice_createRelatedPaymentTransaction( + node=self.bank_account.getRelativeUrl(), + payment=payment_node.getRelativeUrl(), + payment_mode='check', + batch_mode=1) + self._checkRelatedSalePayment(invoice, payment, payment_node, 60) + + def test_Invoice_createRelatedPaymentTransactionDifferentSection(self): + """Simple creating a related payment transaction when we have two line for + 2 different destination sections. + """ + payment_node = self.vendor.newContent(portal_type='Bank Account') + invoice = self.createAccountingTransaction() + invoice.receivable.setSourceCredit(60) + invoice.newContent(id='receivable_other_third_party', + destination_section_value=self.other_vendor, + source_credit=40, + source_value=self.receivable_account) + + payment = invoice.Invoice_createRelatedPaymentTransaction( + node=self.bank_account.getRelativeUrl(), + payment=payment_node.getRelativeUrl(), + payment_mode='check', + batch_mode=1) + self._checkRelatedSalePayment(invoice, payment, payment_node, 60) + if __name__ == '__main__': framework() else: -- 2.30.9