<?php
declare(strict_types=1);
namespace GNexus\GAuth\Tests\Unit\OAuth;
use GNexus\GAuth\Config\GAuthConfig;
use GNexus\GAuth\OAuth\AuthorizationUrlBuilder;
use PHPUnit\Framework\TestCase;
final class AuthorizationUrlBuilderTest extends TestCase
{
public function testBuildsExpectedAuthorizeUrl(): void
{
$builder = new AuthorizationUrlBuilder(new GAuthConfig(
baseUrl: 'https://auth.example.test',
clientId: 'billing',
clientSecret: 'secret',
redirectUri: 'https://billing.example.test/callback',
));
$url = $builder->build(
state: 'state123',
pkceChallenge: 'challenge123',
returnTo: '/back',
scopes: ['openid', 'profile'],
);
self::assertStringStartsWith('https://auth.example.test/oauth/authorize?', $url);
self::assertStringContainsString('client_id=billing', $url);
self::assertStringContainsString('redirect_uri=https%3A%2F%2Fbilling.example.test%2Fcallback', $url);
self::assertStringContainsString('state=state123', $url);
self::assertStringContainsString('code_challenge=challenge123', $url);
self::assertStringContainsString('scope=openid%20profile', $url);
self::assertStringContainsString('return_to=%2Fback', $url);
}
}