Catalyst-Plugin-OAuth2-AuthorizationServer
view release on metacpan or search on metacpan
t/server-token-mint.t view on Meta::CPAN
use v5.36;
use Test::More;
use Test::Fatal;
use Crypt::JWT qw/decode_jwt/;
my $class = 'Catalyst::Plugin::OAuth2::AuthorizationServer::Server';
require_ok($class);
# a trivial stub store object (no methods exercised here)
package T::Store { use Moo;
with 'Catalyst::Plugin::OAuth2::AuthorizationServer::Role::Store';
sub create_client {} sub find_client {}
sub save_authorization_request {} sub take_authorization_request {}
sub create_auth_code {} sub consume_auth_code {}
sub create_refresh_token {} sub rotate_refresh_token {}
sub revoke_family {} sub revoke_refresh_tokens_for_subject {}
}
package main;
my $key = 'test-signing-key-0123456789abcdef';
my $eng = $class->new(
store => T::Store->new,
signing_key => $key,
issuer => 'https://as.example',
resource => 'https://rs.example/mcp',
);
# BUILD validation
like(
exception {
$class->new( store => T::Store->new, signing_key => $key,
issuer => 'i', resource => [] );
},
qr/resource/,
'empty resource arrayref rejected'
);
like(
exception {
$class->new( store => T::Store->new, signing_key => $key,
issuer => 'i', resource => 'r', access_ttl => 0 );
},
qr/access_ttl/,
'non-positive access_ttl rejected'
);
like(
exception {
$class->new( store => T::Store->new, signing_key => $key,
issuer => 'i', resource => 'r', refresh_ttl => -1 );
},
qr/refresh_ttl/,
'negative refresh_ttl rejected'
);
like(
exception {
$class->new( store => T::Store->new, signing_key => $key,
issuer => 'i', resource => 'r', code_ttl => 0 );
},
qr/code_ttl/,
'non-positive code_ttl rejected'
);
# mint a token and verify the claims round-trip with the same key
my $before = time;
( run in 0.996 second using v1.01-cache-2.11-cpan-54e63673c56 )