From bfdef9d7c4573f4d4fdf5e7c04ce0df267b61d73 Mon Sep 17 00:00:00 2001
From: Jean-Paul Calderone <exarkun@twistedmatrix.com>
Date: Mon, 11 May 2020 10:37:12 -0400
Subject: [PATCH] Refactor MorePassesRequired to use attrs

And update tests to take advantage of free equality we get
---
 src/_zkapauthorizer/_storage_server.py        |  6 ++--
 .../tests/test_storage_server.py              | 30 ++++++++++++-------
 2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/src/_zkapauthorizer/_storage_server.py b/src/_zkapauthorizer/_storage_server.py
index 7aa17c8..a89f209 100644
--- a/src/_zkapauthorizer/_storage_server.py
+++ b/src/_zkapauthorizer/_storage_server.py
@@ -101,6 +101,7 @@ from .storage_common import (
 SLOT_HEADER_SIZE = 468
 LEASE_TRAILER_SIZE = 4
 
+@attr.s
 class MorePassesRequired(Exception):
     """
     Storage operations fail with ``MorePassesRequired`` when they are not
@@ -112,9 +113,8 @@ class MorePassesRequired(Exception):
     ivar int required_count: The number of valid passes which must be
         presented for the operation to be authorized.
     """
-    def __init__(self, valid_count, required_count):
-        self.valid_count = valid_count
-        self.required_count = required_count
+    valid_count = attr.ib()
+    required_count = attr.ib()
 
     def __repr__(self):
         return "MorePassedRequired(valid_count={}, required_count={})".format(
diff --git a/src/_zkapauthorizer/tests/test_storage_server.py b/src/_zkapauthorizer/tests/test_storage_server.py
index 88ae5a1..fad28cb 100644
--- a/src/_zkapauthorizer/tests/test_storage_server.py
+++ b/src/_zkapauthorizer/tests/test_storage_server.py
@@ -34,8 +34,6 @@ from testtools import (
 from testtools.matchers import (
     Equals,
     AfterPreprocessing,
-    MatchesStructure,
-    raises,
 )
 from hypothesis import (
     given,
@@ -70,6 +68,9 @@ from .common import (
 from .privacypass import (
     make_passes,
 )
+from .matchers import (
+    raises,
+)
 from .strategies import (
     zkaps,
     sizes,
@@ -231,8 +232,13 @@ class PassValidationTests(TestCase):
             result = mutable_write()
         except MorePassesRequired as e:
             self.assertThat(
-                e.required_count,
-                Equals(1),
+                e,
+                Equals(
+                    MorePassesRequired(
+                        valid_count=0,
+                        required_count=1,
+                    ),
+                ),
             )
         else:
             self.fail("expected MorePassesRequired, got {}".format(result))
@@ -329,9 +335,11 @@ class PassValidationTests(TestCase):
         except MorePassesRequired as e:
             self.assertThat(
                 e,
-                MatchesStructure(
-                    valid_count=Equals(0),
-                    required_count=Equals(1),
+                Equals(
+                    MorePassesRequired(
+                        valid_count=0,
+                        required_count=1,
+                    ),
                 ),
             )
         else:
@@ -423,9 +431,11 @@ class PassValidationTests(TestCase):
         except MorePassesRequired as e:
             self.assertThat(
                 e,
-                MatchesStructure(
-                    valid_count=Equals(len(passes)),
-                    required_count=Equals(required_count),
+                Equals(
+                    MorePassesRequired(
+                        valid_count=len(passes),
+                        required_count=required_count,
+                    ),
                 ),
             )
         else:
-- 
GitLab