Skip to content
This repository was archived by the owner on Mar 1, 2026. It is now read-only.

Commit 930f89f

Browse files
committed
ttl and swr simultaneous tests.
1 parent 6b9cc95 commit 930f89f

2 files changed

Lines changed: 96 additions & 5 deletions

File tree

packages/plugins/cache/src/utils.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ export function getTotalTTL(entry: CacheEntry) {
66

77
export function entryIsFresh(entry: CacheEntry) {
88
return entry.options.ttl
9-
? Date.now() <= (entry.createdAt + (entry.options.ttl ?? 0))
10-
: false;
9+
? Date.now() <= (entry.createdAt + ((entry.options.ttl ?? 0) * 1000))
10+
: false
1111
}
1212

1313
export function entryIsStale(entry: CacheEntry) {
1414
return entry.options.swr
15-
? Date.now() <= entry.createdAt + getTotalTTL(entry)
15+
? Date.now() <= entry.createdAt + (getTotalTTL(entry) * 1000)
1616
: false;
1717
}
1818

1919
export function entryIsExpired(entry: CacheEntry) {
20-
return Date.now() > getTotalTTL(entry);
20+
return Date.now() > entry.createdAt + (getTotalTTL(entry) * 1000);
2121
}

tests/e2e/orm/cache/memory.test.ts

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ describe('Cache plugin (memory)', () => {
219219
},
220220
})).resolves.toHaveLength(1);
221221

222-
vi.advanceTimersByTime(60000);
222+
vi.advanceTimersByTime(61000);
223223

224224
await expect(extDb.user.findFirst({
225225
where: {
@@ -335,12 +335,77 @@ describe('Cache plugin (memory)', () => {
335335
name: null,
336336
});
337337

338+
expect(extDb.$cache.status).toBe('stale');
339+
await extDb.$cache.revalidation;
340+
341+
await expect(extDb.user.findFirst({
342+
where: {
343+
id: user.id,
344+
},
345+
346+
cache: {
347+
swr: 60,
348+
},
349+
})).resolves.toMatchObject({
350+
name: 'newname',
351+
});
352+
});
353+
354+
it('respects ttl and swr simultaneously', async () => {
355+
const extDb = db.$use(defineCachePlugin({
356+
provider: new MemoryCache(),
357+
}));
358+
359+
const user = await extDb.user.create({
360+
data: {
361+
email: 'test@email.com',
362+
},
363+
});
364+
365+
await extDb.user.findFirst({
366+
where: {
367+
id: user.id,
368+
},
369+
370+
cache: {
371+
ttl: 60,
372+
swr: 60,
373+
},
374+
});
375+
376+
await extDb.user.update({
377+
data: {
378+
name: 'newname',
379+
},
380+
381+
where: {
382+
id: user.id,
383+
},
384+
});
385+
386+
await expect(extDb.user.findFirst({
387+
where: {
388+
id: user.id,
389+
},
390+
391+
cache: {
392+
ttl: 60,
393+
swr: 60,
394+
},
395+
})).resolves.toMatchObject({
396+
name: null,
397+
});
398+
399+
expect(extDb.$cache.status).toBe('hit');
400+
vi.advanceTimersByTime(65000);
401+
338402
await expect(extDb.user.findFirst({
339403
where: {
340404
id: user.id,
341405
},
342406

343407
cache: {
408+
ttl: 60,
344409
swr: 60,
345410
},
346411
})).resolves.toMatchObject({
@@ -356,6 +421,7 @@ describe('Cache plugin (memory)', () => {
356421
},
357422

358423
cache: {
424+
ttl: 60,
359425
swr: 60,
360426
},
361427
})).resolves.toMatchObject({
@@ -801,4 +867,29 @@ describe('Cache plugin (memory)', () => {
801867
title: 'title',
802868
});
803869
});
870+
871+
it('handles edge cases', async () => {
872+
const extDb = db.$use(defineCachePlugin({
873+
provider: new MemoryCache(),
874+
}));
875+
876+
await expect(extDb.user.findMany({
877+
cache: {
878+
ttl: 0,
879+
},
880+
})).rejects.toThrow('Invalid findMany');
881+
882+
await expect(extDb.user.findMany({
883+
cache: {
884+
swr: 0,
885+
},
886+
})).rejects.toThrow('Invalid findMany');
887+
888+
await expect(extDb.user.findMany({
889+
cache: {
890+
ttl: 0,
891+
swr: 0,
892+
},
893+
})).rejects.toThrow('Invalid findMany');
894+
});
804895
});

0 commit comments

Comments
 (0)