diff --git a/src/multi-caching.ts b/src/multi-caching.ts index 19a7ec33..0106e094 100644 --- a/src/multi-caching.ts +++ b/src/multi-caching.ts @@ -1,10 +1,7 @@ import { Cache, Milliseconds } from './caching'; -export type MultiCache = Omit & { - mset(args: [string, unknown][], ttl?: Milliseconds): Promise; - mget(...args: string[]): Promise; - mdel(...args: string[]): Promise; -}; +export type MultiCache = Omit & + Pick; /** * Module that lets you specify a hierarchy of caches. diff --git a/test/multi-caching.test.ts b/test/multi-caching.test.ts index 8bdab292..52755b16 100644 --- a/test/multi-caching.test.ts +++ b/test/multi-caching.test.ts @@ -21,6 +21,19 @@ describe('multiCaching', () => { let defaultTtl: number; let key: string; + async function multiMset() { + const keys = [faker.datatype.string(20), faker.datatype.string(20)]; + const values = [faker.datatype.string(), faker.datatype.string()]; + await multiCache.mset( + [ + [keys[0], values[0]], + [keys[1], values[1]], + ], + defaultTtl, + ); + return { keys, values }; + } + beforeEach(async () => { ttl = 100; defaultTtl = 5000; @@ -93,15 +106,7 @@ describe('multiCaching', () => { describe('mset()', () => { it('lets us set multiple keys in all caches', async () => { - const keys = [faker.datatype.string(20), faker.datatype.string(20)]; - const values = [faker.datatype.string(), faker.datatype.string()]; - await multiCache.mset( - [ - [keys[0], values[0]], - [keys[1], values[1]], - ], - defaultTtl, - ); + const { keys, values } = await multiMset(); await expect(memoryCache.get(keys[0])).resolves.toEqual(values[0]); await expect(memoryCache2.get(keys[0])).resolves.toEqual(values[0]); await expect(memoryCache3.get(keys[0])).resolves.toEqual(values[0]); @@ -113,31 +118,28 @@ describe('multiCaching', () => { describe('mget()', () => { it('lets us get multiple keys', async () => { - const keys = [faker.datatype.string(20), faker.datatype.string(20)]; - const values = [faker.datatype.string(), faker.datatype.string()]; + const { keys, values } = await multiMset(); await multiCache.set(keys[0], values[0], defaultTtl); await memoryCache3.set(keys[1], values[1], defaultTtl); await expect(multiCache.mget(...keys)).resolves.toStrictEqual(values); }); + + it('lets us get multiple undefined', async () => { + const len = 4; + await multiMset(); + const args = faker.datatype.array(len).map((x) => '' + x); + await expect(multiCache.mget(...args)).resolves.toStrictEqual( + new Array(len).fill(undefined), + ); + }); }); describe('mdel()', () => { it('lets us delete multiple keys', async () => { - const keys = [faker.datatype.string(20), faker.datatype.string(20)]; - const values = [faker.datatype.string(), faker.datatype.string()]; - await multiCache.mset( - [ - [keys[0], values[0]], - [keys[1], values[1]], - ], - defaultTtl, - ); - await expect(multiCache.mget(...keys)).resolves.toStrictEqual(values); + const { keys } = await multiMset(); await multiCache.mdel(...keys); - await expect(multiCache.mget(...keys)).resolves.toStrictEqual([ - undefined, - undefined, - ]); + await expect(memoryCache.get(keys[0])).resolves.toBeUndefined(); + await expect(memoryCache.get(keys[1])).resolves.toBeUndefined(); }); });