@@ -233,29 +233,29 @@ test("stops when one of the onStoreDocument hooks throws a non-Error value", asy
233233 } ) ;
234234} ) ;
235235
236- test ( "retries onStoreDocument on transient failure and succeeds " , async ( t ) => {
236+ test ( "keeps document in memory when onStoreDocument fails " , async ( t ) => {
237237 await new Promise ( async ( resolve ) => {
238- let callCount = 0 ;
239-
240238 const server = await newHocuspocus ( t , {
241239 debounce : 100 ,
242- async onStoreDocument ( { document } ) {
243- callCount ++ ;
244- if ( callCount < 3 ) {
245- throw new Error ( "transient failure" ) ;
246- }
247- // Third attempt succeeds
248- const value = document . getArray ( "foo" ) . get ( 0 ) ;
249- t . is ( value , "bar" ) ;
250- t . is ( callCount , 3 , "should succeed on third attempt" ) ;
251- resolve ( "done" ) ;
240+ async onStoreDocument ( ) {
241+ throw new Error ( "storage unavailable" ) ;
252242 } ,
253243 } ) ;
254244
255- const provider = newHocuspocusProvider ( t , server ) ;
245+ const socket = newHocuspocusProviderWebsocket ( t , server ) ;
256246
257- provider . on ( "synced" , ( ) => {
258- provider . document . getArray ( "foo" ) . insert ( 0 , [ "bar" ] ) ;
247+ const provider = newHocuspocusProvider ( t , server , {
248+ websocketProvider : socket ,
249+ onSynced ( ) {
250+ provider . document . getArray ( "foo" ) . push ( [ "bar" ] ) ;
251+ socket . destroy ( ) ;
252+
253+ setTimeout ( ( ) => {
254+ // Document must remain in memory since the store failed
255+ t . is ( server . getDocumentsCount ( ) , 1 ) ;
256+ resolve ( "done" ) ;
257+ } , 500 ) ;
258+ } ,
259259 } ) ;
260260 } ) ;
261261} ) ;
0 commit comments