@@ -838,6 +838,66 @@ test.it("setMany returns false entries on query error", async (t) => {
838838 t . expect ( emittedError ) . toBe ( true ) ;
839839} ) ;
840840
841+ test . it ( "has returns false and deletes expired key" , async ( t ) => {
842+ const keyv = new KeyvSqlite ( {
843+ uri : "sqlite://test/testdb.sqlite" ,
844+ busyTimeout : 3000 ,
845+ } ) ;
846+ await keyv . clear ( ) ;
847+ const key = faker . string . uuid ( ) ;
848+ const expiredValue = JSON . stringify ( { value : "old" , expires : Date . now ( ) - 1000 } ) ;
849+ await keyv . set ( key , expiredValue ) ;
850+ t . expect ( await keyv . has ( key ) ) . toBe ( false ) ;
851+ // Verify the key was deleted
852+ t . expect ( await keyv . get ( key ) ) . toBeUndefined ( ) ;
853+ } ) ;
854+
855+ test . it ( "getMany returns undefined for expired keys and deletes them" , async ( t ) => {
856+ const keyv = new KeyvSqlite ( {
857+ uri : "sqlite://test/testdb.sqlite" ,
858+ busyTimeout : 3000 ,
859+ } ) ;
860+ await keyv . clear ( ) ;
861+ const expiredKey1 = faker . string . uuid ( ) ;
862+ const expiredKey2 = faker . string . uuid ( ) ;
863+ const validKey = faker . string . uuid ( ) ;
864+ const expiredValue = JSON . stringify ( { value : "old" , expires : Date . now ( ) - 1000 } ) ;
865+ const validValue = JSON . stringify ( { value : "fresh" , expires : Date . now ( ) + 60_000 } ) ;
866+ await keyv . set ( expiredKey1 , expiredValue ) ;
867+ await keyv . set ( expiredKey2 , expiredValue ) ;
868+ await keyv . set ( validKey , validValue ) ;
869+ const result = await keyv . getMany ( [ expiredKey1 , expiredKey2 , validKey ] ) ;
870+ t . expect ( result [ 0 ] ) . toBeUndefined ( ) ;
871+ t . expect ( result [ 1 ] ) . toBeUndefined ( ) ;
872+ t . expect ( result [ 2 ] ) . toBe ( validValue ) ;
873+ // Verify expired keys were deleted
874+ t . expect ( await keyv . get ( expiredKey1 ) ) . toBeUndefined ( ) ;
875+ t . expect ( await keyv . get ( expiredKey2 ) ) . toBeUndefined ( ) ;
876+ } ) ;
877+
878+ test . it ( "hasMany returns false for expired keys and deletes them" , async ( t ) => {
879+ const keyv = new KeyvSqlite ( {
880+ uri : "sqlite://test/testdb.sqlite" ,
881+ busyTimeout : 3000 ,
882+ } ) ;
883+ await keyv . clear ( ) ;
884+ const expiredKey1 = faker . string . uuid ( ) ;
885+ const expiredKey2 = faker . string . uuid ( ) ;
886+ const validKey = faker . string . uuid ( ) ;
887+ const expiredValue = JSON . stringify ( { value : "old" , expires : Date . now ( ) - 1000 } ) ;
888+ const validValue = JSON . stringify ( { value : "fresh" , expires : Date . now ( ) + 60_000 } ) ;
889+ await keyv . set ( expiredKey1 , expiredValue ) ;
890+ await keyv . set ( expiredKey2 , expiredValue ) ;
891+ await keyv . set ( validKey , validValue ) ;
892+ const result = await keyv . hasMany ( [ expiredKey1 , expiredKey2 , validKey ] ) ;
893+ t . expect ( result [ 0 ] ) . toBe ( false ) ;
894+ t . expect ( result [ 1 ] ) . toBe ( false ) ;
895+ t . expect ( result [ 2 ] ) . toBe ( true ) ;
896+ // Verify expired keys were deleted
897+ t . expect ( await keyv . has ( expiredKey1 ) ) . toBe ( false ) ;
898+ t . expect ( await keyv . has ( expiredKey2 ) ) . toBe ( false ) ;
899+ } ) ;
900+
841901test . it ( "iterationLimit setter updates value" , async ( t ) => {
842902 const keyv = new KeyvSqlite ( "sqlite://:memory:" ) ;
843903 t . expect ( keyv . iterationLimit ) . toBe ( 10 ) ;
0 commit comments