@@ -21,6 +21,7 @@ describe("runtime live sync", () => {
2121 let committedState = {
2222 sync : overrides . currentSync ?? null ,
2323 path : overrides . currentPath ?? null ,
24+ configKey : null as string | null ,
2425 cleanupRegistered : overrides . currentCleanupRegistered ?? false ,
2526 } ;
2627 let cleanupCallback : ( ( ) => void ) | null = null ;
@@ -92,12 +93,14 @@ describe("runtime live sync", () => {
9293 await expect ( ensureRuntimeLiveAccountSync ( deps ) ) . resolves . toEqual ( {
9394 sync : null ,
9495 path : null ,
96+ configKey : null ,
9597 cleanupRegistered : true ,
9698 } ) ;
9799 expect ( currentSync . stop ) . toHaveBeenCalledTimes ( 1 ) ;
98100 expect ( deps . commitState ) . toHaveBeenCalledWith ( {
99101 sync : null ,
100102 path : null ,
103+ configKey : null ,
101104 cleanupRegistered : true ,
102105 } ) ;
103106 } ) ;
@@ -111,6 +114,7 @@ describe("runtime live sync", () => {
111114 expect ( createSync ) . toHaveBeenCalledTimes ( 1 ) ;
112115 expect ( registerCleanup ) . toHaveBeenCalledTimes ( 1 ) ;
113116 expect ( first . path ) . toBe ( "C:\\repo\\accounts.json" ) ;
117+ expect ( first . configKey ) . toBe ( "25:250" ) ;
114118 expect ( first . cleanupRegistered ) . toBe ( true ) ;
115119 expect ( first . sync ?. syncToPath ) . toHaveBeenCalledWith (
116120 "C:\\repo\\accounts.json" ,
@@ -120,6 +124,7 @@ describe("runtime live sync", () => {
120124 ...deps ,
121125 currentSync : first . sync ,
122126 currentPath : first . path ,
127+ currentConfigKey : first . configKey ,
123128 currentCleanupRegistered : first . cleanupRegistered ,
124129 } ) ;
125130
@@ -151,6 +156,7 @@ describe("runtime live sync", () => {
151156 await expect ( pending ) . resolves . toMatchObject ( {
152157 sync : currentSync ,
153158 path : "C:\\repo\\new.json" ,
159+ configKey : null ,
154160 cleanupRegistered : true ,
155161 } ) ;
156162 expect ( currentSync . syncToPath ) . toHaveBeenCalledTimes ( 3 ) ;
@@ -176,6 +182,7 @@ describe("runtime live sync", () => {
176182 await expect ( pending ) . resolves . toMatchObject ( {
177183 sync : currentSync ,
178184 path : "C:\\repo\\old.json" ,
185+ configKey : null ,
179186 cleanupRegistered : true ,
180187 } ) ;
181188 expect ( currentSync . syncToPath ) . toHaveBeenCalledTimes ( 3 ) ;
@@ -213,6 +220,7 @@ describe("runtime live sync", () => {
213220 const committed = getCommittedState ( ) ;
214221 expect ( committed . sync ) . toBe ( createdSync ) ;
215222 expect ( committed . path ) . toBeNull ( ) ;
223+ expect ( committed . configKey ) . toBe ( "25:250" ) ;
216224 expect ( committed . cleanupRegistered ) . toBe ( true ) ;
217225
218226 const cleanup = getCleanupCallback ( ) ;
@@ -238,12 +246,14 @@ describe("runtime live sync", () => {
238246
239247 const committed = getCommittedState ( ) ;
240248 expect ( committed . sync ) . toBe ( createdSync ) ;
249+ expect ( committed . configKey ) . toBe ( "25:250" ) ;
241250 expect ( committed . cleanupRegistered ) . toBe ( true ) ;
242251
243252 const second = ensureRuntimeLiveAccountSync ( {
244253 ...deps ,
245254 currentSync : committed . sync ,
246255 currentPath : committed . path ,
256+ currentConfigKey : committed . configKey ,
247257 currentCleanupRegistered : committed . cleanupRegistered ,
248258 } ) ;
249259 await vi . runAllTicks ( ) ;
@@ -253,11 +263,13 @@ describe("runtime live sync", () => {
253263 await expect ( pending ) . resolves . toMatchObject ( {
254264 sync : createdSync ,
255265 path : "C:\\repo\\accounts.json" ,
266+ configKey : "25:250" ,
256267 cleanupRegistered : true ,
257268 } ) ;
258269 await expect ( second ) . resolves . toMatchObject ( {
259270 sync : createdSync ,
260271 path : "C:\\repo\\accounts.json" ,
272+ configKey : "25:250" ,
261273 cleanupRegistered : true ,
262274 } ) ;
263275 } ) ;
@@ -273,6 +285,7 @@ describe("runtime live sync", () => {
273285 ...deps ,
274286 currentSync : first . sync ,
275287 currentPath : first . path ,
288+ currentConfigKey : first . configKey ,
276289 currentCleanupRegistered : first . cleanupRegistered ,
277290 getLiveAccountSync : vi . fn ( ) . mockReturnValue ( false ) ,
278291 } ) ;
@@ -282,6 +295,7 @@ describe("runtime live sync", () => {
282295 ...deps ,
283296 currentSync : disabled . sync ,
284297 currentPath : disabled . path ,
298+ currentConfigKey : disabled . configKey ,
285299 currentCleanupRegistered : disabled . cleanupRegistered ,
286300 } ) ;
287301 setLiveSync ( reenabled . sync ) ;
@@ -293,4 +307,36 @@ describe("runtime live sync", () => {
293307 expect ( ( reenabled . sync as { stop : ReturnType < typeof vi . fn > } ) . stop ) . toHaveBeenCalledTimes ( 1 ) ;
294308 expect ( ( first . sync as { stop : ReturnType < typeof vi . fn > } ) . stop ) . toHaveBeenCalledTimes ( 1 ) ;
295309 } ) ;
310+
311+ it ( "recreates live sync when debounce/poll settings change" , async ( ) => {
312+ const firstSync = {
313+ stop : vi . fn ( ) ,
314+ syncToPath : vi . fn ( ) . mockResolvedValue ( undefined ) ,
315+ } ;
316+ const secondSync = {
317+ stop : vi . fn ( ) ,
318+ syncToPath : vi . fn ( ) . mockResolvedValue ( undefined ) ,
319+ } ;
320+ const { deps, createSync } = createDeps ( {
321+ currentSync : firstSync ,
322+ currentPath : "C:\\repo\\accounts.json" ,
323+ currentCleanupRegistered : true ,
324+ } ) ;
325+ createSync . mockReturnValue ( secondSync ) ;
326+ deps . getLiveAccountSyncDebounceMs = vi . fn ( ) . mockReturnValue ( 50 ) ;
327+ deps . getLiveAccountSyncPollMs = vi . fn ( ) . mockReturnValue ( 500 ) ;
328+
329+ const result = await ensureRuntimeLiveAccountSync ( {
330+ ...deps ,
331+ currentSync : firstSync ,
332+ currentPath : "C:\\repo\\accounts.json" ,
333+ currentConfigKey : "25:250" ,
334+ } ) ;
335+
336+ expect ( firstSync . stop ) . toHaveBeenCalledTimes ( 1 ) ;
337+ expect ( createSync ) . toHaveBeenCalledTimes ( 1 ) ;
338+ expect ( result . sync ) . toBe ( secondSync ) ;
339+ expect ( result . configKey ) . toBe ( "50:500" ) ;
340+ expect ( secondSync . syncToPath ) . toHaveBeenCalledWith ( "C:\\repo\\accounts.json" ) ;
341+ } ) ;
296342} ) ;
0 commit comments