|
4 | 4 |
|
5 | 5 | use Saloon\Http\Request; |
6 | 6 | use Saloon\Http\Response; |
7 | | -use Saloon\Tests\Helpers\Date; |
8 | 7 | use Saloon\Http\Faking\MockClient; |
9 | 8 | use Saloon\Http\Faking\MockResponse; |
| 9 | +use Saloon\Tests\Helpers\FrozenClock; |
10 | 10 | use Saloon\Http\OAuth2\GetUserRequest; |
11 | 11 | use Saloon\Exceptions\InvalidStateException; |
12 | 12 | use Saloon\Http\OAuth2\GetAccessTokenRequest; |
|
97 | 97 | MockResponse::make(['access_token' => 'access', 'refresh_token' => 'refresh', 'expires_in' => 3600], 200), |
98 | 98 | ]); |
99 | 99 |
|
100 | | - $connector = new OAuth2Connector; |
| 100 | + $frozenClock = FrozenClock::fromString('2024-01-01T12:00:00+00:00'); |
| 101 | + $connector = new OAuth2Connector($frozenClock); |
101 | 102 |
|
102 | 103 | $connector->withMockClient($mockClient); |
103 | 104 |
|
|
107 | 108 | expect($authenticator->getAccessToken())->toEqual('access'); |
108 | 109 | expect($authenticator->getRefreshToken())->toEqual('refresh'); |
109 | 110 | expect($authenticator->getExpiresAt())->toBeInstanceOf(DateTimeImmutable::class); |
| 111 | + expect($authenticator->getExpiresAt()->getTimestamp() - $frozenClock->now()->getTimestamp())->toEqual(3600); |
110 | 112 | }); |
111 | 113 |
|
112 | 114 | test('you can tap into the access token request and modify it', function () { |
|
151 | 153 | $connector = new OAuth2Connector; |
152 | 154 |
|
153 | 155 | $state = 'secret'; |
154 | | - $url = $connector->getAuthorizationUrl(['scope-1', 'scope-2'], $state); |
| 156 | + $connector->getAuthorizationUrl(['scope-1', 'scope-2'], $state); |
155 | 157 |
|
156 | 158 | $connector->getAccessToken('code', 'invalid', $state); |
157 | 159 | })->throws(InvalidStateException::class, 'Invalid state.'); |
|
161 | 163 | MockResponse::make(['access_token' => 'access-new', 'refresh_token' => 'refresh-new', 'expires_in' => 3600]), |
162 | 164 | ]); |
163 | 165 |
|
164 | | - $connector = new OAuth2Connector; |
| 166 | + $frozenClock = FrozenClock::fromString('2024-01-01T12:00:00+00:00'); |
| 167 | + $connector = new OAuth2Connector($frozenClock); |
165 | 168 |
|
166 | 169 | $connector->withMockClient($mockClient); |
167 | 170 |
|
168 | | - $authenticator = new AccessTokenAuthenticator('access', 'refresh', Date::now()->addSeconds(3600)->toDateTime()); |
| 171 | + $authenticator = new AccessTokenAuthenticator('access', 'refresh', $frozenClock->addSeconds(3600), $frozenClock); |
169 | 172 |
|
170 | 173 | $newAuthenticator = $connector->refreshAccessToken($authenticator); |
171 | 174 |
|
172 | 175 | expect($newAuthenticator)->toBeInstanceOf(AccessTokenAuthenticator::class); |
173 | 176 | expect($newAuthenticator->getAccessToken())->toEqual('access-new'); |
174 | 177 | expect($newAuthenticator->getRefreshToken())->toEqual('refresh-new'); |
175 | 178 | expect($newAuthenticator->getExpiresAt())->toBeInstanceOf(DateTimeImmutable::class); |
| 179 | + expect($newAuthenticator->getExpiresAt()->getTimestamp() - $frozenClock->now()->getTimestamp())->toEqual(3600); |
176 | 180 | }); |
177 | 181 |
|
178 | 182 | test('you can tap into the refresh token request', function () { |
|
184 | 188 |
|
185 | 189 | $connector->withMockClient($mockClient); |
186 | 190 |
|
187 | | - $authenticator = new AccessTokenAuthenticator('access', 'refresh', Date::now()->addSeconds(3600)->toDateTime()); |
| 191 | + $authenticator = new AccessTokenAuthenticator('access', 'refresh', FrozenClock::fromString('2024-01-01T12:00:00+00:00')->addSeconds(3600)); |
188 | 192 |
|
189 | 193 | $newAuthenticator = $connector->refreshAccessToken($authenticator, requestModifier: function (Request $request) { |
190 | 194 | $request->query()->add('yee', 'haw'); |
|
209 | 213 |
|
210 | 214 | $connector->withMockClient($mockClient); |
211 | 215 |
|
212 | | - $authenticator = new AccessTokenAuthenticator('access', null, Date::now()->addSeconds(3600)->toDateTime()); |
| 216 | + $authenticator = new AccessTokenAuthenticator('access', null, FrozenClock::fromString('2024-01-01T12:00:00+00:00')->addSeconds(3600)); |
213 | 217 |
|
214 | 218 | $this->expectException(InvalidArgumentException::class); |
215 | 219 | $this->expectExceptionMessage('The provided OAuthAuthenticator does not contain a refresh token.'); |
|
226 | 230 |
|
227 | 231 | $connector->withMockClient($mockClient); |
228 | 232 |
|
229 | | - $authenticator = new AccessTokenAuthenticator('access', 'refresh', Date::now()->addSeconds(3600)->toDateTime()); |
| 233 | + $authenticator = new AccessTokenAuthenticator('access', 'refresh', FrozenClock::fromString('2024-01-01T12:00:00+00:00')->addSeconds(3600)); |
230 | 234 |
|
231 | 235 | $response = $connector->refreshAccessToken($authenticator, true); |
232 | 236 |
|
|
242 | 246 | $connector = new OAuth2Connector; |
243 | 247 | $connector->withMockClient($mockClient); |
244 | 248 |
|
245 | | - $accessToken = new AccessTokenAuthenticator('access', 'refresh', Date::now()->addSeconds(3600)->toDateTime()); |
| 249 | + $accessToken = new AccessTokenAuthenticator('access', 'refresh', FrozenClock::fromString('2024-01-01T12:00:00+00:00')->addSeconds(3600)); |
246 | 250 |
|
247 | 251 | $response = $connector->getUser($accessToken); |
248 | 252 |
|
|
265 | 269 | $connector = new OAuth2Connector; |
266 | 270 | $connector->withMockClient($mockClient); |
267 | 271 |
|
268 | | - $accessToken = new AccessTokenAuthenticator('access', 'refresh', Date::now()->addSeconds(3600)->toDateTime()); |
| 272 | + $accessToken = new AccessTokenAuthenticator('access', 'refresh', FrozenClock::fromString('2024-01-01T12:00:00+00:00')->addSeconds(3600)); |
269 | 273 |
|
270 | 274 | $response = $connector->getUser($accessToken, function (Request $request) { |
271 | 275 | $request->query()->add('yee', 'haw'); |
|
305 | 309 | GetUserRequest::class => MockResponse::make(['user' => 'Sam']), |
306 | 310 | ]); |
307 | 311 |
|
308 | | - $connector = new OAuth2Connector; |
| 312 | + $frozenClock = FrozenClock::fromString('2024-01-01T12:00:00+00:00'); |
| 313 | + $connector = new OAuth2Connector($frozenClock); |
309 | 314 | $requests = []; |
310 | 315 |
|
311 | 316 | $connector->oauthConfig()->setRequestModifier(function (Request $request) use (&$requests) { |
|
326 | 331 | expect($authenticator->getAccessToken())->toEqual('access'); |
327 | 332 | expect($authenticator->getRefreshToken())->toEqual('refresh'); |
328 | 333 | expect($authenticator->getExpiresAt())->toBeInstanceOf(DateTimeImmutable::class); |
| 334 | + expect($authenticator->getExpiresAt()->getTimestamp() - $frozenClock->now()->getTimestamp())->toEqual(3600); |
329 | 335 | expect($mockClient->getLastPendingRequest()->query()->all())->toEqual(['request' => 'access']); |
330 | 336 |
|
331 | 337 | $newAuthenticator = $connector->refreshAccessToken($authenticator); |
|
334 | 340 | expect($newAuthenticator->getAccessToken())->toEqual('access-new'); |
335 | 341 | expect($newAuthenticator->getRefreshToken())->toEqual('refresh-new'); |
336 | 342 | expect($newAuthenticator->getExpiresAt())->toBeInstanceOf(DateTimeImmutable::class); |
| 343 | + expect($authenticator->getExpiresAt()->getTimestamp() - $frozenClock->now()->getTimestamp())->toEqual(3600); |
337 | 344 | expect($mockClient->getLastPendingRequest()->query()->all())->toEqual(['request' => 'refresh']); |
338 | 345 |
|
339 | 346 | $response = $connector->getUser($newAuthenticator); |
|
0 commit comments