11import { describe , expect , test } from "vite-plus/test" ;
2- import { runCommandE2e , runCommandHelp } from "./helpers.ts" ;
2+ import { parseStdoutJson , runCommandHelp , runCommandInProcess } from "./helpers.ts" ;
33import { USAGE_ROUTES } from "./topic-routes.ts" ;
44
5+ /** Clear host OpenAPI env so console auth cannot exchange a local AK/SK into a session. */
6+ const CLEAR_OPENAPI_ENV = {
7+ BAILIAN_ACCESS_KEY_ID : undefined ,
8+ BAILIAN_ACCESS_KEY_SECRET : undefined ,
9+ ALIBABA_CLOUD_ACCESS_KEY_ID : undefined ,
10+ ALIBABA_CLOUD_ACCESS_KEY_SECRET : undefined ,
11+ } ;
12+
513describe ( "e2e: usage freetier" , ( ) => {
614 test ( "usage freetier --help 展示 risk、--yes 与确认示例" , async ( ) => {
715 const { stderr, exitCode } = await runCommandHelp ( USAGE_ROUTES , [
@@ -19,7 +27,7 @@ describe("e2e: usage freetier", () => {
1927 } ) ;
2028
2129 test ( "usage freetier 无 --yes 返回确认请求 (7)" , async ( ) => {
22- const { stderr, exitCode } = await runCommandE2e ( USAGE_ROUTES , [
30+ const { stderr, exitCode } = await runCommandInProcess ( USAGE_ROUTES , [
2331 "usage" ,
2432 "freetier" ,
2533 "--model" ,
@@ -34,20 +42,54 @@ describe("e2e: usage freetier", () => {
3442 } ) ;
3543
3644 test ( "usage freetier --yes 通过确认门槛后落到 AUTH (3)" , async ( ) => {
37- // Clear OpenAPI env so console auth cannot exchange a host AK/SK into a session.
38- const { stderr, exitCode } = await runCommandE2e (
45+ const { stderr, exitCode } = await runCommandInProcess (
3946 USAGE_ROUTES ,
4047 [ "usage" , "freetier" , "--model" , "qwen-plus" , "--yes" , "--output" , "json" ] ,
41- {
42- BAILIAN_ACCESS_KEY_ID : undefined ,
43- BAILIAN_ACCESS_KEY_SECRET : undefined ,
44- ALIBABA_CLOUD_ACCESS_KEY_ID : undefined ,
45- ALIBABA_CLOUD_ACCESS_KEY_SECRET : undefined ,
46- } ,
48+ CLEAR_OPENAPI_ENV ,
4749 ) ;
4850 expect ( exitCode ) . toBe ( 3 ) ;
4951 expect ( JSON . parse ( stderr ) ) . toMatchObject ( {
5052 error : { code : 3 } ,
5153 } ) ;
5254 } ) ;
55+
56+ test ( "usage freetier --dry-run 跳过确认并输出计划(零网络)" , async ( ) => {
57+ const { stdout, stderr, exitCode } = await runCommandInProcess ( USAGE_ROUTES , [
58+ "usage" ,
59+ "freetier" ,
60+ "--model" ,
61+ "qwen-plus" ,
62+ "--dry-run" ,
63+ "--output" ,
64+ "json" ,
65+ ] ) ;
66+ expect ( exitCode , stderr ) . toBe ( 0 ) ;
67+ expect ( stderr ) . not . toContain ( "requires_confirmation" ) ;
68+ const data = parseStdoutJson < {
69+ api : string ;
70+ data : { BatchActivateFreeTierOnlyRequest : { models : string [ ] } } ;
71+ } > ( stdout ) ;
72+ expect ( data . api ) . toBe ( "zeldaEasy.bailian-commerce.freeTrial.batchActivateFreeTierOnly" ) ;
73+ expect ( data . data . BatchActivateFreeTierOnlyRequest . models ) . toEqual ( [ "qwen-plus" ] ) ;
74+ } ) ;
75+
76+ test ( "usage freetier --off --dry-run 输出停用计划" , async ( ) => {
77+ const { stdout, stderr, exitCode } = await runCommandInProcess ( USAGE_ROUTES , [
78+ "usage" ,
79+ "freetier" ,
80+ "--off" ,
81+ "--model" ,
82+ "qwen-plus" ,
83+ "--dry-run" ,
84+ "--output" ,
85+ "json" ,
86+ ] ) ;
87+ expect ( exitCode , stderr ) . toBe ( 0 ) ;
88+ const data = parseStdoutJson < {
89+ api : string ;
90+ data : { BatchDeactivateFreeTierOnlyRequest : { models : string [ ] } } ;
91+ } > ( stdout ) ;
92+ expect ( data . api ) . toBe ( "zeldaEasy.bailian-commerce.freeTrial.batchDeactivateFreeTierOnly" ) ;
93+ expect ( data . data . BatchDeactivateFreeTierOnlyRequest . models ) . toEqual ( [ "qwen-plus" ] ) ;
94+ } ) ;
5395} ) ;
0 commit comments