14
14
use League \Bundle \OAuth2ServerBundle \OAuth2Events ;
15
15
use League \Bundle \OAuth2ServerBundle \Tests \Fixtures \FixtureFactory ;
16
16
use League \Bundle \OAuth2ServerBundle \Tests \TestHelper ;
17
+ use League \OAuth2 \Server \RequestAccessTokenEvent ;
18
+ use League \OAuth2 \Server \RequestEvent ;
19
+ use League \OAuth2 \Server \RequestRefreshTokenEvent ;
17
20
18
21
final class TokenEndpointTest extends AbstractAcceptanceTest
19
22
{
@@ -32,19 +35,26 @@ protected function setUp(): void
32
35
33
36
public function testSuccessfulClientCredentialsRequest (): void
34
37
{
38
+ $ eventDispatcher = $ this ->client ->getContainer ()->get ('event_dispatcher ' );
39
+
40
+ $ eventDispatcher ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
41
+ $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
42
+ });
43
+
44
+ $ wasRequestAccessTokenEventDispatched = false ;
45
+ $ accessToken = null ;
46
+
47
+ $ eventDispatcher ->addListener (RequestEvent::ACCESS_TOKEN_ISSUED , static function (RequestAccessTokenEvent $ event ) use (&$ wasRequestAccessTokenEventDispatched , &$ accessToken ): void {
48
+ $ wasRequestAccessTokenEventDispatched = true ;
49
+ $ accessToken = $ event ->getAccessToken ();
50
+ });
51
+
35
52
$ this ->client ->request ('POST ' , '/token ' , [
36
53
'client_id ' => 'foo ' ,
37
54
'client_secret ' => 'secret ' ,
38
55
'grant_type ' => 'client_credentials ' ,
39
56
]);
40
57
41
- $ this ->client
42
- ->getContainer ()
43
- ->get ('event_dispatcher ' )
44
- ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
45
- $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
46
- });
47
-
48
58
$ response = $ this ->client ->getResponse ();
49
59
50
60
$ this ->assertSame (200 , $ response ->getStatusCode ());
@@ -56,24 +66,41 @@ public function testSuccessfulClientCredentialsRequest(): void
56
66
$ this ->assertLessThanOrEqual (3600 , $ jsonResponse ['expires_in ' ]);
57
67
$ this ->assertGreaterThan (0 , $ jsonResponse ['expires_in ' ]);
58
68
$ this ->assertNotEmpty ($ jsonResponse ['access_token ' ]);
59
- $ this ->assertEmpty ($ response ->headers ->get ('foo ' ), 'bar ' );
69
+ $ this ->assertArrayNotHasKey ('refresh_token ' , $ jsonResponse );
70
+ $ this ->assertSame ('bar ' , $ response ->headers ->get ('foo ' ));
71
+
72
+ $ this ->assertTrue ($ wasRequestAccessTokenEventDispatched );
73
+
74
+ $ this ->assertSame ('foo ' , $ accessToken ->getClient ()->getIdentifier ());
75
+ $ this ->assertNull ($ accessToken ->getUserIdentifier ());
60
76
}
61
77
62
78
public function testSuccessfulPasswordRequest (): void
63
79
{
64
- $ this ->client
65
- ->getContainer ()
66
- ->get ('event_dispatcher ' )
67
- ->addListener (OAuth2Events::USER_RESOLVE , static function (UserResolveEvent $ event ): void {
68
- $ event ->setUser (FixtureFactory::createUser ());
69
- });
80
+ $ eventDispatcher = $ this ->client ->getContainer ()->get ('event_dispatcher ' );
70
81
71
- $ this ->client
72
- ->getContainer ()
73
- ->get ('event_dispatcher ' )
74
- ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
75
- $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
76
- });
82
+ $ eventDispatcher ->addListener (OAuth2Events::USER_RESOLVE , static function (UserResolveEvent $ event ): void {
83
+ $ event ->setUser (FixtureFactory::createUser ());
84
+ });
85
+
86
+ $ eventDispatcher ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
87
+ $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
88
+ });
89
+
90
+ $ wasRequestAccessTokenEventDispatched = false ;
91
+ $ wasRequestRefreshTokenEventDispatched = false ;
92
+ $ accessToken = null ;
93
+ $ refreshToken = null ;
94
+
95
+ $ eventDispatcher ->addListener (RequestEvent::ACCESS_TOKEN_ISSUED , static function (RequestAccessTokenEvent $ event ) use (&$ wasRequestAccessTokenEventDispatched , &$ accessToken ): void {
96
+ $ wasRequestAccessTokenEventDispatched = true ;
97
+ $ accessToken = $ event ->getAccessToken ();
98
+ });
99
+
100
+ $ eventDispatcher ->addListener (RequestEvent::REFRESH_TOKEN_ISSUED , static function (RequestRefreshTokenEvent $ event ) use (&$ wasRequestRefreshTokenEventDispatched , &$ refreshToken ): void {
101
+ $ wasRequestRefreshTokenEventDispatched = true ;
102
+ $ refreshToken = $ event ->getRefreshToken ();
103
+ });
77
104
78
105
$ this ->client ->request ('POST ' , '/token ' , [
79
106
'client_id ' => 'foo ' ,
@@ -96,6 +123,13 @@ public function testSuccessfulPasswordRequest(): void
96
123
$ this ->assertNotEmpty ($ jsonResponse ['access_token ' ]);
97
124
$ this ->assertNotEmpty ($ jsonResponse ['refresh_token ' ]);
98
125
$ this ->assertSame ($ response ->headers ->get ('foo ' ), 'bar ' );
126
+
127
+ $ this ->assertTrue ($ wasRequestAccessTokenEventDispatched );
128
+ $ this ->assertTrue ($ wasRequestRefreshTokenEventDispatched );
129
+
130
+ $ this ->assertSame ('foo ' , $ accessToken ->getClient ()->getIdentifier ());
131
+ $ this ->assertSame ('user ' , $ accessToken ->getUserIdentifier ());
132
+ $ this ->assertSame ($ accessToken ->getIdentifier (), $ refreshToken ->getAccessToken ()->getIdentifier ());
99
133
}
100
134
101
135
public function testSuccessfulRefreshTokenRequest (): void
@@ -105,24 +139,35 @@ public function testSuccessfulRefreshTokenRequest(): void
105
139
->get (RefreshTokenManagerInterface::class)
106
140
->find (FixtureFactory::FIXTURE_REFRESH_TOKEN );
107
141
108
- $ this ->client
109
- ->getContainer ()
110
- ->get ('event_dispatcher ' )
111
- ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
112
- $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
113
- });
142
+ $ eventDispatcher = $ this ->client ->getContainer ()->get ('event_dispatcher ' );
114
143
115
- $ this ->client
116
- ->getContainer ()
117
- ->get ('event_dispatcher ' )
118
- ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
119
- if ('bar ' === $ event ->getResponse ()->headers ->get ('foo ' )) {
120
- $ newResponse = clone $ event ->getResponse ();
121
- $ newResponse ->headers ->remove ('foo ' );
122
- $ newResponse ->headers ->set ('baz ' , 'qux ' );
123
- $ event ->setResponse ($ newResponse );
124
- }
125
- }, -1 );
144
+ $ eventDispatcher ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
145
+ $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
146
+ });
147
+
148
+ $ eventDispatcher ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
149
+ if ('bar ' === $ event ->getResponse ()->headers ->get ('foo ' )) {
150
+ $ newResponse = clone $ event ->getResponse ();
151
+ $ newResponse ->headers ->remove ('foo ' );
152
+ $ newResponse ->headers ->set ('baz ' , 'qux ' );
153
+ $ event ->setResponse ($ newResponse );
154
+ }
155
+ }, -1 );
156
+
157
+ $ wasRequestAccessTokenEventDispatched = false ;
158
+ $ wasRequestRefreshTokenEventDispatched = false ;
159
+ $ accessToken = null ;
160
+ $ refreshTokenEntity = null ;
161
+
162
+ $ eventDispatcher ->addListener (RequestEvent::ACCESS_TOKEN_ISSUED , static function (RequestAccessTokenEvent $ event ) use (&$ wasRequestAccessTokenEventDispatched , &$ accessToken ): void {
163
+ $ wasRequestAccessTokenEventDispatched = true ;
164
+ $ accessToken = $ event ->getAccessToken ();
165
+ });
166
+
167
+ $ eventDispatcher ->addListener (RequestEvent::REFRESH_TOKEN_ISSUED , static function (RequestRefreshTokenEvent $ event ) use (&$ wasRequestRefreshTokenEventDispatched , &$ refreshTokenEntity ): void {
168
+ $ wasRequestRefreshTokenEventDispatched = true ;
169
+ $ refreshTokenEntity = $ event ->getRefreshToken ();
170
+ });
126
171
127
172
$ this ->client ->request ('POST ' , '/token ' , [
128
173
'client_id ' => 'foo ' ,
@@ -145,6 +190,12 @@ public function testSuccessfulRefreshTokenRequest(): void
145
190
$ this ->assertNotEmpty ($ jsonResponse ['refresh_token ' ]);
146
191
$ this ->assertFalse ($ response ->headers ->has ('foo ' ));
147
192
$ this ->assertSame ($ response ->headers ->get ('baz ' ), 'qux ' );
193
+
194
+ $ this ->assertTrue ($ wasRequestAccessTokenEventDispatched );
195
+ $ this ->assertTrue ($ wasRequestRefreshTokenEventDispatched );
196
+
197
+ $ this ->assertSame ($ refreshToken ->getAccessToken ()->getClient ()->getIdentifier (), $ accessToken ->getClient ()->getIdentifier ());
198
+ $ this ->assertSame ($ accessToken ->getIdentifier (), $ refreshTokenEntity ->getAccessToken ()->getIdentifier ());
148
199
}
149
200
150
201
public function testSuccessfulAuthorizationCodeRequest (): void
@@ -190,12 +241,26 @@ public function testSuccessfulAuthorizationCodeRequestWithPublicClient(): void
190
241
->get (AuthorizationCodeManagerInterface::class)
191
242
->find (FixtureFactory::FIXTURE_AUTH_CODE_PUBLIC_CLIENT );
192
243
193
- $ this ->client
194
- ->getContainer ()
195
- ->get ('event_dispatcher ' )
196
- ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
197
- $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
198
- });
244
+ $ eventDispatcher = $ this ->client ->getContainer ()->get ('event_dispatcher ' );
245
+
246
+ $ eventDispatcher ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
247
+ $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
248
+ });
249
+
250
+ $ wasRequestAccessTokenEventDispatched = false ;
251
+ $ wasRequestRefreshTokenEventDispatched = false ;
252
+ $ accessToken = null ;
253
+ $ refreshToken = null ;
254
+
255
+ $ eventDispatcher ->addListener (RequestEvent::ACCESS_TOKEN_ISSUED , static function (RequestAccessTokenEvent $ event ) use (&$ wasRequestAccessTokenEventDispatched , &$ accessToken ): void {
256
+ $ wasRequestAccessTokenEventDispatched = true ;
257
+ $ accessToken = $ event ->getAccessToken ();
258
+ });
259
+
260
+ $ eventDispatcher ->addListener (RequestEvent::REFRESH_TOKEN_ISSUED , static function (RequestRefreshTokenEvent $ event ) use (&$ wasRequestRefreshTokenEventDispatched , &$ refreshToken ): void {
261
+ $ wasRequestRefreshTokenEventDispatched = true ;
262
+ $ refreshToken = $ event ->getRefreshToken ();
263
+ });
199
264
200
265
$ this ->client ->request ('POST ' , '/token ' , [
201
266
'client_id ' => FixtureFactory::FIXTURE_PUBLIC_CLIENT ,
@@ -215,7 +280,15 @@ public function testSuccessfulAuthorizationCodeRequestWithPublicClient(): void
215
280
$ this ->assertLessThanOrEqual (3600 , $ jsonResponse ['expires_in ' ]);
216
281
$ this ->assertGreaterThan (0 , $ jsonResponse ['expires_in ' ]);
217
282
$ this ->assertNotEmpty ($ jsonResponse ['access_token ' ]);
283
+ $ this ->assertNotEmpty ($ jsonResponse ['refresh_token ' ]);
218
284
$ this ->assertSame ($ response ->headers ->get ('foo ' ), 'bar ' );
285
+
286
+ $ this ->assertTrue ($ wasRequestAccessTokenEventDispatched );
287
+ $ this ->assertTrue ($ wasRequestRefreshTokenEventDispatched );
288
+
289
+ $ this ->assertSame ($ authCode ->getClient ()->getIdentifier (), $ accessToken ->getClient ()->getIdentifier ());
290
+ $ this ->assertSame ($ authCode ->getUserIdentifier (), $ accessToken ->getUserIdentifier ());
291
+ $ this ->assertSame ($ accessToken ->getIdentifier (), $ refreshToken ->getAccessToken ()->getIdentifier ());
219
292
}
220
293
221
294
public function testFailedTokenRequest (): void
@@ -236,19 +309,24 @@ public function testFailedTokenRequest(): void
236
309
237
310
public function testFailedClientCredentialsTokenRequest (): void
238
311
{
312
+ $ eventDispatcher = $ this ->client ->getContainer ()->get ('event_dispatcher ' );
313
+
314
+ $ eventDispatcher ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
315
+ $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
316
+ });
317
+
318
+ $ wasClientAuthenticationEventDispatched = false ;
319
+
320
+ $ eventDispatcher ->addListener (RequestEvent::CLIENT_AUTHENTICATION_FAILED , static function (RequestEvent $ event ) use (&$ wasClientAuthenticationEventDispatched , &$ accessToken ): void {
321
+ $ wasClientAuthenticationEventDispatched = true ;
322
+ });
323
+
239
324
$ this ->client ->request ('POST ' , '/token ' , [
240
325
'client_id ' => 'foo ' ,
241
326
'client_secret ' => 'wrong ' ,
242
327
'grant_type ' => 'client_credentials ' ,
243
328
]);
244
329
245
- $ this ->client
246
- ->getContainer ()
247
- ->get ('event_dispatcher ' )
248
- ->addListener (OAuth2Events::TOKEN_REQUEST_RESOLVE , static function (TokenRequestResolveEvent $ event ): void {
249
- $ event ->getResponse ()->headers ->set ('foo ' , 'bar ' );
250
- });
251
-
252
330
$ response = $ this ->client ->getResponse ();
253
331
254
332
$ this ->assertSame (401 , $ response ->getStatusCode ());
@@ -258,6 +336,8 @@ public function testFailedClientCredentialsTokenRequest(): void
258
336
259
337
$ this ->assertSame ('invalid_client ' , $ jsonResponse ['error ' ]);
260
338
$ this ->assertSame ('Client authentication failed ' , $ jsonResponse ['message ' ]);
261
- $ this ->assertEmpty ($ response ->headers ->get ('foo ' ), 'bar ' );
339
+ $ this ->assertSame ('bar ' , $ response ->headers ->get ('foo ' ));
340
+
341
+ $ this ->assertTrue ($ wasClientAuthenticationEventDispatched );
262
342
}
263
343
}
0 commit comments