Exemplo n.º 1
0
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'))