From df5b4183b2d3aa83f68990344faf8c248b836feb Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Wed, 13 Nov 2019 14:28:23 -0500 Subject: [PATCH] Fix Voucher/json round-trip test and implementation --- src/_zkapauthorizer/model.py | 8 +++++++- src/_zkapauthorizer/tests/strategies.py | 16 +++++++++++++++- src/_zkapauthorizer/tests/test_model.py | 10 +++++----- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/_zkapauthorizer/model.py b/src/_zkapauthorizer/model.py index c8d2a32..331ec04 100644 --- a/src/_zkapauthorizer/model.py +++ b/src/_zkapauthorizer/model.py @@ -460,7 +460,12 @@ class Voucher(object): @classmethod def from_json_v1(cls, values): - return cls(**values) + return cls( + number=values[u"number"], + created=None if values[u"created"] is None else parse_datetime(values[u"created"]), + redeemed=values[u"redeemed"], + token_count=values[u"token_count"], + ) def to_json(self): @@ -476,5 +481,6 @@ class Voucher(object): u"number": self.number, u"created": None if self.created is None else self.created.isoformat(), u"redeemed": self.redeemed, + u"token_count": self.token_count, u"version": 1, } diff --git a/src/_zkapauthorizer/tests/strategies.py b/src/_zkapauthorizer/tests/strategies.py index c9c7ec2..6b21896 100644 --- a/src/_zkapauthorizer/tests/strategies.py +++ b/src/_zkapauthorizer/tests/strategies.py @@ -25,6 +25,8 @@ import attr from hypothesis.strategies import ( one_of, just, + none, + booleans, binary, characters, text, @@ -35,6 +37,7 @@ from hypothesis.strategies import ( dictionaries, fixed_dictionaries, builds, + datetimes, ) from twisted.web.test.requesthelper import ( @@ -52,7 +55,8 @@ from allmydata.client import ( from ..model import ( Pass, RandomToken, - UnblindedToken + UnblindedToken, + Voucher, ) @@ -216,6 +220,16 @@ def vouchers(): ) +def voucher_objects(): + return builds( + Voucher, + number=vouchers(), + created=one_of(none(), datetimes()), + redeemed=booleans(), + token_count=one_of(none(), integers(min_value=1)), + ) + + def random_tokens(): """ Build random tokens as unicode strings. diff --git a/src/_zkapauthorizer/tests/test_model.py b/src/_zkapauthorizer/tests/test_model.py index f53bd5b..925f464 100644 --- a/src/_zkapauthorizer/tests/test_model.py +++ b/src/_zkapauthorizer/tests/test_model.py @@ -72,6 +72,7 @@ from ..model import ( from .strategies import ( tahoe_configs, vouchers, + voucher_objects, random_tokens, unblinded_tokens, ) @@ -261,15 +262,14 @@ class VoucherTests(TestCase): """ Tests for ``Voucher``. """ - @given(vouchers()) - def test_json_roundtrip(self, voucher): + @given(voucher_objects()) + def test_json_roundtrip(self, reference): """ ``Voucher.to_json . Voucher.from_json → id`` """ - ref = Voucher(voucher) self.assertThat( - Voucher.from_json(ref.to_json()), - Equals(ref), + Voucher.from_json(reference.to_json()), + Equals(reference), ) -- GitLab