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 )