summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-01-12 19:00:21 +0100
committerFlorian Dold <florian.dold@gmail.com>2020-01-12 19:00:21 +0100
commit872a2e65b7be94d91ca969c4529b7e300a979071 (patch)
tree3ddcac4334ef9503d348694485c231dbdb9d17ca /tests
parent7641c1a66caf87858255320d88673223f0dd1f31 (diff)
downloadtaler-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-xtests/test_amount.py74
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')