@@ -5,6 +5,7 @@ import { TicketingStrategy } from '../../../src/ticketing/strategy/TicketingStra
55import { Ticket } from '../../../src/ticketing/Ticket' ;
66import { HttpHandlerContext } from '../../../src/util/http/models/HttpHandler' ;
77import * as signatures from '../../../src/util/HttpMessageSignatures' ;
8+ import { ResourceDescription } from '../../../src/views/ResourceDescription' ;
89
910vi . mock ( 'node:crypto' , ( ) => ( {
1011 randomUUID : vi . fn ( ) . mockReturnValue ( '1-2-3-4-5' ) ,
@@ -16,6 +17,7 @@ describe('Ticket', (): void => {
1617
1718 let ticketingStrategy : Mocked < TicketingStrategy > ;
1819 let ticketStore : Mocked < KeyValueStorage < string , Ticket > > ;
20+ let resourceStore : Mocked < KeyValueStorage < string , ResourceDescription > > ;
1921 let handler : TicketRequestHandler ;
2022
2123 beforeEach ( async ( ) : Promise < void > => {
@@ -33,11 +35,15 @@ describe('Ticket', (): void => {
3335 validateClaims : vi . fn ( ) ,
3436 } ;
3537
38+ resourceStore = {
39+ has : vi . fn ( ) . mockResolvedValue ( true ) ,
40+ } satisfies Partial < KeyValueStorage < string , ResourceDescription > > as any ;
41+
3642 ticketStore = {
3743 set : vi . fn ( ) ,
3844 } satisfies Partial < KeyValueStorage < string , Ticket > > as any ;
3945
40- handler = new TicketRequestHandler ( ticketingStrategy , ticketStore ) ;
46+ handler = new TicketRequestHandler ( ticketingStrategy , ticketStore , resourceStore ) ;
4147 } ) ;
4248
4349 it ( 'errors if the request is not authorized.' , async ( ) : Promise < void > => {
@@ -64,4 +70,16 @@ describe('Ticket', (): void => {
6470 expect ( ticketStore . set ) . toHaveBeenCalledTimes ( 1 ) ;
6571 expect ( ticketStore . set ) . toHaveBeenLastCalledWith ( '1-2-3-4-5' , 'ticket' ) ;
6672 } ) ;
73+
74+ it ( 'returns with invalid_resource_id if one of the targets is unknown.' , async ( ) : Promise < void > => {
75+ request . request . body = [
76+ { resource_id : 'id1' , resource_scopes : [ 'scope1' ] } ,
77+ { resource_id : 'id2' , resource_scopes : [ 'scope2' ] } ,
78+ ] ;
79+ resourceStore . has . mockResolvedValueOnce ( true ) ;
80+ resourceStore . has . mockResolvedValueOnce ( false ) ;
81+ await expect ( handler . handle ( request ) ) . resolves
82+ . toEqual ( { status : 400 , body : { error : 'invalid_resource_id' , error_description : 'Unknown UMA ID id2' } } ) ;
83+ expect ( ticketStore . set ) . toHaveBeenCalledTimes ( 0 ) ;
84+ } ) ;
6785} ) ;
0 commit comments