Skip to content

Commit 5bdfb58

Browse files
committed
Add tag set TTL tests.
1 parent f035da5 commit 5bdfb58

1 file changed

Lines changed: 64 additions & 0 deletions

File tree

packages/cache/tests/redis.test.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ describe('Cache plugin (redis)', () => {
2323

2424
redis = new Redis(process.env['REDIS_URL'] as string)
2525

26+
expire.mockClear()
27+
sadd.mockClear()
28+
2629
await db.$pushSchema()
2730
await redis.flushdb()
2831
})
@@ -1044,4 +1047,65 @@ describe('Cache plugin (redis)', () => {
10441047

10451048
expect(sadd.mock.lastCall![0]).toBe('zenstack:cache:tag:test')
10461049
})
1050+
1051+
it('handles tag set ttls', async () => {
1052+
const extDb = db.$use(
1053+
defineCachePlugin({
1054+
provider: new RedisCacheProvider({
1055+
url: process.env['REDIS_URL'] as string,
1056+
}),
1057+
}),
1058+
)
1059+
1060+
await extDb.user.findMany({
1061+
cache: {
1062+
tags: ['test'],
1063+
},
1064+
})
1065+
1066+
expect(expire).not.toHaveBeenCalled()
1067+
1068+
await extDb.user.findMany({
1069+
cache: {
1070+
ttl: 30,
1071+
tags: ['test'],
1072+
},
1073+
})
1074+
1075+
// A tag set's TTL should be the highest TTL of the keys in it.
1076+
await expect(redis.ttl('zenstack:cache:tag:test')).resolves.toBeCloseTo(30, 2)
1077+
1078+
await extDb.user.exists({
1079+
cache: {
1080+
ttl: 40,
1081+
tags: ['test', 'test2'],
1082+
},
1083+
})
1084+
1085+
await expect(redis.ttl('zenstack:cache:tag:test')).resolves.toBeCloseTo(40, 2)
1086+
await expect(redis.ttl('zenstack:cache:tag:test2')).resolves.toBeCloseTo(40, 2)
1087+
1088+
// A lower TTL does not change them.
1089+
await extDb.user.findFirst({
1090+
cache: {
1091+
ttl: 10,
1092+
tags: ['test', 'test2'],
1093+
},
1094+
})
1095+
1096+
await expect(redis.ttl('zenstack:cache:tag:test')).resolves.toBeCloseTo(40, 2)
1097+
await expect(redis.ttl('zenstack:cache:tag:test2')).resolves.toBeCloseTo(40, 2)
1098+
1099+
// Should work with SWR too.
1100+
await extDb.user.findFirst({
1101+
cache: {
1102+
swr: 80,
1103+
tags: ['test', 'test2', 'test3'],
1104+
},
1105+
})
1106+
1107+
await expect(redis.ttl('zenstack:cache:tag:test')).resolves.toBeCloseTo(80, 2)
1108+
await expect(redis.ttl('zenstack:cache:tag:test2')).resolves.toBeCloseTo(80, 2)
1109+
await expect(redis.ttl('zenstack:cache:tag:test3')).resolves.toBeCloseTo(80, 2)
1110+
})
10471111
})

0 commit comments

Comments
 (0)