Skip to content

Commit ba06eec

Browse files
authored
Add the missing test for not unloading before ongoing save is finished (#1025)
1 parent d9d64a1 commit ba06eec

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

tests/server/onStoreDocument.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,48 @@ test("does not start a new onStoreDocument if there is already one running (shou
518518
});
519519
})
520520

521+
test("triggers unload only after finishing with a save in progress", async (t) => {
522+
/*
523+
Rough timeline:
524+
525+
1. ~0ms Client 1 connects
526+
2. ~10ms Client 1 makes change 1 (triggers debounced save)
527+
3. ~1000ms Server starts saving change 1 (debounced)
528+
4. ~1100ms Client 1 disconnects. Document is not unloaded because save is in progress.
529+
5. ~1500ms Server finishes saving change 1. Document is unloaded
530+
*/
531+
await new Promise(async (resolve) => {
532+
const start = Date.now()
533+
let saveStarted = false
534+
let saveFinished = false
535+
const server = await newHocuspocus({
536+
debounce: 1000,
537+
extensions: [{
538+
async onStoreDocument() {
539+
saveStarted = true
540+
await sleep(500) // Add pause to simulate long save
541+
saveFinished = true
542+
},
543+
async afterUnloadDocument(data) {
544+
t.deepEqual(saveFinished, true, "Unload should occur only after save was finished");
545+
t.pass()
546+
resolve("done");
547+
},
548+
}],
549+
});
550+
const socket1 = newHocuspocusProviderWebsocket(server);
551+
const provider1 = newHocuspocusProvider(server, {
552+
websocketProvider: socket1,
553+
async onSynced() {
554+
provider1.document.getArray("foo").push(["foo"]);
555+
setTimeout(() => { // Wait for sending changes
556+
socket1.destroy();
557+
}, 1100)
558+
},
559+
});
560+
})
561+
})
562+
521563
test("does not trigger unload prematurely when a save is in progress (unloadImmediately=true)", async (t) => {
522564
/*
523565
Rough timeline:

0 commit comments

Comments
 (0)