diff options
-rwxr-xr-x | setup.py | 3 | ||||
-rw-r--r-- | talerbank/app/amount.py | 4 | ||||
-rw-r--r-- | talerbank/app/tests.py | 4 |
3 files changed, 8 insertions, 3 deletions
@@ -12,7 +12,8 @@ setup(name='talerbank', "psycopg2", "requests", "uWSGI", - "validictory" + "validictory", + "mock" ], package_data={ diff --git a/talerbank/app/amount.py b/talerbank/app/amount.py index c3e2b93..5e1f68c 100644 --- a/talerbank/app/amount.py +++ b/talerbank/app/amount.py @@ -63,14 +63,14 @@ class Amount: # instantiating an amount object. @classmethod def parse(cls, amount_str: str): - exp = r'^\s*([-_*A-Za-z0-9]+):([0-9]+)\.([0-9]+)\s*$' + exp = r'^\s*([-_*A-Za-z0-9]+):([0-9]+)\.?([0-9]+)?\s*$' import re parsed = re.search(exp, amount_str) if not parsed: raise BadFormatAmount(amount_str) value = int(parsed.group(2)) fraction = 0 - for i, digit in enumerate(parsed.group(3)): + for i, digit in enumerate(parsed.group(3) or "0"): fraction += int(int(digit) * (Amount._fraction() / 10 ** (i+1))) return cls(parsed.group(1), value, fraction) diff --git a/talerbank/app/tests.py b/talerbank/app/tests.py index 35374c6..5f9e67b 100644 --- a/talerbank/app/tests.py +++ b/talerbank/app/tests.py @@ -476,6 +476,10 @@ class ParseAmountTestCase(TestCase): self.assertJSONEqual('{"value": 4, "fraction": 0, "currency": "KUDOS"}', ret.dump()) ret = Amount.parse("KUDOS:4.3") self.assertJSONEqual('{"value": 4, "fraction": 30000000, "currency": "KUDOS"}', ret.dump()) + ret = Amount.parse("KUDOS:4") + self.assertJSONEqual('{"value": 4, "fraction": 0, "currency": "KUDOS"}', ret.dump()) + ret = Amount.parse("KUDOS:4.") # forbid? + self.assertJSONEqual('{"value": 4, "fraction": 0, "currency": "KUDOS"}', ret.dump()) try: Amount.parse("Buggy") except BadFormatAmount: |