@@ -30,7 +30,7 @@ import (
3030const issuerID = "issuer-id"
3131
3232func TestClient_VerifyStatus (t * testing.T ) {
33- t .Run ("success" , func (t * testing.T ) {
33+ t .Run ("single status -> success" , func (t * testing.T ) {
3434 client := Client {
3535 ValidatorGetter : validator .GetValidator ,
3636 Resolver : resolver .NewResolver (http .DefaultClient , & vdr.VDRegistry {}, "" ),
@@ -47,7 +47,7 @@ func TestClient_VerifyStatus(t *testing.T) {
4747 Issuer : & verifiable.Issuer {
4848 ID : issuerID ,
4949 },
50- Status : & verifiable.TypedID {
50+ Status : [] * verifiable.TypedID { {
5151 ID : "foo-bar" ,
5252 Type : statuslist2021 .StatusList2021Type ,
5353 CustomFields : map [string ]interface {}{
@@ -56,7 +56,7 @@ func TestClient_VerifyStatus(t *testing.T) {
5656 statuslist2021 .StatusListIndex : "0" ,
5757 },
5858 },
59- }))
59+ } }))
6060 require .NoError (t , err )
6161
6262 // status: revoked
@@ -65,18 +65,114 @@ func TestClient_VerifyStatus(t *testing.T) {
6565 ID : issuerID ,
6666 },
6767
68- Status : & verifiable.TypedID {
68+ Status : [] * verifiable.TypedID { {
6969 ID : "foo-bar" ,
7070 Type : statuslist2021 .StatusList2021Type ,
7171 CustomFields : map [string ]interface {}{
72- statuslist2021 .StatusPurpose : "foo" ,
72+ statuslist2021 .StatusPurpose : StatusPurposeRevocation ,
7373 statuslist2021 .StatusListCredential : statusServer .URL ,
7474 statuslist2021 .StatusListIndex : "1" ,
7575 },
7676 },
77- }))
78- require .Error (t , err )
79- require .Contains (t , err .Error (), RevokedMessage )
77+ }}))
78+ require .ErrorIs (t , err , ErrRevoked )
79+ })
80+
81+ t .Run ("multi status -> success" , func (t * testing.T ) {
82+ client := Client {
83+ ValidatorGetter : validator .GetValidator ,
84+ Resolver : resolver .NewResolver (http .DefaultClient , & vdr.VDRegistry {}, "" ),
85+ }
86+
87+ statusServer := httptest .NewServer (mockStatusResponseHandler (t , mockStatusVC (t , issuerID , isRevoked {false , true })))
88+
89+ defer func () {
90+ statusServer .Close ()
91+ }()
92+
93+ err := client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
94+ Issuer : & verifiable.Issuer {
95+ ID : issuerID ,
96+ },
97+ Status : []* verifiable.TypedID {
98+ {
99+ ID : "id1" ,
100+ Type : statuslist2021 .StatusList2021Type ,
101+ CustomFields : map [string ]interface {}{
102+ statuslist2021 .StatusPurpose : StatusPurposeRevocation ,
103+ statuslist2021 .StatusListCredential : statusServer .URL + "/revoked" ,
104+ statuslist2021 .StatusListIndex : "0" ,
105+ },
106+ },
107+ {
108+ ID : "id2" ,
109+ Type : statuslist2021 .StatusList2021Type ,
110+ CustomFields : map [string ]interface {}{
111+ statuslist2021 .StatusPurpose : StatusPurposeSuspension ,
112+ statuslist2021 .StatusListCredential : statusServer .URL + "/suspended" ,
113+ statuslist2021 .StatusListIndex : "0" ,
114+ },
115+ },
116+ }}))
117+ require .NoError (t , err )
118+
119+ t .Run ("revoked" , func (t * testing.T ) {
120+ err = client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
121+ Issuer : & verifiable.Issuer {
122+ ID : issuerID ,
123+ },
124+
125+ Status : []* verifiable.TypedID {
126+ {
127+ ID : "id1" ,
128+ Type : statuslist2021 .StatusList2021Type ,
129+ CustomFields : map [string ]interface {}{
130+ statuslist2021 .StatusPurpose : StatusPurposeRevocation ,
131+ statuslist2021 .StatusListCredential : statusServer .URL + "/revoked" ,
132+ statuslist2021 .StatusListIndex : "1" ,
133+ },
134+ },
135+ {
136+ ID : "id2" ,
137+ Type : statuslist2021 .StatusList2021Type ,
138+ CustomFields : map [string ]interface {}{
139+ statuslist2021 .StatusPurpose : StatusPurposeSuspension ,
140+ statuslist2021 .StatusListCredential : statusServer .URL + "/suspended" ,
141+ statuslist2021 .StatusListIndex : "0" ,
142+ },
143+ },
144+ }}))
145+ require .ErrorIs (t , err , ErrRevoked )
146+ })
147+
148+ t .Run ("suspended" , func (t * testing.T ) {
149+ err = client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
150+ Issuer : & verifiable.Issuer {
151+ ID : issuerID ,
152+ },
153+
154+ Status : []* verifiable.TypedID {
155+ {
156+ ID : "id1" ,
157+ Type : statuslist2021 .StatusList2021Type ,
158+ CustomFields : map [string ]interface {}{
159+ statuslist2021 .StatusPurpose : StatusPurposeRevocation ,
160+ statuslist2021 .StatusListCredential : statusServer .URL + "/revoked" ,
161+ statuslist2021 .StatusListIndex : "0" ,
162+ },
163+ },
164+ {
165+ ID : "id2" ,
166+ Type : statuslist2021 .StatusList2021Type ,
167+ CustomFields : map [string ]interface {}{
168+ statuslist2021 .StatusPurpose : StatusPurposeSuspension ,
169+ statuslist2021 .StatusListCredential : statusServer .URL + "/suspended" ,
170+ statuslist2021 .StatusListIndex : "1" ,
171+ },
172+ },
173+ }}))
174+ require .ErrorIs (t , err , ErrSuspended )
175+ })
80176 })
81177
82178 t .Run ("fail" , func (t * testing.T ) {
@@ -96,7 +192,7 @@ func TestClient_VerifyStatus(t *testing.T) {
96192 },
97193 }
98194 err := client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
99- Status : & verifiable.TypedID {},
195+ Status : [] * verifiable.TypedID {{} },
100196 }))
101197 require .Error (t , err )
102198 require .ErrorIs (t , err , expectErr )
@@ -113,7 +209,7 @@ func TestClient_VerifyStatus(t *testing.T) {
113209 },
114210 }
115211 err := client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
116- Status : & verifiable.TypedID {},
212+ Status : [] * verifiable.TypedID {{} },
117213 }))
118214 require .Error (t , err )
119215 require .ErrorIs (t , err , expectErr )
@@ -130,7 +226,7 @@ func TestClient_VerifyStatus(t *testing.T) {
130226 },
131227 }
132228 err := client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
133- Status : & verifiable.TypedID {},
229+ Status : [] * verifiable.TypedID {{} },
134230 }))
135231 require .Error (t , err )
136232 require .ErrorIs (t , err , expectErr )
@@ -147,7 +243,7 @@ func TestClient_VerifyStatus(t *testing.T) {
147243 },
148244 }
149245 err := client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
150- Status : & verifiable.TypedID {},
246+ Status : [] * verifiable.TypedID {{} },
151247 }))
152248 require .Error (t , err )
153249 require .ErrorIs (t , err , expectErr )
@@ -165,7 +261,7 @@ func TestClient_VerifyStatus(t *testing.T) {
165261 },
166262 }
167263 err := client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
168- Status : & verifiable.TypedID {},
264+ Status : [] * verifiable.TypedID {{} },
169265 }))
170266 require .Error (t , err )
171267 require .ErrorIs (t , err , expectErr )
@@ -188,7 +284,7 @@ func TestClient_VerifyStatus(t *testing.T) {
188284 Issuer : & verifiable.Issuer {
189285 ID : "foo" ,
190286 },
191- Status : & verifiable.TypedID {},
287+ Status : [] * verifiable.TypedID {{} },
192288 }))
193289 require .Error (t , err )
194290 require .Contains (t , err .Error (), "issuer of the credential does not match status list vc issuer" )
@@ -216,7 +312,7 @@ func TestClient_VerifyStatus(t *testing.T) {
216312 },
217313 }
218314 err := client .VerifyStatus (createTestCredential (t , verifiable.CredentialContents {
219- Status : & verifiable.TypedID {},
315+ Status : [] * verifiable.TypedID {{} },
220316 Issuer : & verifiable.Issuer {
221317 ID : issuerID ,
222318 },
@@ -233,6 +329,8 @@ type mockValidator struct {
233329 GetStatusVCURIErr error
234330 GetStatusListIndexVal int
235331 GetStatusListIndexErr error
332+ GetStatusPurposeVal string
333+ GetStatusPurposeErr error
236334}
237335
238336func (m * mockValidator ) ValidateStatus (* verifiable.TypedID ) error {
@@ -247,6 +345,10 @@ func (m *mockValidator) GetStatusListIndex(*verifiable.TypedID) (int, error) {
247345 return m .GetStatusListIndexVal , m .GetStatusListIndexErr
248346}
249347
348+ func (m * mockValidator ) GetStatusPurpose (vcStatus * verifiable.TypedID ) (string , error ) {
349+ return m .GetStatusPurposeVal , m .GetStatusPurposeErr
350+ }
351+
250352type mockResolver struct {
251353 Cred * verifiable.Credential
252354 Err error
0 commit comments