@@ -51,6 +51,7 @@ public function testRespondToRequest()
51
51
$ scopeEntity ->setIdentifier ('foo ' );
52
52
$ scopeRepositoryMock = $ this ->getMockBuilder (ScopeRepositoryInterface::class)->getMock ();
53
53
$ scopeRepositoryMock ->method ('getScopeEntityByIdentifier ' )->willReturn ($ scopeEntity );
54
+ $ scopeRepositoryMock ->method ('finalizeScopes ' )->willReturn ([$ scopeEntity ]);
54
55
55
56
$ accessTokenRepositoryMock = $ this ->getMockBuilder (AccessTokenRepositoryInterface::class)->getMock ();
56
57
$ accessTokenRepositoryMock ->method ('getNewToken ' )->willReturn (new AccessTokenEntity ());
@@ -107,6 +108,7 @@ public function testRespondToRequestNullRefreshToken()
107
108
108
109
$ scopeRepositoryMock = $ this ->getMockBuilder (ScopeRepositoryInterface::class)->getMock ();
109
110
$ scopeRepositoryMock ->method ('getScopeEntityByIdentifier ' )->willReturn ($ scopeEntity );
111
+ $ scopeRepositoryMock ->method ('finalizeScopes ' )->willReturn ([$ scopeEntity ]);
110
112
111
113
$ accessTokenRepositoryMock = $ this ->getMockBuilder (AccessTokenRepositoryInterface::class)->getMock ();
112
114
$ accessTokenRepositoryMock ->method ('getNewToken ' )->willReturn (new AccessTokenEntity ());
@@ -169,6 +171,7 @@ public function testRespondToReducedScopes()
169
171
$ scope ->setIdentifier ('foo ' );
170
172
$ scopeRepositoryMock = $ this ->getMockBuilder (ScopeRepositoryInterface::class)->getMock ();
171
173
$ scopeRepositoryMock ->method ('getScopeEntityByIdentifier ' )->willReturn ($ scope );
174
+ $ scopeRepositoryMock ->method ('finalizeScopes ' )->willReturn ([$ scope ]);
172
175
173
176
$ grant = new RefreshTokenGrant ($ refreshTokenRepositoryMock );
174
177
$ grant ->setClientRepository ($ clientRepositoryMock );
@@ -450,4 +453,74 @@ public function testRespondToRequestRevokedToken()
450
453
451
454
$ grant ->respondToAccessTokenRequest ($ serverRequest , $ responseType , new DateInterval ('PT5M ' ));
452
455
}
456
+
457
+ public function testRespondToRequestFinalizeScopes ()
458
+ {
459
+ $ client = new ClientEntity ();
460
+ $ client ->setIdentifier ('foo ' );
461
+ $ clientRepositoryMock = $ this ->getMockBuilder (ClientRepositoryInterface::class)->getMock ();
462
+ $ clientRepositoryMock ->method ('getClientEntity ' )->willReturn ($ client );
463
+
464
+ $ fooScopeEntity = new ScopeEntity ();
465
+ $ fooScopeEntity ->setIdentifier ('foo ' );
466
+
467
+ $ barScopeEntity = new ScopeEntity ();
468
+ $ barScopeEntity ->setIdentifier ('bar ' );
469
+
470
+ $ scopeRepositoryMock = $ this ->getMockBuilder (ScopeRepositoryInterface::class)->getMock ();
471
+ $ scopeRepositoryMock ->method ('getScopeEntityByIdentifier ' )->willReturn ($ fooScopeEntity , $ barScopeEntity );
472
+
473
+ $ accessTokenRepositoryMock = $ this ->getMockBuilder (AccessTokenRepositoryInterface::class)->getMock ();
474
+ $ accessTokenRepositoryMock ->method ('persistNewAccessToken ' )->willReturnSelf ();
475
+
476
+ $ refreshTokenRepositoryMock = $ this ->getMockBuilder (RefreshTokenRepositoryInterface::class)->getMock ();
477
+ $ refreshTokenRepositoryMock ->method ('getNewRefreshToken ' )->willReturn (new RefreshTokenEntity ());
478
+ $ refreshTokenRepositoryMock ->method ('persistNewRefreshToken ' )->willReturnSelf ();
479
+
480
+ $ grant = new RefreshTokenGrant ($ refreshTokenRepositoryMock );
481
+ $ grant ->setClientRepository ($ clientRepositoryMock );
482
+ $ grant ->setScopeRepository ($ scopeRepositoryMock );
483
+ $ grant ->setAccessTokenRepository ($ accessTokenRepositoryMock );
484
+ $ grant ->setEncryptionKey ($ this ->cryptStub ->getKey ());
485
+ $ grant ->setPrivateKey (new CryptKey ('file:// ' . __DIR__ . '/../Stubs/private.key ' ));
486
+
487
+
488
+ $ scopes = [$ fooScopeEntity , $ barScopeEntity ];
489
+ $ finalizedScopes = [$ fooScopeEntity ];
490
+
491
+ $ scopeRepositoryMock
492
+ ->expects ($ this ->once ())
493
+ ->method ('finalizeScopes ' )
494
+ ->with ($ scopes , $ grant ->getIdentifier (), $ client )
495
+ ->willReturn ($ finalizedScopes );
496
+
497
+ $ accessTokenRepositoryMock
498
+ ->method ('getNewToken ' )
499
+ ->with ($ client , $ finalizedScopes )
500
+ ->willReturn (new AccessTokenEntity ());
501
+
502
+ $ oldRefreshToken = $ this ->cryptStub ->doEncrypt (
503
+ \json_encode (
504
+ [
505
+ 'client_id ' => 'foo ' ,
506
+ 'refresh_token_id ' => 'zyxwvu ' ,
507
+ 'access_token_id ' => 'abcdef ' ,
508
+ 'scopes ' => ['foo ' , 'bar ' ],
509
+ 'user_id ' => 123 ,
510
+ 'expire_time ' => \time () + 3600 ,
511
+ ]
512
+ )
513
+ );
514
+
515
+ $ serverRequest = (new ServerRequest ())->withParsedBody ([
516
+ 'client_id ' => 'foo ' ,
517
+ 'client_secret ' => 'bar ' ,
518
+ 'refresh_token ' => $ oldRefreshToken ,
519
+ 'scope ' => ['foo ' , 'bar ' ],
520
+ ]);
521
+
522
+ $ responseType = new StubResponseType ();
523
+
524
+ $ grant ->respondToAccessTokenRequest ($ serverRequest , $ responseType , new DateInterval ('PT5M ' ));
525
+ }
453
526
}
0 commit comments