Skip to content

Commit faa37a8

Browse files
committed
tests
1 parent 2559d8e commit faa37a8

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed

storage/mysql/test/test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,33 @@ test.it("setMany returns false entries on query error", async (t) => {
696696
t.expect(emittedError).toBe(true);
697697
});
698698

699+
test.it("has returns false and deletes expired key", async (t) => {
700+
const keyv = new KeyvMysql(uri);
701+
const key = faker.string.alphanumeric(10);
702+
const expiredValue = JSON.stringify({ value: "old", expires: Date.now() - 1000 });
703+
await keyv.set(key, expiredValue);
704+
t.expect(await keyv.has(key)).toBe(false);
705+
// Verify the key was deleted
706+
t.expect(await keyv.get(key)).toBeUndefined();
707+
});
708+
709+
test.it("hasMany returns false for expired keys and deletes them", async (t) => {
710+
const keyv = new KeyvMysql(uri);
711+
const expiredKey1 = faker.string.alphanumeric(10);
712+
const expiredKey2 = faker.string.alphanumeric(10);
713+
const validKey = faker.string.alphanumeric(10);
714+
const expiredValue = JSON.stringify({ value: "old", expires: Date.now() - 1000 });
715+
const validValue = JSON.stringify({ value: "fresh", expires: Date.now() + 60_000 });
716+
await keyv.set(expiredKey1, expiredValue);
717+
await keyv.set(expiredKey2, expiredValue);
718+
await keyv.set(validKey, validValue);
719+
const result = await keyv.hasMany([expiredKey1, expiredKey2, validKey]);
720+
t.expect(result).toStrictEqual([false, false, true]);
721+
// Verify expired keys were deleted
722+
t.expect(await keyv.get(expiredKey1)).toBeUndefined();
723+
t.expect(await keyv.get(expiredKey2)).toBeUndefined();
724+
});
725+
699726
test.it("createKeyv with options object returns a Keyv instance", async (t) => {
700727
const keyv = createKeyv({ uri, table: "keyv" });
701728
t.expect(keyv).toBeInstanceOf(Keyv);

storage/postgres/test/test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,33 @@ test.it("has() returns false after clear", async (t) => {
605605
t.expect(await keyv.has(key)).toBe(false);
606606
});
607607

608+
test.it("has returns false and deletes expired key", async (t) => {
609+
const keyv = new KeyvPostgres({ uri: postgresUri });
610+
const key = faker.string.alphanumeric(10);
611+
const expiredValue = JSON.stringify({ value: "old", expires: Date.now() - 1000 });
612+
await keyv.set(key, expiredValue);
613+
t.expect(await keyv.has(key)).toBe(false);
614+
// Verify the key was deleted
615+
t.expect(await keyv.get(key)).toBeUndefined();
616+
});
617+
618+
test.it("hasMany returns false for expired keys and deletes them", async (t) => {
619+
const keyv = new KeyvPostgres({ uri: postgresUri });
620+
const expiredKey1 = faker.string.alphanumeric(10);
621+
const expiredKey2 = faker.string.alphanumeric(10);
622+
const validKey = faker.string.alphanumeric(10);
623+
const expiredValue = JSON.stringify({ value: "old", expires: Date.now() - 1000 });
624+
const validValue = JSON.stringify({ value: "fresh", expires: Date.now() + 60_000 });
625+
await keyv.set(expiredKey1, expiredValue);
626+
await keyv.set(expiredKey2, expiredValue);
627+
await keyv.set(validKey, validValue);
628+
const result = await keyv.hasMany([expiredKey1, expiredKey2, validKey]);
629+
t.expect(result).toStrictEqual([false, false, true]);
630+
// Verify expired keys were deleted
631+
t.expect(await keyv.get(expiredKey1)).toBeUndefined();
632+
t.expect(await keyv.get(expiredKey2)).toBeUndefined();
633+
});
634+
608635
test.it("setting clearExpiredInterval to 0 stops an active timer", (t) => {
609636
const keyv = new KeyvPostgres({
610637
uri: postgresUri,

storage/sqlite/test/test.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
841901
test.it("iterationLimit setter updates value", async (t) => {
842902
const keyv = new KeyvSqlite("sqlite://:memory:");
843903
t.expect(keyv.iterationLimit).toBe(10);

0 commit comments

Comments
 (0)