1616use SimpleSAML \OpenID \Helpers ;
1717use SimpleSAML \OpenID \Jwk \JwkDecorator ;
1818use SimpleSAML \OpenID \Jwks \Factories \JwksDecoratorFactory ;
19- use SimpleSAML \OpenID \Jws \Factories \ParsedJwsFactory ;
2019use SimpleSAML \OpenID \Jws \JwsDecorator ;
2120use SimpleSAML \OpenID \Jws \JwsDecoratorBuilder ;
2221use SimpleSAML \OpenID \Jws \JwsVerifierDecorator ;
2322use SimpleSAML \OpenID \Jws \ParsedJws ;
23+ use SimpleSAML \OpenID \SdJwt \DisclosureBag ;
24+ use SimpleSAML \OpenID \SdJwt \Factories \DisclosureFactory ;
25+ use SimpleSAML \OpenID \SdJwt \Factories \SdJwtFactory ;
2426use SimpleSAML \OpenID \Serializers \JwsSerializerManagerDecorator ;
2527use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel2 \Factories \VcSdJwtFactory ;
2628use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel2 \VcSdJwt ;
2729
2830#[CoversClass(VcSdJwtFactory::class)]
29- #[UsesClass(ParsedJwsFactory ::class)]
31+ #[UsesClass(SdJwtFactory ::class)]
3032#[UsesClass(VcSdJwt::class)]
3133#[UsesClass(ParsedJws::class)]
3234#[UsesClass(DateIntervalDecorator::class)]
@@ -50,6 +52,8 @@ final class VcSdJwtFactoryTest extends TestCase
5052
5153 protected \PHPUnit \Framework \MockObject \Stub &ClaimFactory $ claimFactoryMock ;
5254
55+ protected \PHPUnit \Framework \MockObject \Stub &DisclosureFactory $ disclosureFactoryMock ;
56+
5357
5458 protected function setUp (): void
5559 {
@@ -60,6 +64,7 @@ protected function setUp(): void
6064 $ this ->dateIntervalDecorator = new DateIntervalDecorator (new \DateInterval ('PT0S ' ));
6165 $ this ->helpers = new Helpers ();
6266 $ this ->claimFactoryMock = $ this ->createStub (ClaimFactory::class);
67+ $ this ->disclosureFactoryMock = $ this ->createStub (DisclosureFactory::class);
6368 }
6469
6570
@@ -73,6 +78,7 @@ protected function sut(): VcSdJwtFactory
7378 $ this ->dateIntervalDecorator ,
7479 $ this ->helpers ,
7580 $ this ->claimFactoryMock ,
81+ $ this ->disclosureFactoryMock ,
7682 );
7783 }
7884
@@ -147,4 +153,43 @@ public function testCanBuildFromData(): void
147153 ),
148154 );
149155 }
156+
157+
158+ public function testCanBuildFromDataWithDisclosureBag (): void
159+ {
160+ $ signingKey = $ this ->createStub (JwkDecorator::class);
161+ $ signatureAlgorithm = SignatureAlgorithmEnum::RS256 ;
162+ $ payload = ['foo ' => 'bar ' ];
163+ $ header = ['alg ' => 'RS256 ' ];
164+ $ disclosureBag = $ this ->createStub (DisclosureBag::class);
165+ $ disclosureBag ->method ('all ' )->willReturn ([]);
166+
167+ $ jwsDecoratorMock = $ this ->createJwsDecoratorMock ($ payload );
168+
169+ $ this ->jwsDecoratorBuilderMock
170+ ->expects ($ this ->once ())
171+ ->method ('fromData ' )
172+ ->with (
173+ $ signingKey ,
174+ $ signatureAlgorithm ,
175+ $ payload ,
176+ $ this ->callback (function (array $ header ): true {
177+ $ this ->assertArrayHasKey (ClaimsEnum::Typ->value , $ header );
178+ $ this ->assertSame (JwtTypesEnum::VcSdJwt->value , $ header [ClaimsEnum::Typ->value ]);
179+ return true ;
180+ }),
181+ )
182+ ->willReturn ($ jwsDecoratorMock );
183+
184+ $ vcSdJwt = $ this ->sut ()->fromData (
185+ $ signingKey ,
186+ $ signatureAlgorithm ,
187+ $ payload ,
188+ $ header ,
189+ $ disclosureBag ,
190+ );
191+
192+ $ this ->assertInstanceOf (VcSdJwt::class, $ vcSdJwt );
193+ $ this ->assertSame ($ disclosureBag , $ vcSdJwt ->getDisclosureBag ());
194+ }
150195}
0 commit comments