@@ -12,8 +12,14 @@ const mockSecrets = {
1212 delete : jest . fn ( ) ,
1313}
1414
15+ const mockGlobalState = {
16+ get : jest . fn ( ) ,
17+ update : jest . fn ( ) ,
18+ }
19+
1520const mockContext = {
1621 secrets : mockSecrets ,
22+ globalState : mockGlobalState ,
1723} as unknown as ExtensionContext
1824
1925describe ( "ProviderSettingsManager" , ( ) => {
@@ -45,6 +51,9 @@ describe("ProviderSettingsManager", () => {
4551 id : "default" ,
4652 } ,
4753 } ,
54+ migrations : {
55+ rateLimitSecondsMigrated : true ,
56+ } ,
4857 } ) ,
4958 )
5059
@@ -78,6 +87,43 @@ describe("ProviderSettingsManager", () => {
7887 expect ( storedConfig . apiConfigs . test . id ) . toBeTruthy ( )
7988 } )
8089
90+ it ( "should call migrateRateLimitSeconds if it has not done so already" , async ( ) => {
91+ mockGlobalState . get . mockResolvedValue ( 42 )
92+
93+ mockSecrets . get . mockResolvedValue (
94+ JSON . stringify ( {
95+ currentApiConfigName : "default" ,
96+ apiConfigs : {
97+ default : {
98+ config : { } ,
99+ id : "default" ,
100+ rateLimitSeconds : undefined ,
101+ } ,
102+ test : {
103+ apiProvider : "anthropic" ,
104+ rateLimitSeconds : undefined ,
105+ } ,
106+ existing : {
107+ apiProvider : "anthropic" ,
108+ // this should not really be possible, unless someone has loaded a hand edited config,
109+ // but we don't overwrite so we'll check that
110+ rateLimitSeconds : 43 ,
111+ } ,
112+ } ,
113+ migrations : {
114+ rateLimitSecondsMigrate : false ,
115+ } ,
116+ } ) ,
117+ )
118+
119+ await providerSettingsManager . initialize ( )
120+
121+ const storedConfig = JSON . parse ( mockSecrets . store . mock . calls [ 1 ] [ 1 ] )
122+ expect ( storedConfig . apiConfigs . default . rateLimitSeconds ) . toEqual ( 42 )
123+ expect ( storedConfig . apiConfigs . test . rateLimitSeconds ) . toEqual ( 42 )
124+ expect ( storedConfig . apiConfigs . existing . rateLimitSeconds ) . toEqual ( 43 )
125+ } )
126+
81127 it ( "should throw error if secrets storage fails" , async ( ) => {
82128 mockSecrets . get . mockRejectedValue ( new Error ( "Storage failed" ) )
83129
@@ -105,6 +151,9 @@ describe("ProviderSettingsManager", () => {
105151 architect : "default" ,
106152 ask : "default" ,
107153 } ,
154+ migrations : {
155+ rateLimitSecondsMigrated : false ,
156+ } ,
108157 }
109158
110159 mockSecrets . get . mockResolvedValue ( JSON . stringify ( existingConfig ) )
@@ -125,6 +174,9 @@ describe("ProviderSettingsManager", () => {
125174 architect : "default" ,
126175 ask : "default" ,
127176 } ,
177+ migrations : {
178+ rateLimitSecondsMigrated : false ,
179+ } ,
128180 }
129181
130182 mockSecrets . get . mockResolvedValue ( JSON . stringify ( emptyConfig ) )
@@ -201,6 +253,9 @@ describe("ProviderSettingsManager", () => {
201253 id : "test-id" ,
202254 } ,
203255 } ,
256+ migrations : {
257+ rateLimitSecondsMigrated : false ,
258+ } ,
204259 }
205260
206261 mockSecrets . get . mockResolvedValue ( JSON . stringify ( existingConfig ) )
@@ -221,6 +276,9 @@ describe("ProviderSettingsManager", () => {
221276 id : "test-id" ,
222277 } ,
223278 } ,
279+ migrations : {
280+ rateLimitSecondsMigrated : false ,
281+ } ,
224282 }
225283
226284 expect ( mockSecrets . store ) . toHaveBeenCalledWith (
@@ -257,6 +315,9 @@ describe("ProviderSettingsManager", () => {
257315 id : "test-id" ,
258316 } ,
259317 } ,
318+ migrations : {
319+ rateLimitSecondsMigrated : false ,
320+ } ,
260321 }
261322
262323 mockSecrets . get . mockResolvedValue ( JSON . stringify ( existingConfig ) )
@@ -312,8 +373,12 @@ describe("ProviderSettingsManager", () => {
312373 id : "test-id" ,
313374 } ,
314375 } ,
376+ migrations : {
377+ rateLimitSecondsMigrated : false ,
378+ } ,
315379 }
316380
381+ mockGlobalState . get . mockResolvedValue ( 42 )
317382 mockSecrets . get . mockResolvedValue ( JSON . stringify ( existingConfig ) )
318383
319384 const config = await providerSettingsManager . loadConfig ( "test" )
@@ -325,7 +390,7 @@ describe("ProviderSettingsManager", () => {
325390 } )
326391
327392 // Get the stored config to check the structure
328- const storedConfig = JSON . parse ( mockSecrets . store . mock . calls [ 0 ] [ 1 ] )
393+ const storedConfig = JSON . parse ( mockSecrets . store . mock . calls [ 1 ] [ 1 ] )
329394 expect ( storedConfig . currentApiConfigName ) . toBe ( "test" )
330395 expect ( storedConfig . apiConfigs . test ) . toEqual ( {
331396 apiProvider : "anthropic" ,
@@ -409,6 +474,9 @@ describe("ProviderSettingsManager", () => {
409474 id : "test-id" ,
410475 } ,
411476 } ,
477+ migrations : {
478+ rateLimitSecondsMigrated : false ,
479+ } ,
412480 }
413481
414482 mockSecrets . get . mockResolvedValue ( JSON . stringify ( existingConfig ) )
0 commit comments