@@ -5,6 +5,7 @@ import { TicketingStrategy } from '../../../src/ticketing/strategy/TicketingStra
5
5
import { Ticket } from '../../../src/ticketing/Ticket' ;
6
6
import { HttpHandlerContext } from '../../../src/util/http/models/HttpHandler' ;
7
7
import * as signatures from '../../../src/util/HttpMessageSignatures' ;
8
+ import { ResourceDescription } from '../../../src/views/ResourceDescription' ;
8
9
9
10
vi . mock ( 'node:crypto' , ( ) => ( {
10
11
randomUUID : vi . fn ( ) . mockReturnValue ( '1-2-3-4-5' ) ,
@@ -16,6 +17,7 @@ describe('Ticket', (): void => {
16
17
17
18
let ticketingStrategy : Mocked < TicketingStrategy > ;
18
19
let ticketStore : Mocked < KeyValueStorage < string , Ticket > > ;
20
+ let resourceStore : Mocked < KeyValueStorage < string , ResourceDescription > > ;
19
21
let handler : TicketRequestHandler ;
20
22
21
23
beforeEach ( async ( ) : Promise < void > => {
@@ -33,11 +35,15 @@ describe('Ticket', (): void => {
33
35
validateClaims : vi . fn ( ) ,
34
36
} ;
35
37
38
+ resourceStore = {
39
+ has : vi . fn ( ) . mockResolvedValue ( true ) ,
40
+ } satisfies Partial < KeyValueStorage < string , ResourceDescription > > as any ;
41
+
36
42
ticketStore = {
37
43
set : vi . fn ( ) ,
38
44
} satisfies Partial < KeyValueStorage < string , Ticket > > as any ;
39
45
40
- handler = new TicketRequestHandler ( ticketingStrategy , ticketStore ) ;
46
+ handler = new TicketRequestHandler ( ticketingStrategy , ticketStore , resourceStore ) ;
41
47
} ) ;
42
48
43
49
it ( 'errors if the request is not authorized.' , async ( ) : Promise < void > => {
@@ -64,4 +70,16 @@ describe('Ticket', (): void => {
64
70
expect ( ticketStore . set ) . toHaveBeenCalledTimes ( 1 ) ;
65
71
expect ( ticketStore . set ) . toHaveBeenLastCalledWith ( '1-2-3-4-5' , 'ticket' ) ;
66
72
} ) ;
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
+ } ) ;
67
85
} ) ;
0 commit comments