1616namespace SimpleSAML \Test \Module \oidc \unit \Repositories ;
1717
1818use DateTimeImmutable ;
19+ use DateTimeZone ;
1920use PHPUnit \Framework \MockObject \MockObject ;
2021use PHPUnit \Framework \TestCase ;
2122use RuntimeException ;
2223use SimpleSAML \Configuration ;
2324use SimpleSAML \Module \oidc \Entities \AccessTokenEntity ;
25+ use SimpleSAML \Module \oidc \Entities \RefreshTokenEntity ;
26+ use SimpleSAML \Module \oidc \Factories \Entities \RefreshTokenEntityFactory ;
2427use SimpleSAML \Module \oidc \ModuleConfig ;
2528use SimpleSAML \Module \oidc \Repositories \AccessTokenRepository ;
2629use SimpleSAML \Module \oidc \Repositories \RefreshTokenRepository ;
2730use SimpleSAML \Module \oidc \Services \DatabaseMigration ;
28- use SimpleSAML \Module \oidc \Utils \TimestampGenerator ;
2931
3032/**
3133 * @covers \SimpleSAML\Module\oidc\Repositories\RefreshTokenRepository
@@ -40,6 +42,8 @@ class RefreshTokenRepositoryTest extends TestCase
4042 protected RefreshTokenRepository $ repository ;
4143 protected MockObject $ accessTokenMock ;
4244 protected MockObject $ accessTokenRepositoryMock ;
45+ protected MockObject $ refreshTokenEntityFactoryMock ;
46+ protected MockObject $ refreshTokenEntityMock ;
4347
4448 /**
4549 * @throws \League\OAuth2\Server\Exception\UniqueTokenIdentifierConstraintViolationException
@@ -67,10 +71,14 @@ protected function setUp(): void
6771 $ this ->accessTokenMock = $ this ->createMock (AccessTokenEntity::class);
6872 $ this ->accessTokenMock ->method ('getIdentifier ' )->willReturn (self ::ACCESS_TOKEN_ID );
6973 $ this ->accessTokenRepositoryMock = $ this ->createMock (AccessTokenRepository::class);
74+ $ this ->refreshTokenEntityFactoryMock = $ this ->createMock (RefreshTokenEntityFactory::class);
75+
76+ $ this ->refreshTokenEntityMock = $ this ->createMock (RefreshTokenEntity::class);
7077
7178 $ this ->repository = new RefreshTokenRepository (
7279 new ModuleConfig (),
7380 $ this ->accessTokenRepositoryMock ,
81+ $ this ->refreshTokenEntityFactoryMock ,
7482 );
7583 }
7684
@@ -87,13 +95,19 @@ public function testGetTableName(): void
8795 */
8896 public function testAddAndFound (): void
8997 {
90- $ refreshToken = $ this -> repository -> getNewRefreshToken ();
91- $ refreshToken -> setIdentifier ( self ::REFRESH_TOKEN_ID );
92- $ refreshToken -> setExpiryDateTime ( DateTimeImmutable:: createFromMutable (TimestampGenerator:: utc ( 'yesterday ' )));
93- $ refreshToken -> setAccessToken ( $ this ->accessTokenMock );
94-
98+ $ refreshToken = new RefreshTokenEntity (
99+ self ::REFRESH_TOKEN_ID ,
100+ new DateTimeImmutable ( 'yesterday ' , new DateTimeZone ( ' UTC ' )),
101+ $ this ->accessTokenMock ,
102+ );
95103 $ this ->repository ->persistNewRefreshToken ($ refreshToken );
96104
105+ $ this ->refreshTokenEntityFactoryMock ->expects ($ this ->once ())
106+ ->method ('fromState ' )
107+ ->with ($ this ->callback (function (array $ state ): bool {
108+ return $ state ['id ' ] === self ::REFRESH_TOKEN_ID ;
109+ }))->willReturn ($ refreshToken );
110+
97111 $ this ->accessTokenRepositoryMock ->method ('findById ' )->willReturn ($ this ->accessTokenMock );
98112 $ foundRefreshToken = $ this ->repository ->findById (self ::REFRESH_TOKEN_ID );
99113
@@ -115,7 +129,17 @@ public function testAddAndNotFound(): void
115129 */
116130 public function testRevokeToken (): void
117131 {
132+ $ revokedRefreshTokenMock = $ this ->createMock (RefreshTokenEntity::class);
133+ $ revokedRefreshTokenMock ->method ('isRevoked ' )->willReturn (true );
118134 $ this ->accessTokenRepositoryMock ->method ('findById ' )->willReturn ($ this ->accessTokenMock );
135+ $ this ->refreshTokenEntityMock ->expects ($ this ->once ())->method ('revoke ' );
136+ $ this ->refreshTokenEntityFactoryMock ->expects ($ this ->atLeastOnce ())
137+ ->method ('fromState ' )
138+ ->with ($ this ->callback (function (array $ state ): bool {
139+ return $ state ['id ' ] === self ::REFRESH_TOKEN_ID ;
140+ }))
141+ ->willReturnOnConsecutiveCalls ($ this ->refreshTokenEntityMock , $ revokedRefreshTokenMock );
142+
119143 $ this ->repository ->revokeRefreshToken (self ::REFRESH_TOKEN_ID );
120144 $ isRevoked = $ this ->repository ->isRefreshTokenRevoked (self ::REFRESH_TOKEN_ID );
121145
0 commit comments