From 313ae51eeded5258e2357fc897ec4b9932e6c23f Mon Sep 17 00:00:00 2001 From: Mame Coumba Sall <mame@nexedi.com> Date: Fri, 12 Dec 2008 15:19:50 +0000 Subject: [PATCH] add tests for empty CEL, CEL with no base price and CEL with no reference currency git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@24878 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../tests/testERP5CurrencyExchangeLine.py | 351 ++++++++++++++---- 1 file changed, 289 insertions(+), 62 deletions(-) diff --git a/product/ERP5/tests/testERP5CurrencyExchangeLine.py b/product/ERP5/tests/testERP5CurrencyExchangeLine.py index 5c45703185..0c24553acf 100644 --- a/product/ERP5/tests/testERP5CurrencyExchangeLine.py +++ b/product/ERP5/tests/testERP5CurrencyExchangeLine.py @@ -78,7 +78,8 @@ class TestERP5CurrencyMixin(AccountingTestCase,ERP5TypeTestCase): def login(self,name=username, quiet=0, run=run_all_test): uf = self.getPortal().acl_users - uf._doAddUser(self.username, '', ['Assignee', 'Assignor', 'Author'], []) + uf._doAddUser(self.username, '', ['Assignee', 'Assignor', + 'Author','Manager'], []) user = uf.getUserById(self.username).__of__(uf) newSecurityManager(None, user) @@ -126,58 +127,140 @@ class TestERP5CurrencyMixin(AccountingTestCase,ERP5TypeTestCase): def test_01_UseCurrencyExchangeLineForDestination(self, quiet=0, run=run_all_test): """ - Create a currency exchange line for a currency and then convert - destination price using that currency exchange line + Create a currency exchange line for a currency and then + convert destination price using that currency exchange line """ if not run: return - if not quiet:printAndLog('test_01_UseCurrencyExchangeLineForDestination') + if not quiet: + printAndLog('test_01_UseCurrencyExchangeLineForDestination') portal = self.getPortal() self.organisation_module = self.portal.organisation_module self.organisation1 = self.organisation_module.my_organisation - new_currency = portal.currency_module.newContent(portal_type='Currency') + new_currency = portal.currency_module.newContent( + portal_type='Currency') new_currency.setReference('XOF') new_currency.setTitle('Francs CFA') new_currency.setBaseUnitQuantity(1.00) get_transaction().commit() self.tic()#execute transaction - self.organisation1.edit(price_currency=new_currency.getRelativeUrl()) + self.organisation1.edit( + price_currency=new_currency.getRelativeUrl()) euro = self.portal.currency_module.euro x_curr_ex_line = euro.newContent( - portal_type='Currency Exchange Line', - price_currency=new_currency.getRelativeUrl()) + portal_type='Currency Exchange Line', + price_currency=new_currency.getRelativeUrl()) x_curr_ex_line.setTitle('Euro to Francs CFA') x_curr_ex_line.setBasePrice(655.957) x_curr_ex_line.setStartDate(DateTime(2008,9,8)) - self.assertEquals(x_curr_ex_line.getTitle(), 'Euro to Francs CFA') - self.assertEquals(x_curr_ex_line.getPriceCurrencyTitle(),'Francs CFA') + x_curr_ex_line.setStopDate(DateTime(2008,9,10)) + self.assertEquals(x_curr_ex_line.getTitle(), + 'Euro to Francs CFA') + self.assertEquals(x_curr_ex_line.getPriceCurrencyTitle(), + 'Francs CFA') self.assertEquals(x_curr_ex_line.getBasePrice(),655.957) x_curr_ex_line.validate() - self.assertEquals(x_curr_ex_line.getValidationState(),'validated') + self.assertEquals(x_curr_ex_line.getValidationState(), + 'validated') accounting_module = self.portal.accounting_module transaction = self._makeOne( portal_type='Purchase Invoice Transaction', stop_date=DateTime('2008/09/08'), - source_section_value=self.organisation_module.supplier, + source_section_value=self.organisation_module.supplier, lines=(dict( - destination_value=self.account_module.goods_purchase, + destination_value=self.account_module.goods_purchase, destination_debit=500), - dict(destination_value=self.account_module.receivable, + dict(destination_value=self.account_module.receivable, destination_credit=500))) transaction.AccountingTransaction_convertDestinationPrice(form_id='view') line_list = transaction.contentValues( - portal_type=portal.getPortalAccountingMovementTypeList()) + portal_type=portal.getPortalAccountingMovementTypeList()) for line in line_list: - self.assertEquals(line.getDestinationTotalAssetPrice(),round(655.957* - line.getQuantity())) - + self.assertEquals(line.getDestinationTotalAssetPrice(), + round(655.957*line.getQuantity())) + + + def test_01_CreateEmptyCurrencyExchangeLineForDestination( + self, quiet=0,run=run_all_test): + """ + Create empty currency exchange lines for currencies, + and verify that only the one that matches the criteria will + be selected for the conversion + """ + if not run: return + if not quiet: + printAndLog( + 'test_01_CreateEmptyCurrencyExchangeLineForDestination') + portal = self.getPortal() + self.organisation_module = self.portal.organisation_module + self.organisation1 = self.organisation_module.my_organisation + new_currency = portal.currency_module.newContent( + portal_type='Currency') + new_currency.setReference('XOF') + new_currency.setTitle('Francs CFA') + new_currency.setBaseUnitQuantity(1.00) + get_transaction().commit() + self.tic()#execute transaction + self.organisation1.edit( + price_currency=new_currency.getRelativeUrl()) + euro = self.portal.currency_module.euro + x_curr_ex_line = euro.newContent( + portal_type='Currency Exchange Line', + price_currency=new_currency.getRelativeUrl()) + x_curr_ex_line.setTitle('Euro to Francs CFA') + x_curr_ex_line.setBasePrice(655.957) + x_curr_ex_line.setStartDate(DateTime(2008,9,8)) + x_curr_ex_line.setStopDate(DateTime(2008,9,10)) + self.assertEquals(x_curr_ex_line.getTitle(), + 'Euro to Francs CFA') + self.assertEquals(x_curr_ex_line.getPriceCurrencyTitle(), + 'Francs CFA') + self.assertEquals(x_curr_ex_line.getBasePrice(),655.957) + x_curr_ex_line.validate() + self.assertEquals(x_curr_ex_line.getValidationState(), + 'validated') + yen = self.portal.currency_module.yen + yen_line1 = yen.newContent( + portal_type='Currency Exchange Line') + yen_line2 = yen.newContent( + portal_type='Currency Exchange Line') + + usd = self.portal.currency_module.usd + usd_line1 = usd.newContent( + portal_type='Currency Exchange Line') + usd_line2 = usd.newContent( + portal_type='Currency Exchange Line') + + euro_line = euro.newContent( + portal_type='Currency Exchange Line') + euro_line.validate() + accounting_module = self.portal.accounting_module + transaction = self._makeOne( + portal_type='Purchase Invoice Transaction', + stop_date=DateTime('2008/09/08'), + source_section_value=self.organisation_module.supplier, + lines=(dict( + destination_value=self.account_module.goods_purchase, + destination_debit=500), + dict(destination_value=self.account_module.receivable, + destination_credit=500))) + transaction.AccountingTransaction_convertDestinationPrice( + form_id='view') + line_list = transaction.contentValues( + portal_type=portal.getPortalAccountingMovementTypeList()) + for line in line_list: + self.assertEquals(line.getDestinationTotalAssetPrice(), + round(655.957*line.getQuantity())) + def test_01_UseCurrencyExchangeLineForSource(self, quiet=0, run=run_all_test): """ - Create a currency exchange line for a currency and then convert + Create a currency exchange line for a currency and then + convert source price using that currency exchange line """ if not run: return - if not quiet:printAndLog('test_01_UseCurrencyExchangeLineForSource') + if not quiet: + printAndLog('test_01_UseCurrencyExchangeLineForSource') portal = self.getPortal() self.organisation_module = self.portal.organisation_module self.organisation1 = self.organisation_module.my_organisation @@ -187,34 +270,40 @@ class TestERP5CurrencyMixin(AccountingTestCase,ERP5TypeTestCase): new_currency.setBaseUnitQuantity(1.00) get_transaction().commit() self.tic()#execute transaction - self.organisation1.edit(price_currency=new_currency.getRelativeUrl()) + self.organisation1.edit( + price_currency=new_currency.getRelativeUrl()) euro = self.portal.currency_module.euro x_curr_ex_line = euro.newContent( - portal_type='Currency Exchange Line', - price_currency=new_currency.getRelativeUrl()) + portal_type='Currency Exchange Line', + price_currency=new_currency.getRelativeUrl()) x_curr_ex_line.setTitle('Euro to Francs CFA') x_curr_ex_line.setBasePrice(655.957) x_curr_ex_line.setStartDate(DateTime(2008,9,8)) - self.assertEquals(x_curr_ex_line.getTitle(), 'Euro to Francs CFA') - self.assertEquals(x_curr_ex_line.getPriceCurrencyTitle(),'Francs CFA') + x_curr_ex_line.setStopDate(DateTime(2008,9,10)) + self.assertEquals(x_curr_ex_line.getTitle(), + 'Euro to Francs CFA') + self.assertEquals(x_curr_ex_line.getPriceCurrencyTitle(), + 'Francs CFA') self.assertEquals(x_curr_ex_line.getBasePrice(),655.957) x_curr_ex_line.validate() - self.assertEquals(x_curr_ex_line.getValidationState(),'validated') + self.assertEquals(x_curr_ex_line.getValidationState(), + 'validated') accounting_module = self.portal.accounting_module transaction = self._makeOne( portal_type='Sale Invoice Transaction', start_date=DateTime('2008/09/08'), - destination_section_value=self.organisation_module.supplier, - lines=(dict(source_value=self.account_module.goods_purchase, + destination_section_value=self.organisation_module.supplier, + lines=(dict(source_value=self.account_module.goods_purchase, source_debit=500), - dict(source_value=self.account_module.receivable, + dict(source_value=self.account_module.receivable, source_credit=500))) - transaction.AccountingTransaction_convertSourcePrice(form_id='view') + transaction.AccountingTransaction_convertSourcePrice( + form_id='view') line_list = transaction.contentValues( - portal_type=portal.getPortalAccountingMovementTypeList()) + portal_type=portal.getPortalAccountingMovementTypeList()) for line in line_list: - self.assertEquals(line.getSourceTotalAssetPrice(),round(655.957* - line.getQuantity())) + self.assertEquals(line.getSourceTotalAssetPrice(), + round(655.957*line.getQuantity())) def test_01_NoCurrencyExchangeLineForResourceCurrency(self, quiet=0, run=run_all_test): @@ -223,31 +312,35 @@ class TestERP5CurrencyMixin(AccountingTestCase,ERP5TypeTestCase): exchange line defined for the date of the transaction """ if not run: return - if not quiet:printAndLog('test_01_NoCurrencyExchangeLineForResource') + if not quiet: + printAndLog('test_01_NoCurrencyExchangeLineForResource') portal = self.getPortal() self.organisation_module = self.portal.organisation_module self.organisation1 = self.organisation_module.my_organisation - new_currency = portal.currency_module.newContent(portal_type='Currency') + new_currency = portal.currency_module.newContent( + portal_type='Currency') new_currency.setReference('XOF') new_currency.setTitle('Francs CFA') new_currency.setBaseUnitQuantity(1.00) get_transaction().commit() self.tic()#execute transaction - self.organisation1.edit(price_currency=new_currency.getRelativeUrl()) + self.organisation1.edit( + price_currency=new_currency.getRelativeUrl()) euro = self.portal.currency_module.euro accounting_module = self.portal.accounting_module transaction = self._makeOne( portal_type='Purchase Invoice Transaction', stop_date=DateTime('2008/09/08'), - source_section_value=self.organisation_module.supplier, + source_section_value=self.organisation_module.supplier, lines=(dict( - destination_value=self.account_module.goods_purchase, + destination_value=self.account_module.goods_purchase, destination_debit=500), - dict(destination_value=self.account_module.receivable, + dict(destination_value=self.account_module.receivable, destination_credit=500))) - transaction.AccountingTransaction_convertDestinationPrice(form_id='view') + transaction.AccountingTransaction_convertDestinationPrice( + form_id='view') line_list = transaction.contentValues( - portal_type=portal.getPortalAccountingMovementTypeList()) + portal_type=portal.getPortalAccountingMovementTypeList()) for line in line_list: self.assertEquals(line.getDestinationTotalAssetPrice(),None) @@ -262,60 +355,194 @@ class TestERP5CurrencyMixin(AccountingTestCase,ERP5TypeTestCase): """ if not run: return if not quiet: - printAndLog('test_01_DateOfCurrencyExchangeLineNotDateofTransaction') + printAndLog( + 'test_01_DateOfCurrencyExchangeLineNotDateofTransaction') portal = self.getPortal() self.organisation_module = self.portal.organisation_module self.organisation1 = self.organisation_module.my_organisation - new_currency = portal.currency_module.newContent(portal_type='Currency') + new_currency = portal.currency_module.newContent( + portal_type='Currency') new_currency.setReference('XOF') new_currency.setTitle('Francs CFA') new_currency.setBaseUnitQuantity(1.00) get_transaction().commit() self.tic()#execute transaction - self.organisation1.edit(price_currency=new_currency.getRelativeUrl()) + self.organisation1.edit( + price_currency=new_currency.getRelativeUrl()) euro = self.portal.currency_module.euro x_curr_ex_line = euro.newContent( - portal_type='Currency Exchange Line', - price_currency=new_currency.getRelativeUrl()) + portal_type='Currency Exchange Line', + price_currency=new_currency.getRelativeUrl()) x_curr_ex_line.setTitle('Euro to Francs CFA') x_curr_ex_line.setBasePrice(655.957) x_curr_ex_line.setStartDate(DateTime(2008,9,6)) x_curr_ex_line.setStopDate(DateTime(2008,9,7)) - self.assertEquals(x_curr_ex_line.getTitle(), 'Euro to Francs CFA') - self.assertEquals(x_curr_ex_line.getPriceCurrencyTitle(),'Francs CFA') + self.assertEquals(x_curr_ex_line.getTitle(), + 'Euro to Francs CFA') + self.assertEquals(x_curr_ex_line.getPriceCurrencyTitle(), + 'Francs CFA') self.assertEquals(x_curr_ex_line.getBasePrice(),655.957) x_curr_ex_line.validate() - self.assertEquals(x_curr_ex_line.getValidationState(),'validated') + self.assertEquals(x_curr_ex_line.getValidationState(), + 'validated') accounting_module = self.portal.accounting_module transaction1 = self._makeOne( portal_type='Purchase Invoice Transaction', stop_date=DateTime('2008/09/08'), - source_section_value=self.organisation_module.supplier, - lines=(dict( - destination_value=self.account_module.goods_purchase, + source_section_value=self.organisation_module.supplier, + lines=(dict( + destination_value=self.account_module.goods_purchase, destination_debit=500), - dict(destination_value=self.account_module.receivable, + dict(destination_value=self.account_module.receivable, destination_credit=500))) - transaction1.AccountingTransaction_convertDestinationPrice(form_id='view') + transaction1.AccountingTransaction_convertDestinationPrice( + form_id='view') line_list = transaction1.contentValues( - portal_type=portal.getPortalAccountingMovementTypeList()) + portal_type=portal.getPortalAccountingMovementTypeList()) for line in line_list: self.assertEquals(line.getDestinationTotalAssetPrice(),None) transaction2 = self._makeOne( portal_type='Purchase Invoice Transaction', stop_date=DateTime('2008/09/06'), - source_section_value=self.organisation_module.supplier, + source_section_value=self.organisation_module.supplier, lines=(dict( - destination_value=self.account_module.goods_purchase, + destination_value=self.account_module.goods_purchase, destination_debit=500), - dict(destination_value=self.account_module.receivable, + dict(destination_value=self.account_module.receivable, destination_credit=500))) - transaction2.AccountingTransaction_convertDestinationPrice(form_id='view') + transaction2.AccountingTransaction_convertDestinationPrice( + form_id='view') line_list = transaction2.contentValues( - portal_type=portal.getPortalAccountingMovementTypeList()) + portal_type=portal.getPortalAccountingMovementTypeList()) + for line in line_list: + self.assertEquals(line.getDestinationTotalAssetPrice(), + round(655.957*line.getQuantity())) + + def test_01_CreateCELWithNoReferenceCurrency( + self, quiet=0,run=run_all_test): + """ + Create a currency exchange line with no reference currency + and verify that the CEL won't apply for the currency + """ + if not run: return + if not quiet: + printAndLog('test_01_CreateCELWithNoReferenceCurrency') + portal = self.getPortal() + self.organisation_module = self.portal.organisation_module + self.organisation1 = self.organisation_module.my_organisation + new_currency = portal.currency_module.newContent( + portal_type='Currency') + new_currency.setReference('XOF') + new_currency.setTitle('Francs CFA') + new_currency.setBaseUnitQuantity(1.00) + get_transaction().commit() + self.tic()#execute transaction + self.organisation1.edit( + price_currency=new_currency.getRelativeUrl()) + euro = self.portal.currency_module.euro + x_curr_ex_line = euro.newContent( + portal_type='Currency Exchange Line') + x_curr_ex_line.setTitle('Euro to Francs CFA') + x_curr_ex_line.setBasePrice(655.957) + x_curr_ex_line.setStartDate(DateTime(2008,9,8)) + x_curr_ex_line.setStopDate(DateTime(2008,9,10)) + self.assertEquals(x_curr_ex_line.getTitle(), + 'Euro to Francs CFA') + self.assertEquals(x_curr_ex_line.getPriceCurrency(),None) + self.assertEquals(x_curr_ex_line.getBasePrice(),655.957) + x_curr_ex_line.validate() + self.assertEquals(x_curr_ex_line.getValidationState(), + 'validated') + + accounting_module = self.portal.accounting_module + transaction = self._makeOne( + portal_type='Purchase Invoice Transaction', + stop_date=DateTime('2008/09/08'), + source_section_value=self.organisation_module.supplier, + lines=(dict( + destination_value=self.account_module.goods_purchase, + destination_debit=500), + dict(destination_value=self.account_module.receivable, + destination_credit=500))) + + transaction.AccountingTransaction_convertDestinationPrice( + form_id='view') + line_list = transaction.contentValues( + portal_type=portal.getPortalAccountingMovementTypeList()) + for line in line_list: + self.assertEquals(line.getDestinationTotalAssetPrice(), + None) + + + def test_01_CreateCELWithNoBasePrice( + self, quiet=0,run=run_all_test): + """ + Create two currency exchange lines with no base and + verify that only one of the CEL will apply for the currency + """ + if not run: return + if not quiet: + printAndLog('test_01_CreateCELWithNoBasePrice') + portal = self.getPortal() + self.organisation_module = self.portal.organisation_module + self.organisation1 = self.organisation_module.my_organisation + new_currency = portal.currency_module.newContent( + portal_type='Currency') + new_currency.setReference('XOF') + new_currency.setTitle('Francs CFA') + new_currency.setBaseUnitQuantity(1.00) + get_transaction().commit() + self.tic()#execute transaction + self.organisation1.edit( + price_currency=new_currency.getRelativeUrl()) + euro = self.portal.currency_module.euro + + euro_line1 = euro.newContent( + portal_type='Currency Exchange Line', + price_currency=new_currency.getRelativeUrl()) + euro_line1.setTitle('Euro to Francs CFA') + euro_line1.setBasePrice(655.957) + euro_line1.setStartDate(DateTime(2008,9,8)) + euro_line1.setStopDate(DateTime(2008,9,10)) + self.assertEquals(euro_line1.getTitle(), 'Euro to Francs CFA') + self.assertEquals(euro_line1.getPriceCurrencyTitle(), + 'Francs CFA') + self.assertEquals(euro_line1.getBasePrice(),655.957) + euro_line1.validate() + self.assertEquals(euro_line1.getValidationState(), + 'validated') + euro_line2 = euro.newContent( + portal_type='Currency Exchange Line', + price_currency=new_currency.getRelativeUrl()) + euro_line2.setTitle('Euro to Francs CFA') + euro_line2.setStartDate(DateTime(2008,9,8)) + euro_line2.setStopDate(DateTime(2008,9,10)) + self.assertEquals(euro_line2.getTitle(), 'Euro to Francs CFA') + self.assertEquals(euro_line2.getPriceCurrencyTitle(), + 'Francs CFA') + self.assertEquals(euro_line2.getBasePrice(),None) + euro_line2.validate() + + self.assertEquals(euro_line2.getValidationState(), + 'validated') + accounting_module = self.portal.accounting_module + transaction = self._makeOne( + portal_type='Purchase Invoice Transaction', + stop_date=DateTime('2008/09/08'), + source_section_value=self.organisation_module.supplier, + lines=(dict( + destination_value=self.account_module.goods_purchase, + destination_debit=500), + dict(destination_value=self.account_module.receivable, + destination_credit=500))) + transaction.AccountingTransaction_convertDestinationPrice( + form_id='view') + line_list = transaction.contentValues( + portal_type=portal.getPortalAccountingMovementTypeList()) for line in line_list: - self.assertEquals(line.getDestinationTotalAssetPrice(),round(655.957* - line.getQuantity())) + self.assertEquals(line.getDestinationTotalAssetPrice(), + round(655.957*line.getQuantity())) + def test_suite(): -- 2.30.9