@@ -2,15 +2,20 @@ import { describe, it, expect, vi, beforeEach } from "vitest";
22import { createMockClient , mockResponse , createTestProgram , runCommand } from "./test-helpers.js" ;
33import type { MockClient } from "./test-helpers.js" ;
44
5- vi . mock ( "../src/helpers.js" , ( ) => ( {
6- createClient : vi . fn ( ) ,
7- getFormat : vi . fn ( ) ,
8- outputResponse : vi . fn ( ) ,
9- withErrorHandler : ( fn : ( ...args : unknown [ ] ) => unknown ) => fn ,
10- SCOPES_HELP_NOTES : [ ] ,
11- API_KEY_SCOPES_HELP_NOTES : [ ] ,
12- resolveOptions : vi . fn ( ) . mockReturnValue ( { profile : "default" } ) ,
13- } ) ) ;
5+ vi . mock ( "../src/helpers.js" , async ( importOriginal ) => {
6+ const actual = await importOriginal < typeof import ( "../src/helpers.js" ) > ( ) ;
7+ return {
8+ createClient : vi . fn ( ) ,
9+ getFormat : vi . fn ( ) ,
10+ outputResponse : vi . fn ( ) ,
11+ withErrorHandler : ( fn : ( ...args : unknown [ ] ) => unknown ) => fn ,
12+ SCOPES_HELP_NOTES : [ ] ,
13+ API_KEY_SCOPES_HELP_NOTES : [ ] ,
14+ VALID_PERMISSIONS : actual . VALID_PERMISSIONS ,
15+ parsePermissions : actual . parsePermissions ,
16+ resolveOptions : vi . fn ( ) . mockReturnValue ( { profile : "default" } ) ,
17+ } ;
18+ } ) ;
1419
1520vi . mock ( "../src/input.js" , ( ) => ( {
1621 parseJsonInput : vi . fn ( ) ,
@@ -370,6 +375,38 @@ describe("admin api-keys commands", () => {
370375 }
371376 } ) ;
372377
378+ it ( "rejects invalid --permissions values" , async ( ) => {
379+ const exitSpy = vi . spyOn ( process , "exit" ) . mockImplementation ( ( ) => {
380+ throw new Error ( "process.exit" ) ;
381+ } ) ;
382+
383+ const program = makeProgram ( ) ;
384+ await expect (
385+ runCommand ( program , [ "admin" , "api-keys" , "create" , "--permissions" , "read,foo" ] )
386+ ) . rejects . toThrow ( "process.exit" ) ;
387+
388+ expect ( printError ) . toHaveBeenCalledWith (
389+ "--permissions must be a comma-separated list of: read, write, create, update, delete" ,
390+ ) ;
391+ exitSpy . mockRestore ( ) ;
392+ } ) ;
393+
394+ it ( "rejects --permissions with only invalid values" , async ( ) => {
395+ const exitSpy = vi . spyOn ( process , "exit" ) . mockImplementation ( ( ) => {
396+ throw new Error ( "process.exit" ) ;
397+ } ) ;
398+
399+ const program = makeProgram ( ) ;
400+ await expect (
401+ runCommand ( program , [ "admin" , "api-keys" , "create" , "--permissions" , "admin" ] )
402+ ) . rejects . toThrow ( "process.exit" ) ;
403+
404+ expect ( printError ) . toHaveBeenCalledWith (
405+ "--permissions must be a comma-separated list of: read, write, create, update, delete" ,
406+ ) ;
407+ exitSpy . mockRestore ( ) ;
408+ } ) ;
409+
373410 it ( "accepts valid allowedOrigins in JSON body" , async ( ) => {
374411 const body = { name : "valid-key" , allowedOrigins : [ "https://example.com" ] } ;
375412 vi . mocked ( parseJsonInput ) . mockResolvedValue ( body ) ;
0 commit comments