diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-01-12 19:00:21 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-01-12 19:00:21 +0100 |
commit | 872a2e65b7be94d91ca969c4529b7e300a979071 (patch) | |
tree | 3ddcac4334ef9503d348694485c231dbdb9d17ca /tests | |
parent | 7641c1a66caf87858255320d88673223f0dd1f31 (diff) | |
download | taler-util-872a2e65b7be94d91ca969c4529b7e300a979071.tar.gz taler-util-872a2e65b7be94d91ca969c4529b7e300a979071.tar.bz2 taler-util-872a2e65b7be94d91ca969c4529b7e300a979071.zip |
make amounts immutable, implement signed amounts
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/test_amount.py | 74 |
1 files changed, 36 insertions, 38 deletions
diff --git a/tests/test_amount.py b/tests/test_amount.py index a4043b7..3dd386a 100755 --- a/tests/test_amount.py +++ b/tests/test_amount.py @@ -19,53 +19,51 @@ # @version 0.0 # @repository https://git.taler.net/taler-util.git/ -from __future__ import unicode_literals -from taler.util.amount import Amount, BadFormatAmount, NumberTooBig, NegativeNumber +from taler.util.amount import Amount, SignedAmount, AmountOverflowError, MAX_AMOUNT_VALUE from unittest import TestCase import json -from mock import MagicMock class TestAmount(TestCase): - def setUp(self): - self.amount = Amount('TESTKUDOS') - def test_very_big_number(self): - with self.assertRaises(NumberTooBig): + with self.assertRaises(AmountOverflowError): self.Amount = Amount('TESTKUDOS', - value=99999999999999999999999999999999999999999999) + value=99999999999999999999999999999999999999999999, + fraction=0) - def test_negative_value(self): - with self.assertRaises(NegativeNumber): - self.Amount = Amount('TESTKUDOS', - value=-9) + def test_add_overflow(self): + a1 = Amount('TESTKUDOS', + value=MAX_AMOUNT_VALUE, + fraction=0) + with self.assertRaises(AmountOverflowError): + a2 = a1 + Amount.parse("TESTKUDOS:1") + + def test_sub_overflow(self): + a1 = Amount('TESTKUDOS', + value=MAX_AMOUNT_VALUE, + fraction=0) + s1 = SignedAmount(False, a1) + with self.assertRaises(AmountOverflowError): + s2 = s1 - SignedAmount.parse("TESTKUDOS:1") def test_parse_and_cmp(self): - a = self.amount.parse('TESTKUDOS:0.0') - self.assertEqual(Amount.cmp(self.amount, a), 0) - b = self.amount.parse('TESTKUDOS:0.1') - self.assertEqual(Amount.cmp(Amount('TESTKUDOS', fraction=10000000), b), 0) - c = self.amount.parse('TESTKUDOS:3.3') - self.assertEqual(Amount.cmp(Amount('TESTKUDOS', 3, 30000000), c), 0) - self.assertEqual(Amount.cmp(a, b), -1) - self.assertEqual(Amount.cmp(c, b), 1) - with self.assertRaises(BadFormatAmount): - Amount.parse(':3') + self.assertTrue(Amount.parse("EUR:0.0") < Amount.parse("EUR:0.5")) + + def test_amount(self): + self.assertEqual(Amount.parse("TESTKUDOS:0").stringify(3), "TESTKUDOS:0.000") + + def test_signed_amount(self): + self.assertEqual(SignedAmount.parse("TESTKUDOS:1.5").stringify(3), "+TESTKUDOS:1.500") + + def test_zero_crossing(self): + p1 = SignedAmount.parse("EUR:1") + p2 = SignedAmount.parse("EUR:2") + p3 = SignedAmount.parse("EUR:3") + p5 = SignedAmount.parse("EUR:5") + p8 = SignedAmount.parse("EUR:8") - def test_add_and_dump(self): - mocky = MagicMock() - self.amount.add(Amount('TESTKUDOS', 9, 10**8)) - mocky(**self.amount.dump()) - mocky.assert_called_with(currency='TESTKUDOS', value=10, fraction=0) + self.assertEqual(p5 + p3, p8) + self.assertEqual(p5 - p3, p2) + self.assertEqual(p2 - p3, -p1) - def test_subtraction(self): - with self.assertRaises(ValueError): - self.amount.subtract(Amount('TESTKUDOS', fraction=1)) - a = Amount('TESTKUDOS', 2) - a.subtract(Amount('TESTKUDOS', 1, 99999999)) - self.assertEqual(Amount.cmp(a, Amount('TESTKUDOS', fraction=1)), 0) + self.assertEqual((-p2) + p3, p1) - def test_stringify(self): - self.assertEqual(self.amount.stringify(3), 'TESTKUDOS:0.000') - self.amount.add(Amount('TESTKUDOS', 2, 100)) - self.assertEqual(self.amount.stringify(6), 'TESTKUDOS:2.000001') - self.assertEqual(Amount("TESTKUDOS", value=5, fraction=9000000).stringify(), 'TESTKUDOS:5.09') |