Skip to content
This repository was archived by the owner on Dec 12, 2024. It is now read-only.

Commit 0f057ce

Browse files
adding filter fields to kotlin pd (#1280)
* adding filter fields to kotlin pd * grouping * adding the actual definition * cant get the indentation right
1 parent cf9ce35 commit 0f057ce

File tree

1 file changed

+114
-37
lines changed

1 file changed

+114
-37
lines changed

site/testsuites/testsuite-kotlin/src/test/kotlin/docs/web5/build/verifiablecredentials/PresentationExchangeTest.kt

Lines changed: 114 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,47 +4,96 @@ import org.junit.jupiter.api.Test;
44
import org.junit.jupiter.api.Assertions.*
55
import web5.sdk.crypto.InMemoryKeyManager
66
import web5.sdk.dids.methods.dht.DidDht
7-
import web5.sdk.credentials.PresentationExchange
87
import web5.sdk.credentials.VerifiableCredential
98
import web5.sdk.credentials.VerifiablePresentation
9+
import web5.sdk.credentials.PresentationExchange
10+
11+
import web5.sdk.credentials.model.FieldV2
12+
import web5.sdk.credentials.model.ConstraintsV2
13+
import web5.sdk.credentials.model.PresentationDefinitionV2
14+
import web5.sdk.credentials.model.InputDescriptorV2
1015
import web5.sdk.credentials.model.PresentationSubmission
11-
import web5.sdk.credentials.model.*
16+
import com.fasterxml.jackson.databind.ObjectMapper
1217

1318
/**
1419
* Tests backing the Presentation Exchange Guide
1520
*/
1621
internal class PresentationExchangeTest {
22+
val issuerDid = DidDht.create(InMemoryKeyManager())
23+
val aliceDid = DidDht.create(InMemoryKeyManager())
24+
25+
data class NameAndDobCredential(
26+
val name: String,
27+
val dateOfBirth: String
28+
)
29+
30+
val nameAndDobVc = VerifiableCredential.create(
31+
type = "NameAndDobCredential",
32+
issuer = issuerDid.uri,
33+
subject = aliceDid.uri,
34+
data = NameAndDobCredential(name= "alice bob",dateOfBirth = "1990-10-01" )
35+
)
36+
37+
val signedNameAndDobVcJwt = nameAndDobVc.sign(issuerDid)
1738
val signedEmploymentVcJwt = "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDprZXk6ejZNa2VyNDlDbnVnN2hzdkhEZ3Y0NHl2cGR2dE1oNHlMaURYeFM2N2huclVodHQyI3o2TWtlcjQ5Q251Zzdoc3ZIRGd2NDR5dnBkdnRNaDR5TGlEWHhTNjdobnJVaHR0MiJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtlcjQ5Q251Zzdoc3ZIRGd2NDR5dnBkdnRNaDR5TGlEWHhTNjdobnJVaHR0MiIsInZjIjp7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJFbXBsb3ltZW50Q3JlZGVudGlhbCJdLCJpZCI6InVybjp1dWlkOjcyNDhiOTkyLTkwOTYtNDk2NS1hMGVjLTc3ZDhhODNhMWRmYiIsImlzc3VlciI6ImRpZDprZXk6ejZNa2VyNDlDbnVnN2hzdkhEZ3Y0NHl2cGR2dE1oNHlMaURYeFM2N2huclVodHQyIiwiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMi0yMVQyMDoxMToyNVoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDppb246RWlEMTR4UmY0cTJNWlh1ZWY2X2ZXYnBGbVlTUG94dGFxTkp1SmdEMG96Wl84UTpleUprWld4MFlTSTZleUp3WVhSamFHVnpJanBiZXlKaFkzUnBiMjRpT2lKeVpYQnNZV05sSWl3aVpHOWpkVzFsYm5RaU9uc2ljSFZpYkdsalMyVjVjeUk2VzNzaWFXUWlPaUprZDI0dGMybG5JaXdpY0hWaWJHbGpTMlY1U25kcklqcDdJbU55ZGlJNklrVmtNalUxTVRraUxDSnJkSGtpT2lKUFMxQWlMQ0o0SWpvaWVubGFNbVYzTlhKeVVXdFVjbUV3WlZsVk16WlBTblJzTURCbFJWZHhhalZhV0dkNmNEZFpSVTVKUVNKOUxDSndkWEp3YjNObGN5STZXeUpoZFhSb1pXNTBhV05oZEdsdmJpSmRMQ0owZVhCbElqb2lTbk52YmxkbFlrdGxlVEl3TWpBaWZTeDdJbWxrSWpvaVpIZHVMV1Z1WXlJc0luQjFZbXhwWTB0bGVVcDNheUk2ZXlKamNuWWlPaUp6WldOd01qVTJhekVpTENKcmRIa2lPaUpGUXlJc0luZ2lPaUpQZDJZMFQyMUViamxKWm5SNFdYWnBkRTFHWm1jMVVXeDVMVVV6VWs1b1dsUkdPVlpFTWtnNVQzVjNJaXdpZVNJNkltUnZjVmxtV2s1c1NtRlRNVll4U201bU9HdEZObEF6VkRsd2QzaDNla3hFVTJWc1ZqTlRUa2s1U2xFaWZTd2ljSFZ5Y0c5elpYTWlPbHNpYTJWNVFXZHlaV1Z0Wlc1MElsMHNJblI1Y0dVaU9pSktjMjl1VjJWaVMyVjVNakF5TUNKOVhTd2ljMlZ5ZG1salpYTWlPbHQ3SW1sa0lqb2laSGR1SWl3aWMyVnlkbWxqWlVWdVpIQnZhVzUwSWpwN0ltVnVZM0o1Y0hScGIyNUxaWGx6SWpwYklpTmtkMjR0Wlc1aklsMHNJbTV2WkdWeklqcGJJbWgwZEhCek9pOHZaSGR1TG5SaVpHUmxkaTV2Y21jdlpIZHVOaUlzSW1oMGRIQnpPaTh2WkhkdUxuUmlaR1JsZGk1dmNtY3ZaSGR1TUNKZExDSnphV2R1YVc1blMyVjVjeUk2V3lJalpIZHVMWE5wWnlKZGZTd2lkSGx3WlNJNklrUmxZMlZ1ZEhKaGJHbDZaV1JYWldKT2IyUmxJbjFkZlgxZExDSjFjR1JoZEdWRGIyMXRhWFJ0Wlc1MElqb2lSV2xEWm05bVFUQkpVbU5uY2tWdVVHZHdRbU5RV1ZsV2VFWlliR0pTYjJRd2RVNWZRVkJwTkVrNUxVRmZRU0o5TENKemRXWm1hWGhFWVhSaElqcDdJbVJsYkhSaFNHRnphQ0k2SWtWcFFtd3pWWG80VldGT2REZGxlREJKYjJJMFJFNXNhbFJGVmpaelQwTmtjbFJ3TWxvNE5FTkJPVFJPUWtFaUxDSnlaV052ZG1WeWVVTnZiVzFwZEcxbGJuUWlPaUpGYVVOWk9WRldZbWRKYkUxemRraEZYMVJtTld4a1MxQjBkR3d3WVV4blNrdHNSbmt6Vms0d2QzQTJhVFpSSW4xOSIsImVtcGxveW1lbnRTdGF0dXMiOiJlbXBsb3llZCJ9fX0.Sazc8Ndhs-NKjxvtVMKeC9dxjEkI26fVsp2kFNWM-SYLtxMzKvl5ffeWd81ysHgPmBBSk2ar4dMqGgUsyM4gAQ"
18-
val signedNameAndDobVcJwt = "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDprZXk6ejZNa2pwUzRHVUFoYmdCSmg2azJnZTZvWTQ0UUxyRXA3NXJadHNqYVRLb3JSRGR0I3o2TWtqcFM0R1VBaGJnQkpoNmsyZ2U2b1k0NFFMckVwNzVyWnRzamFUS29yUkRkdCJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtqcFM0R1VBaGJnQkpoNmsyZ2U2b1k0NFFMckVwNzVyWnRzamFUS29yUkRkdCIsInZjIjp7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJOYW1lQW5kRG9iQ3JlZGVudGlhbCJdLCJpZCI6InVybjp1dWlkOjliZjM2YzY5LTI0ODAtNDllZC1iMTYyLTRlZDEwOWE3MTc3NyIsImlzc3VlciI6ImRpZDprZXk6ejZNa2pwUzRHVUFoYmdCSmg2azJnZTZvWTQ0UUxyRXA3NXJadHNqYVRLb3JSRGR0IiwiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMi0yMVQyMDowNjowMVoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDppb246RWlDS2o2M0FyZlBGcEpsb2lTd3gxQUhxVWtpWlNoSDZGdnZoSzRaTl9fZDFtQTpleUprWld4MFlTSTZleUp3WVhSamFHVnpJanBiZXlKaFkzUnBiMjRpT2lKeVpYQnNZV05sSWl3aVpHOWpkVzFsYm5RaU9uc2ljSFZpYkdsalMyVjVjeUk2VzNzaWFXUWlPaUprZDI0dGMybG5JaXdpY0hWaWJHbGpTMlY1U25kcklqcDdJbU55ZGlJNklrVmtNalUxTVRraUxDSnJkSGtpT2lKUFMxQWlMQ0o0SWpvaWNscFdXbTVJVkVrNWFEWkJUVmxVV0dwT01HcFhTVkYwTTI5ak4xTnJTeTF4Y2kxcVVuSTBUalEzUlNKOUxDSndkWEp3YjNObGN5STZXeUpoZFhSb1pXNTBhV05oZEdsdmJpSmRMQ0owZVhCbElqb2lTbk52YmxkbFlrdGxlVEl3TWpBaWZTeDdJbWxrSWpvaVpIZHVMV1Z1WXlJc0luQjFZbXhwWTB0bGVVcDNheUk2ZXlKamNuWWlPaUp6WldOd01qVTJhekVpTENKcmRIa2lPaUpGUXlJc0luZ2lPaUpaVDFwRE5WSmlUMHQ1T0dadVVUWTJVWEZPUkc5aldFMXZPVXhUZEdNNVYyOWthMHd0ZFZCZlExQnZJaXdpZVNJNklsWnZZM0UxVERodFozQlhXVTFrYjFwS1JrWlJUa1ZDT0hsR0xXTndkRWQzZFdkcFRWVm5hR2t6Y21jaWZTd2ljSFZ5Y0c5elpYTWlPbHNpYTJWNVFXZHlaV1Z0Wlc1MElsMHNJblI1Y0dVaU9pSktjMjl1VjJWaVMyVjVNakF5TUNKOVhTd2ljMlZ5ZG1salpYTWlPbHQ3SW1sa0lqb2laSGR1SWl3aWMyVnlkbWxqWlVWdVpIQnZhVzUwSWpwN0ltVnVZM0o1Y0hScGIyNUxaWGx6SWpwYklpTmtkMjR0Wlc1aklsMHNJbTV2WkdWeklqcGJJbWgwZEhCek9pOHZaSGR1TG5SaVpHUmxkaTV2Y21jdlpIZHVOaUlzSW1oMGRIQnpPaTh2WkhkdUxuUmlaR1JsZGk1dmNtY3ZaSGR1TUNKZExDSnphV2R1YVc1blMyVjVjeUk2V3lJalpIZHVMWE5wWnlKZGZTd2lkSGx3WlNJNklrUmxZMlZ1ZEhKaGJHbDZaV1JYWldKT2IyUmxJbjFkZlgxZExDSjFjR1JoZEdWRGIyMXRhWFJ0Wlc1MElqb2lSV2xCTXpSMlMzb3llVmswZVV4dGRDMUdabkJuYWpWbGFFRm1ZWFI1YzFOa2MwNVNWbVpMYkhwUWRqTjVkeUo5TENKemRXWm1hWGhFWVhSaElqcDdJbVJsYkhSaFNHRnphQ0k2SWtWcFF6ZGZjMXBzTW1wMVVXNUdhRVJIV1RSb2NFVTRiMlF4YVU5MWRuZG1PVFJ5TVVkbk9HMWFWbVJCVmxFaUxDSnlaV052ZG1WeWVVTnZiVzFwZEcxbGJuUWlPaUpGYVVKdU5sTnJiSEpWYzNKdVFuaFJPVXBqVXkxTlNVaGtWelYwTXpRM1MxWjNaMXBwVEZwMFQwcDRRVkYzSW4xOSIsIm5hbWUiOiJhbGljZSBib2IiLCJkYXRlT2ZCaXJ0aCI6IjEwLTAxLTE5OTAifX19.mNCDv_JntH-wZpYONKNL58UbOWaYXCYJO_HPI_WVlSgwzo6dhYmV_9qtpFKd_exFb-aaEYPeSE43twWlrJeSBg"
19-
val allCredentials = listOf(signedEmploymentVcJwt, signedNameAndDobVcJwt)
39+
40+
val allCredentials = listOf(signedEmploymentVcJwt, signedNameAndDobVcJwt)
2041

2142
val presentationDefinition = PresentationDefinitionV2(
2243
id = "presDefIdloanAppVerification123",
2344
name = "Loan Application Employment Verification",
2445
purpose = "To verify applicant’s employment, date of birth, and name",
2546
inputDescriptors = listOf(
26-
// Employment Verification
2747
InputDescriptorV2(
2848
id = "employmentVerification",
2949
purpose = "Confirm current employment status",
3050
constraints = ConstraintsV2(
31-
fields = listOf(FieldV2(path = listOf("$.vc.credentialSubject.employmentStatus")))
51+
fields = listOf(FieldV2(
52+
path = listOf("$.vc.credentialSubject.employmentStatus"),
53+
filterJson = ObjectMapper().readTree(
54+
"""
55+
{
56+
"type": "string",
57+
"pattern": "employed"
58+
}
59+
"""
60+
)
61+
))
3262
)
3363
),
3464
// Date of Birth Verification
3565
InputDescriptorV2(
3666
id = "dobVerification",
37-
purpose = "Confirm the applicants date of birth",
67+
purpose = "Confirm the applicant's date of birth",
3868
constraints = ConstraintsV2(
39-
fields = listOf(FieldV2(path = listOf("$.vc.credentialSubject.dateOfBirth")))
69+
fields = listOf(FieldV2(
70+
path = listOf("$.vc.credentialSubject.dateOfBirth"),
71+
filterJson = ObjectMapper().readTree(
72+
"""
73+
{
74+
"type": "string",
75+
"format": "date"
76+
}
77+
"""
78+
)
79+
))
4080
)
4181
),
4282
// Name Verification
4383
InputDescriptorV2(
4484
id = "nameVerification",
4585
purpose = "Confirm the applicant’s legal name",
4686
constraints = ConstraintsV2(
47-
fields = listOf(FieldV2(path = listOf("$.vc.credentialSubject.name")))
87+
fields = listOf(FieldV2(
88+
path = listOf("$.vc.credentialSubject.name"),
89+
filterJson = ObjectMapper().readTree(
90+
"""
91+
{
92+
"type": "string"
93+
}
94+
"""
95+
)
96+
))
4897
)
4998
)
5099
)
@@ -54,35 +103,63 @@ internal class PresentationExchangeTest {
54103
fun `getLoanAppPresentationDefinitionKt `() {
55104
// :snippet-start: getLoanAppPresentationDefinitionKt
56105
val presentationDefinition = PresentationDefinitionV2(
57-
id = "presDefIdloanAppVerification123",
58-
name = "Loan Application Employment Verification",
59-
purpose = "To verify applicant’s employment, date of birth, and name",
60-
inputDescriptors = listOf(
61-
// Employment Verification
62-
InputDescriptorV2(
63-
id = "employmentVerification",
64-
purpose = "Confirm current employment status",
65-
constraints = ConstraintsV2(
66-
fields = listOf(FieldV2(path = listOf("$.vc.credentialSubject.employmentStatus")))
67-
)
68-
),
69-
// Date of Birth Verification
70-
InputDescriptorV2(
71-
id = "dobVerification",
72-
purpose = "Confirm the applicant’s date of birth",
73-
constraints = ConstraintsV2(
74-
fields = listOf(FieldV2(path = listOf("$.vc.credentialSubject.dateOfBirth")))
75-
)
76-
),
77-
// Name Verification
78-
InputDescriptorV2(
79-
id = "nameVerification",
80-
purpose = "Confirm the applicant’s legal name",
81-
constraints = ConstraintsV2(
82-
fields = listOf(FieldV2(path = listOf("$.vc.credentialSubject.name")))
83-
)
84-
)
106+
id = "presDefIdloanAppVerification123",
107+
name = "Loan Application Employment Verification",
108+
purpose = "To verify applicant’s employment, date of birth, and name",
109+
inputDescriptors = listOf(
110+
InputDescriptorV2(
111+
id = "employmentVerification",
112+
purpose = "Confirm current employment status",
113+
constraints = ConstraintsV2(
114+
fields = listOf(FieldV2(
115+
path = listOf("$.vc.credentialSubject.employmentStatus"),
116+
filterJson = ObjectMapper().readTree(
117+
"""
118+
{
119+
"type": "string",
120+
"pattern": "employed"
121+
}
122+
"""
123+
)
124+
))
125+
)
126+
),
127+
// Date of Birth Verification
128+
InputDescriptorV2(
129+
id = "dobVerification",
130+
purpose = "Confirm the applicant's date of birth",
131+
constraints = ConstraintsV2(
132+
fields = listOf(FieldV2(
133+
path = listOf("$.vc.credentialSubject.dateOfBirth"),
134+
filterJson = ObjectMapper().readTree(
135+
"""
136+
{
137+
"type": "string",
138+
"format": "date"
139+
}
140+
"""
141+
)
142+
))
143+
)
144+
),
145+
// Name Verification
146+
InputDescriptorV2(
147+
id = "nameVerification",
148+
purpose = "Confirm the applicant’s legal name",
149+
constraints = ConstraintsV2(
150+
fields = listOf(FieldV2(
151+
path = listOf("$.vc.credentialSubject.name"),
152+
filterJson = ObjectMapper().readTree(
153+
"""
154+
{
155+
"type": "string"
156+
}
157+
"""
158+
)
159+
))
160+
)
85161
)
162+
)
86163
)
87164
// :snippet-end:
88165

0 commit comments

Comments
 (0)