class TestCurrency(unittest.TestCase): def setUpClass(): logging.basicConfig(level=logging.DEBUG) def setUp(self): self.logger = logging.getLogger() self.itemFile = Datafile('test.model.items.xml', self.id()) self.sessionFile = Datafile('test.model.session.xml', self.id()) self.currencyFile = Datafile('test.model.currency.xml', self.id()) self.dataset = Dataset( self.logger, './', self.sessionFile.getFilename(), self.itemFile.getFilename(), self.currencyFile.getFilename()) self.dataset.restore() self.currency = Currency( self.logger, self.dataset, currencyCodes=['czk', 'eur', 'usd']) def tearDown(self): self.itemFile.clear() self.sessionFile.clear() self.currencyFile.clear() del self.currency del self.dataset def test_convertToAllCurrencies(self): # Valid amount amountInCurrency = self.currency.convertToAllCurrencies(154) self.assertEqual(len(amountInCurrency), 3) self.assertEqual(amountInCurrency[0][CurrencyField.AMOUNT], Decimal('154')) self.assertEqual(amountInCurrency[1][CurrencyField.AMOUNT], Decimal('5.68')) self.assertEqual(amountInCurrency[2][CurrencyField.AMOUNT], Decimal('7.81')) # Valid negative amount amountInCurrency = self.currency.convertToAllCurrencies(-154) self.assertEqual(len(amountInCurrency), 3) self.assertEqual(amountInCurrency[0][CurrencyField.AMOUNT], Decimal('-154')) self.assertEqual(amountInCurrency[1][CurrencyField.AMOUNT], Decimal('-5.68')) self.assertEqual(amountInCurrency[2][CurrencyField.AMOUNT], Decimal('-7.81')) # Excessively large amount that would result to NaN amountInCurrency = self.currency.convertToAllCurrencies(Decimal('1E+30')) self.assertEqual(len(amountInCurrency), 3) self.assertEqual(amountInCurrency[0][CurrencyField.AMOUNT], Decimal('0')) self.assertEqual(amountInCurrency[1][CurrencyField.AMOUNT], Decimal('0')) self.assertEqual(amountInCurrency[2][CurrencyField.AMOUNT], Decimal('0')) def test_updateAmountWithAllCurrencies(self): item = { 'UNTOUCHABLE': 123, 'INPLACE': 100, 'OUTPLACE-SRC': 220 } self.currency.updateAmountWithAllCurrencies(item, { 'INPLACE': 'INPLACE', 'OUTPLACE-SRC': 'OUTPLACE-TGT', 'UNDEFINED': 'UNDEFINED'}) # Added fileds OUTPLACE-TGT and UNDEFINED self.assertEqual(len(item), 3 + 2) self.assertListEqual(item['UNDEFINED'], []) self.assertEqual(item['UNTOUCHABLE'], Decimal('123')) self.assertEqual(item['INPLACE'][0][CurrencyField.AMOUNT], Decimal('100')) self.assertEqual(item['INPLACE'][1][CurrencyField.AMOUNT], Decimal('3.69')) self.assertEqual(item['INPLACE'][2][CurrencyField.AMOUNT], Decimal('5.07')) self.assertEqual(item['OUTPLACE-SRC'], 220) self.assertEqual(item['OUTPLACE-TGT'][0][CurrencyField.AMOUNT], Decimal('220')) self.assertEqual(item['OUTPLACE-TGT'][1][CurrencyField.AMOUNT], Decimal('8.11')) self.assertEqual(item['OUTPLACE-TGT'][2][CurrencyField.AMOUNT], Decimal('11.16')) def test_roundInPrimary(self): # Conversion test self.assertEqual(self.currency.roundInPrimary('10.543'), Decimal('11')) self.assertEqual(self.currency.roundInPrimary(10.543), Decimal('11')) self.assertEqual(self.currency.roundInPrimary(Decimal('10.543')), Decimal('11')) self.assertEqual(self.currency.roundInPrimary(None), None) self.assertEqual(self.currency.roundInPrimary('NUMBER4'), None) # Position numbers self.assertEqual(self.currency.roundInPrimary(Decimal('10.541')), Decimal('11')) self.assertEqual(self.currency.roundInPrimary(Decimal('10.1')), Decimal('10')) self.assertEqual(self.currency.roundInPrimary(Decimal('19.995')), Decimal('20')) # Negative numbers self.assertEqual(self.currency.roundInPrimary(Decimal('-10.541')), Decimal('-11')) # Zero self.assertEqual(self.currency.roundInPrimary(Decimal('0.00')), Decimal('0'))