@@ -416,7 +416,7 @@ subtest 'revoke_login_sessions' => sub {
416
416
is_deeply $got , $mock_api_response -> {data }, ' api_call response correctly parsed' ;
417
417
418
418
@params = ();
419
- $got = $client -> revoke_login_sessions(sid => ' 1234' );
419
+ $got = $client -> revoke_login_sessions(sid => ' 1234' );
420
420
421
421
is $params [1], ' DELETE' , ' DELETE request method' ;
422
422
is $params [2], ' http://dummyhydra.com/admin/admin/oauth2/auth/sessions/login?sid=1234' , ' Request URL built with correct parameters' ;
@@ -539,6 +539,62 @@ subtest 'oidc_config' => sub {
539
539
540
540
};
541
541
542
+ subtest ' validate_token' => sub {
543
+ my $mock_hydra = Test::MockModule-> new(' WebService::Hydra::Client' );
544
+ my $mock_token = ' mock.jwt.token' ;
545
+ my $mock_oidc_config = {issuer => ' https://example.com' };
546
+ my $mock_jwks = {keys => [{kid => ' key1' , kty => ' RSA' , n => ' ...' , e => ' ...' }]};
547
+ my $mock_payload = {
548
+ sub => ' 1234567890' ,
549
+ name => ' John Doe' ,
550
+ admin => ' true'
551
+ };
552
+
553
+ $mock_hydra -> redefine(
554
+ ' decode_jwt' ,
555
+ sub {
556
+ my %args = @_ ;
557
+ if ($args {token } eq $mock_token ) {
558
+ return $mock_payload ;
559
+ } else {
560
+ die " Invalid token" ;
561
+ }
562
+ });
563
+
564
+ $mock_hydra -> redefine(
565
+ ' fetch_openid_configuration' ,
566
+ sub {
567
+ return $mock_oidc_config ;
568
+ });
569
+
570
+ $mock_hydra -> redefine(
571
+ ' fetch_jwks' ,
572
+ sub {
573
+ return $mock_jwks ;
574
+ });
575
+
576
+ my $client = WebService::Hydra::Client-> new(
577
+ admin_endpoint => ' http://dummyhydra.com/admin' ,
578
+ public_endpoint => ' http://dummyhydra.com'
579
+ );
580
+
581
+ subtest ' validate_token' => sub {
582
+ my $decoded_payload ;
583
+
584
+ lives_ok {
585
+ $decoded_payload = $client -> validate_token($mock_token );
586
+ }
587
+ ' Token validation should succeed' ;
588
+
589
+ is_deeply($decoded_payload , $mock_payload , ' Decoded payload should match expected payload' );
590
+
591
+ throws_ok {
592
+ $client -> validate_token(' invalid.token' );
593
+ }
594
+ qr / Invalid token/ , ' Invalid token should throw an exception' ;
595
+ };
596
+ };
597
+
542
598
done_testing();
543
599
544
600
1;
0 commit comments