From deca344a6f5ef90bbd05756bd4326d4f7e748361 Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Mon, 4 May 2020 11:01:25 -0400 Subject: [PATCH] Fix json round-tripping for Redeeming state --- src/_zkapauthorizer/model.py | 3 ++- src/_zkapauthorizer/tests/strategies.py | 36 +++++++++++++++---------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/_zkapauthorizer/model.py b/src/_zkapauthorizer/model.py index 329d0b8..636c3a1 100644 --- a/src/_zkapauthorizer/model.py +++ b/src/_zkapauthorizer/model.py @@ -793,6 +793,7 @@ class Redeeming(object): return { u"name": u"redeeming", u"started": self.started.isoformat(), + u"counter": self.counter, } @@ -981,7 +982,7 @@ class Voucher(object): elif state_name == u"redeeming": state = Redeeming( started=parse_datetime(state_json[u"started"]), - counter=0, + counter=state_json[u"counter"], ) elif state_name == u"double-spend": state = DoubleSpend( diff --git a/src/_zkapauthorizer/tests/strategies.py b/src/_zkapauthorizer/tests/strategies.py index 9a4c325..13ea72a 100644 --- a/src/_zkapauthorizer/tests/strategies.py +++ b/src/_zkapauthorizer/tests/strategies.py @@ -77,6 +77,7 @@ from ..model import ( DoubleSpend, Unpaid, Error, + Redeeming, Redeemed, ) @@ -297,6 +298,7 @@ def vouchers(): lambda voucher: voucher.decode("ascii"), ) + def redeemed_states(): """ Build ``Redeemed`` instances. @@ -308,6 +310,20 @@ def redeemed_states(): public_key=dummy_ristretto_keys(), ) + +def voucher_counters(): + """ + Build integers usable as counters in the voucher redemption process. + """ + return integers( + min_value=0, + # This may or may not be the actual maximum value accepted by a + # PaymentServer. If it is not exactly the maximum, it's probably at + # least in the same ballpark. + max_value=256, + ) + + def voucher_states(): """ Build Python objects representing states a Voucher can be in. @@ -315,7 +331,12 @@ def voucher_states(): return one_of( builds( Pending, - integers(min_value=0), + counter=integers(min_value=0), + ), + builds( + Redeeming, + started=datetimes(), + counter=voucher_counters(), ), redeemed_states(), builds( @@ -347,19 +368,6 @@ def voucher_objects(states=voucher_states()): ) -def voucher_counters(): - """ - Build integers usable as counters in the voucher redemption process. - """ - return integers( - min_value=0, - # This may or may not be the actual maximum value accepted by a - # PaymentServer. If it is not exactly the maximum, it's probably at - # least in the same ballpark. - max_value=256, - ) - - def redemption_group_counts(): """ Build integers which can represent the number of groups in the redemption -- GitLab