import unittest from zope.i18nmessageid.message import Message as i18nMessage from zope.interface.verify import verifyObject from zope.schema.interfaces import IVocabularyTokenized, ITerm from waeup.ikoba.payments.currencies import ( get_decimal_units, ISO_4217_CURRENCIES, ISO_4217_CURRENCIES_VOCAB, ) class CurrenciesTests(unittest.TestCase): def test_get_decimal_units(self): # we can get the number of decimals for a currency code assert get_decimal_units('USD') == 2 assert get_decimal_units('JPY') == 0 def test_iso_currencies_no_linebreak(self): # sanity check: make sure we didn't compile linebreaks for key, value in ISO_4217_CURRENCIES.items(): assert '\n' not in key assert '\n' not in value[0] assert '\n' not in value[1] def test_iso_currencies_types(self): # sanity check: make sure we have the correct types in all tuples for key, value in ISO_4217_CURRENCIES.items(): assert isinstance(value[1], i18nMessage) assert isinstance(value[2], int) assert isinstance(value[3], str) def test_currencies_vocab_tokenized(self): # we can get ISO currencies as a source suitable for forms etc. verifyObject(IVocabularyTokenized, ISO_4217_CURRENCIES_VOCAB) def test_currencies_vocab_i18nized(self): # vocab titles are i18nized result = ISO_4217_CURRENCIES_VOCAB.getTerm('USD') assert ITerm.providedBy(result) self.assertEqual(result.title, u'US Dollar') assert isinstance(result.title, i18nMessage) def test_currencies_vocab_tokens_are_string(self): # vocab tokens are simple strings result = ISO_4217_CURRENCIES_VOCAB.getTerm('USD') assert ITerm.providedBy(result) assert result.token == result.value assert result.value == 'USD' assert isinstance(result.token, str) assert isinstance(result.value, str)