77use League \OAuth2 \Client \Token \AccessToken ;
88use PHPUnit \Framework \Assert ;
99use Tempest \Auth \OAuth \OAuthClient ;
10+ use Tempest \Auth \OAuth \OAuthConfig ;
1011use Tempest \Auth \OAuth \OAuthUser ;
12+ use Tempest \Router \UriGenerator ;
13+ use Tempest \Support \Arr ;
1114use Tempest \Support \Random ;
1215use Tempest \Support \Str ;
13- use UnitEnum ;
1416
1517final class TestingOAuthClient implements OAuthClient
1618{
1719 private ?string $ state = null ;
1820
19- private ?string $ baseUrl = null ;
21+ private(set) ?string $ baseUrl = null ;
2022
21- private ?string $ clientId = null ;
23+ public string $ clientId {
24+ get => $ this ->clientId ?? $ this ->config ->clientId ;
25+ }
2226
23- private ?string $ redirectUri = null ;
27+ /**
28+ * The application URI to redirect to after authorization.
29+ */
30+ public string $ redirectUri {
31+ get => $ this ->uri ->createUri ($ this ->redirectUri ?? $ this ->config ->redirectUri );
32+ }
33+
34+ /**
35+ * The last authorization URL that was generated by the client.
36+ */
37+ public ?string $ lastAuthorizationUrl {
38+ get => Arr \last ($ this ->authorizationUrls )['url ' ] ?? null ;
39+ }
2440
2541 private array $ authorizationUrls = [];
2642
@@ -29,17 +45,21 @@ final class TestingOAuthClient implements OAuthClient
2945 private array $ callbacks = [];
3046
3147 public function __construct (
32- private OAuthUser $ user ,
33- private readonly null |UnitEnum |string $ tag = null ,
48+ private(set) OAuthUser $ user ,
49+ private(set) OAuthConfig $ config ,
50+ private UriGenerator $ uri ,
3451 ) {}
3552
3653 public function getAuthorizationUrl (array $ scopes = [], array $ options = []): string
3754 {
3855 $ this ->state = Random \secure_string (16 );
3956
57+ $ provider = $ this ->config ->createProvider ();
58+ $ provider ->getBaseAuthorizationUrl ();
59+
4060 $ url = sprintf (
4161 '%s/oauth/authorize?redirect_uri=%s&client_id=%s&state=%s ' ,
42- $ this ->baseUrl ,
62+ $ this ->baseUrl ?? $ provider -> getBaseAuthorizationUrl () ,
4363 $ this ->redirectUri ,
4464 $ this ->clientId ,
4565 $ this ->state ,
@@ -143,7 +163,7 @@ public function assertAuthorizationUrlGenerated(?array $scopes = null, ?array $o
143163 Assert::assertNotEmpty ($ this ->authorizationUrls , 'No authorization URL was generated. ' );
144164
145165 if ($ options !== null ) {
146- $ lastUrl = end ($ this ->authorizationUrls );
166+ $ lastUrl = Arr \last ($ this ->authorizationUrls );
147167
148168 Assert::assertEquals (
149169 expected: $ options ,
@@ -153,7 +173,7 @@ public function assertAuthorizationUrlGenerated(?array $scopes = null, ?array $o
153173 }
154174
155175 if ($ scopes !== null ) {
156- $ lastUrl = end ($ this ->authorizationUrls );
176+ $ lastUrl = Arr \last ($ this ->authorizationUrls );
157177
158178 Assert::assertEquals (
159179 expected: $ scopes ,
0 commit comments