@@ -12,6 +12,7 @@ class PresentationExchangeTests: XCTestCase {
1212 eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCMwIiwidHlwIjoiSldUIiwiYWxnIjoiRVMyNTZLIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCIsInN1YiI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImlhdCI6MTcwMTMwMjU5MywidmMiOnsiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMS0zMFQwMDowMzoxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImxvY2FsUmVzcGVjdCI6ImhpZ2giLCJsZWdpdCI6dHJ1ZX0sImlkIjoidXJuOnV1aWQ6NmM4YmJjZjQtODdhZi00NDlhLTliZmItMzBiZjI5OTc2MjI3IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlN0cmVldENyZWQiXSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwiaXNzdWVyIjoiZGlkOmp3azpleUpyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0ltTnlkaUk2SW5ObFkzQXlOVFpyTVNJc0ltdHBaQ0k2SWs1Q1gzRnNWVWx5TURZdFFXbHJWbFpOUm5KbGNUQnNZeTF2YlZGMGVtTTJiSGRvYUdOMlowODJjalFpTENKNElqb2lSR1IwVGpoWE5uaGZNelJ3UWw5dWEzaFNNR1V4ZEcxRWEwNXVjMHBsZFhOQ1FVVlFla3RYWjJaZldTSXNJbmtpT2lKMU0xY3hNelZwYm05a1RIRjBZMFZpT1dwT1IxTXpTbk5OWDNWR1MyMXJTbE5pT0ZSeVl6bHNkVmRKSWl3aVlXeG5Jam9pUlZNeU5UWkxJbjAifX0.8AehkiboIK6SZy6LHC9ugy_OcT2VsjluzH4qzsgjfTtq9fEsGyY-cOW_xekNUa2RE2VzlP6FXk0gDn4xf6_r4g
1313 """
1414
15+ // vcJwt satisfies this
1516 let inputDescriptor = InputDescriptorV2 (
1617 id: " 1234567890_a " ,
1718 name: nil ,
@@ -36,6 +37,7 @@ class PresentationExchangeTests: XCTestCase {
3637 )
3738 )
3839
40+ // no creds satisfy this
3941 let inputDescriptor2 = InputDescriptorV2 (
4042 id: " 1234567890_b " ,
4143 name: nil ,
@@ -56,6 +58,7 @@ class PresentationExchangeTests: XCTestCase {
5658 )
5759 )
5860
61+ // vcJwt and vcJwt2 both satisfy this
5962 let inputDescriptor3 = InputDescriptorV2 (
6063 id: " 1234567890_c " ,
6164 name: nil ,
@@ -76,7 +79,7 @@ class PresentationExchangeTests: XCTestCase {
7679 )
7780 )
7881
79- func test_select_oneOfTwoCorrectCredentials ( ) throws {
82+ func test_selectOneCorrectCredential ( ) throws {
8083 let pd = PresentationDefinitionV2 (
8184 id: " 1234567890_d " ,
8285 name: nil ,
@@ -89,34 +92,100 @@ class PresentationExchangeTests: XCTestCase {
8992 )
9093 let result = try PresentationExchange . selectCredentials ( vcJWTs: [ vcJwt, vcJwt2] , presentationDefinition: pd)
9194
92- XCTAssertEqual ( result, [ vcJwt] )
95+ XCTAssertEqual ( result. sorted ( ) , [ vcJwt] )
9396 }
9497
95- func test_throw_zeroCorrectCredentials ( ) throws {
98+ func test_selectTwoCorrectCredentials ( ) throws {
9699 let pd = PresentationDefinitionV2 (
97100 id: " 1234567890_e " ,
98101 name: nil ,
99102 purpose: nil ,
100103 format: nil ,
101104 submissionRequirements: nil ,
105+ inputDescriptors: [
106+ inputDescriptor, inputDescriptor3
107+ ]
108+ )
109+ let result = try PresentationExchange . selectCredentials ( vcJWTs: [ vcJwt, vcJwt2] , presentationDefinition: pd)
110+
111+ XCTAssertEqual ( result. sorted ( ) , [ vcJwt, vcJwt2] )
112+ }
113+
114+ func test_selectNoCorrectCredentials( ) throws {
115+ let pd = PresentationDefinitionV2 (
116+ id: " 1234567890_f " ,
117+ name: nil ,
118+ purpose: nil ,
119+ format: nil ,
120+ submissionRequirements: nil ,
121+ inputDescriptors: [
122+ inputDescriptor2
123+ ]
124+ )
125+ let result = try PresentationExchange . selectCredentials ( vcJWTs: [ vcJwt, vcJwt2] , presentationDefinition: pd)
126+
127+ XCTAssertEqual ( result. sorted ( ) , [ ] )
128+ }
129+
130+ func test_throwOnInsufficientCorrectCredentials( ) throws {
131+ let pd = PresentationDefinitionV2 (
132+ id: " 1234567890_g " ,
133+ name: nil ,
134+ purpose: nil ,
135+ format: nil ,
136+ submissionRequirements: nil ,
102137 inputDescriptors: [
103138 inputDescriptor, inputDescriptor2
104139 ]
105140 )
106141 XCTAssertThrowsError ( try PresentationExchange . satisfiesPresentationDefinition ( vcJWTs: [ vcJwt] , presentationDefinition: pd) )
107142 }
108143
109- func test_select_twoOfTwoCorrectCredentials ( ) throws {
144+ func test_noThrowOnSufficientCorrectCredentials ( ) throws {
110145 let pd = PresentationDefinitionV2 (
111- id: " 1234567890_f " ,
146+ id: " 1234567890_h " ,
147+ name: nil ,
148+ purpose: nil ,
149+ format: nil ,
150+ submissionRequirements: nil ,
151+ inputDescriptors: [
152+ inputDescriptor, inputDescriptor3
153+ ]
154+ )
155+ XCTAssertNoThrow ( try PresentationExchange . satisfiesPresentationDefinition ( vcJWTs: [ vcJwt] , presentationDefinition: pd) )
156+ }
157+
158+ func test_createPresentationFromCredentials( ) throws {
159+ let pd = PresentationDefinitionV2 (
160+ id: " 1234567890_e " ,
112161 name: nil ,
113162 purpose: nil ,
114163 format: nil ,
115164 submissionRequirements: nil ,
116165 inputDescriptors: [
117- inputDescriptor3
166+ inputDescriptor , inputDescriptor3
118167 ]
119168 )
120- XCTAssertThrowsError ( try PresentationExchange . satisfiesPresentationDefinition ( vcJWTs: [ vcJwt, vcJwt2] , presentationDefinition: pd) )
169+ let credentials = try PresentationExchange . selectCredentials ( vcJWTs: [ vcJwt, vcJwt2] , presentationDefinition: pd)
170+ let submission = try PresentationExchange . createPresentationFromCredentials ( vcJWTs: credentials, presentationDefinition: pd)
171+ XCTAssertNotNil ( submission. id)
172+ XCTAssertEqual ( submission. definitionID, pd. id)
173+ XCTAssertEqual ( submission. descriptorMap. count, 2 )
174+ XCTAssertEqual ( submission. descriptorMap [ 0 ] . path, " $.verifiableCredential[0] " )
175+ }
176+
177+ func test_throwsOnCreatePresentationFromInvalidCredentials( ) throws {
178+ let pd = PresentationDefinitionV2 (
179+ id: " 1234567890_e " ,
180+ name: nil ,
181+ purpose: nil ,
182+ format: nil ,
183+ submissionRequirements: nil ,
184+ inputDescriptors: [
185+ inputDescriptor, inputDescriptor3
186+ ]
187+ )
188+
189+ XCTAssertThrowsError ( try PresentationExchange . createPresentationFromCredentials ( vcJWTs: [ vcJwt2] , presentationDefinition: pd) )
121190 }
122191}
0 commit comments