@@ -433,5 +433,56 @@ describeDriverMatrix("Actor Destroy", (driverTestConfig) => {
433433 expect ( await handle . getValue ( ) ) . toBe ( 0 ) ;
434434 expect ( await handle . resolve ( ) ) . toBe ( await recreated . resolve ( ) ) ;
435435 } ) ;
436+
437+ type DriverTestClient = Awaited <
438+ ReturnType < typeof setupDriverTest >
439+ > [ "client" ] ;
440+
441+ async function startDbActor ( client : DriverTestClient , name : string ) {
442+ const actorKey = `test-destroy-db-${ name } -${ crypto . randomUUID ( ) } ` ;
443+ const handle = client . destroyDbActor . getOrCreate ( [ actorKey ] ) ;
444+ expect ( await handle . getValue ( ) ) . toBe ( 0 ) ;
445+ const actorId = await handle . resolve ( ) ;
446+ return { actorKey, actorId, handle } ;
447+ }
448+
449+ async function expectDbActorDestroyed (
450+ client : DriverTestClient ,
451+ { actorKey, actorId } : { actorKey : string ; actorId : string } ,
452+ ) {
453+ // Poll because actor lookup only turns into not_found once destroy teardown fully completes.
454+ await vi . waitFor ( async ( ) => {
455+ let actorRunning = false ;
456+ try {
457+ await client . destroyDbActor . getForId ( actorId ) . getValue ( ) ;
458+ actorRunning = true ;
459+ } catch ( error ) {
460+ expectActorNotFound ( error ) ;
461+ }
462+ expect ( actorRunning , "actor still running" ) . toBeFalsy ( ) ;
463+ } ) ;
464+
465+ const recreated = client . destroyDbActor . getOrCreate ( [ actorKey ] ) ;
466+ expect ( await recreated . getValue ( ) ) . toBe ( 0 ) ;
467+ expect ( await recreated . resolve ( ) ) . not . toBe ( actorId ) ;
468+ }
469+
470+ test ( "actor with a database destroys with clean state" , async ( c ) => {
471+ const { client } = await setupDriverTest ( c , driverTestConfig ) ;
472+ const dbActor = await startDbActor ( client , "clean-state" ) ;
473+
474+ await dbActor . handle . destroy ( ) ;
475+
476+ await expectDbActorDestroyed ( client , dbActor ) ;
477+ } ) ;
478+
479+ test ( "actor with a database destroys after an unsaved state change" , async ( c ) => {
480+ const { client } = await setupDriverTest ( c , driverTestConfig ) ;
481+ const dbActor = await startDbActor ( client , "unsaved-state" ) ;
482+
483+ await dbActor . handle . setValueThenDestroy ( 7 ) ;
484+
485+ await expectDbActorDestroyed ( client , dbActor ) ;
486+ } ) ;
436487 } ) ;
437488} ) ;
0 commit comments