[Erp5-report] r38330 jerome - /erp5/trunk/products/ERP5/tests/testERP5CurrencyExchangeLine.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Sep 14 09:44:39 CEST 2010
Author: jerome
Date: Tue Sep 14 09:44:38 2010
New Revision: 38330
URL: http://svn.erp5.org?rev=38330&view=rev
Log:
tests for currency exchange cells (basic usage and conversion)
Modified:
erp5/trunk/products/ERP5/tests/testERP5CurrencyExchangeLine.py
Modified: erp5/trunk/products/ERP5/tests/testERP5CurrencyExchangeLine.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testERP5CurrencyExchangeLine.py?rev=38330&r1=38329&r2=38330&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testERP5CurrencyExchangeLine.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testERP5CurrencyExchangeLine.py [utf8] Tue Sep 14 09:44:38 2010
@@ -33,12 +33,10 @@ from Products.ERP5Type.tests.ERP5TypeTes
from Products.ERP5.tests.testAccounting import AccountingTestCase
from AccessControl.SecurityManagement import newSecurityManager
+class CurrencyExchangeTestCase(AccountingTestCase, ERP5TypeTestCase):
-class TestCurrencyExchangeLine(AccountingTestCase, ERP5TypeTestCase):
- """
- Test Currency exchange lines.
- """
username = 'username'
+
def beforeTearDown(self):
transaction.abort()
# clear modules if necessary
@@ -51,7 +49,13 @@ class TestCurrencyExchangeLine(Accountin
if currency is not None:
currency.manage_delObjects([x.getId() for x in
currency.objectValues(
- portal_type='Currency Exchange Line')])
+ portal_type='Currency Exchange Line')])
+
+ currency_exchange_type = \
+ self.portal.portal_categories.currency_exchange_type
+ currency_exchange_type.manage_delObjects(
+ list(currency_exchange_type.objectIds()))
+
transaction.commit()
self.tic()
@@ -75,6 +79,11 @@ class TestCurrencyExchangeLine(Accountin
'erp5_accounting_ui_test'
)
+
+class TestCurrencyExchangeLine(CurrencyExchangeTestCase):
+ """
+ Test Currency exchange lines.
+ """
def test_CreateCurrencies(self):
"""
Create currencies to be used for transactions
@@ -505,8 +514,103 @@ class TestCurrencyExchangeLine(Accountin
else:
self.fail('line not found')
+class TestCurrencyExchangeCell(CurrencyExchangeTestCase):
+ def afterSetUp(self):
+ currency_exchange_type = \
+ self.portal.portal_categories.currency_exchange_type
+ currency_exchange_type.newContent(
+ portal_type='Category',
+ id='type_a',
+ title='Type A',
+ int_index=1)
+ currency_exchange_type.newContent(
+ portal_type='Category',
+ id='type_b',
+ title='Type B',
+ int_index=2)
+
+ def test_CreateCurrencyExchangeCell(self):
+ euro = self.currency_module.euro
+ usd = self.currency_module.usd
+ euro_to_usd = euro.newContent(portal_type='Currency Exchange Line')
+ self.assertEquals(0, len(euro_to_usd.contentValues()))
+ # when we set the target currency, currency exchange cells will be added
+ euro_to_usd.setPriceCurrencyValue(usd)
+ self.assertEquals(2, len(euro_to_usd.contentValues()))
+
+ # cell range is like this:
+ self.assertEquals([
+ ['currency_exchange_type/type_a', 'currency_exchange_type/type_b'],
+ ['resource/%s' % euro.getRelativeUrl()],
+ ['price_currency/%s' % usd.getRelativeUrl()],
+ ], euro_to_usd.getCellRange(base_id='path'))
+
+ type_a_cell = euro_to_usd.getCell(
+ 'currency_exchange_type/type_a',
+ 'resource/%s' % euro.getRelativeUrl(),
+ 'price_currency/%s' % usd.getRelativeUrl(),
+ base_id='path')
+ self.assertNotEquals(None, type_a_cell)
+ self.assertEquals('Currency Exchange Cell', type_a_cell.getPortalTypeName())
+
+ # int index have been copied, so that listbox in CurrencyExchangeLine_view
+ # displays currency exchange line in same order than int indexes on
+ # currency_exchange_type categories.
+ self.assertEquals(1, type_a_cell.getIntIndex())
+
+ self.assertTrue('currency_exchange_type/type_a' in
+ type_a_cell.getCategoryList())
+
+ type_a_cell_predicate = type_a_cell.asPredicate()
+ self.assertEquals(sorted(('price_currency',
+ 'resource',
+ 'currency_exchange_type')),
+ sorted(type_a_cell_predicate.getMembershipCriterionBaseCategoryList()))
+
+ self.assertEquals(sorted(('price_currency/currency_module/usd',
+ 'resource/currency_module/euro',
+ 'currency_exchange_type/type_a')),
+ sorted(type_a_cell_predicate.getMembershipCriterionCategoryList()))
+
+
+ def test_ConvertUsingCurrencyExchangeCell(self):
+ euro = self.currency_module.euro
+ usd = self.currency_module.usd
+ euro_to_usd = euro.newContent(portal_type='Currency Exchange Line')
+ euro_to_usd.setPriceCurrencyValue(usd)
+ euro_to_usd.validate()
+
+ type_a_cell = euro_to_usd.getCell(
+ 'currency_exchange_type/type_a',
+ 'resource/%s' % euro.getRelativeUrl(),
+ 'price_currency/%s' % usd.getRelativeUrl(),
+ base_id='path')
+ type_a_cell.setBasePrice(0.98)
+
+ type_b_cell = euro_to_usd.getCell(
+ 'currency_exchange_type/type_b',
+ 'resource/%s' % euro.getRelativeUrl(),
+ 'price_currency/%s' % usd.getRelativeUrl(),
+ base_id='path')
+ type_b_cell.setBasePrice(1.24)
+
+ transaction.commit()
+ self.tic()
+
+ # we need a base for asContext, we use the currency, but in real code you
+ # might want to use a more meaningful context.
+ context = euro.asContext(
+ categories=['resource/%s' % euro.getRelativeUrl(),
+ 'price_currency/%s' % usd.getRelativeUrl(),
+ 'currency_exchange_type/type_a'])
+
+ exchange_ratio = euro.getPrice(context=context,
+ portal_type='Currency Exchange Cell')
+ self.assertEquals(0.98, exchange_ratio)
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestCurrencyExchangeLine))
+ suite.addTest(unittest.makeSuite(TestCurrencyExchangeCell))
return suite
More information about the Erp5-report
mailing list