@@ -3,8 +3,11 @@ package oidc4ci_test
33import (
44 "context"
55 "testing"
6+ "time"
67
8+ "github.com/samber/lo"
79 "github.com/stretchr/testify/assert"
10+ util "github.com/trustbloc/did-go/doc/util/time"
811 "github.com/trustbloc/vc-go/verifiable"
912
1013 "github.com/trustbloc/vcs/pkg/service/oidc4ci"
@@ -15,10 +18,16 @@ func TestComposer(t *testing.T) {
1518 srv := oidc4ci .NewCredentialComposer ()
1619
1720 cred , err := verifiable .CreateCredential (verifiable.CredentialContents {
21+ Types : []string {"VerifiableCredential" },
22+ Context : []string {
23+ "https://www.w3.org/2018/credentials/v1" ,
24+ },
1825 Subject : []verifiable.Subject {{ID : "xxx:yyy" }},
1926 }, verifiable.CustomFields {})
2027 assert .NoError (t , err )
2128
29+ expectedExpiration := time .Now ().UTC ()
30+
2231 resp , err := srv .Compose (
2332 context .TODO (),
2433 cred ,
@@ -34,6 +43,7 @@ func TestComposer(t *testing.T) {
3443 OverrideIssuer : true ,
3544 OverrideSubjectDID : true ,
3645 },
46+ CredentialExpiresAt : & expectedExpiration ,
3747 },
3848 & oidc4ci.PrepareCredentialRequest {
3949 DID : "some-awesome-did" ,
@@ -43,9 +53,69 @@ func TestComposer(t *testing.T) {
4353 assert .NoError (t , err )
4454 assert .NotNil (t , resp )
4555
56+ credJSON , err := resp .MarshalAsJSONLD ()
57+ assert .NoError (t , err )
58+
59+ parsedCred , err := verifiable .ParseCredential (credJSON ,
60+ verifiable .WithCredDisableValidation (),
61+ verifiable .WithDisabledProofCheck (),
62+ )
63+ assert .NoError (t , err )
64+
4665 assert .EqualValues (t , "hardcoded:some-awesome-id:suffix" , resp .Contents ().ID )
4766 assert .EqualValues (t , "did:example:123" , resp .Contents ().Issuer .ID )
4867 assert .EqualValues (t , "some-awesome-did" , resp .Contents ().Subject [0 ].ID )
68+ assert .EqualValues (t , expectedExpiration , parsedCred .Contents ().Expired .Time )
69+ })
70+
71+ t .Run ("success with prev-id" , func (t * testing.T ) {
72+ srv := oidc4ci .NewCredentialComposer ()
73+
74+ cred , err := verifiable .CreateCredential (verifiable.CredentialContents {
75+ ID : "some-id" ,
76+ Expired : util .NewTime (time .Now ()),
77+ Issuer : & verifiable.Issuer {
78+ ID : "did:example:123" ,
79+ CustomFields : map [string ]interface {}{
80+ "key" : "value" ,
81+ "name" : "issuer" ,
82+ },
83+ },
84+ Subject : []verifiable.Subject {{ID : "xxx:yyy" }},
85+ }, verifiable.CustomFields {})
86+ assert .NoError (t , err )
87+
88+ resp , err := srv .Compose (
89+ context .TODO (),
90+ cred ,
91+ & oidc4ci.Transaction {
92+ ID : "some-awesome-id" ,
93+ TransactionData : oidc4ci.TransactionData {
94+ DID : "did:example:123" ,
95+ },
96+ },
97+ & oidc4ci.TxCredentialConfiguration {
98+ CredentialComposeConfiguration : & oidc4ci.CredentialComposeConfiguration {
99+ IDTemplate : "{{.CredentialID}}:suffix" ,
100+ OverrideIssuer : true ,
101+ OverrideSubjectDID : true ,
102+ },
103+ CredentialExpiresAt : lo .ToPtr (time .Now ()),
104+ },
105+ & oidc4ci.PrepareCredentialRequest {
106+ DID : "some-awesome-did" ,
107+ },
108+ )
109+
110+ assert .NoError (t , err )
111+ assert .NotNil (t , resp )
112+
113+ assert .EqualValues (t , "some-id:suffix" , resp .Contents ().ID )
114+ assert .EqualValues (t , "did:example:123" , resp .Contents ().Issuer .ID )
115+ assert .EqualValues (t , "value" , resp .Contents ().Issuer .CustomFields ["key" ])
116+ assert .EqualValues (t , "issuer" , resp .Contents ().Issuer .CustomFields ["name" ])
117+
118+ assert .EqualValues (t , "some-awesome-did" , resp .Contents ().Subject [0 ].ID )
49119 })
50120
51121 t .Run ("invalid template" , func (t * testing.T ) {
0 commit comments