Skip to content

Commit

Permalink
fix(multi-caching): minor issues
Browse files Browse the repository at this point in the history
  • Loading branch information
zzau13 committed Mar 21, 2023
1 parent a9f1956 commit bf68d36
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 30 deletions.
7 changes: 2 additions & 5 deletions src/multi-caching.ts
@@ -1,10 +1,7 @@
import { Cache, Milliseconds } from './caching';

export type MultiCache = Omit<Cache, 'store'> & {
mset(args: [string, unknown][], ttl?: Milliseconds): Promise<void>;
mget(...args: string[]): Promise<unknown[]>;
mdel(...args: string[]): Promise<void>;
};
export type MultiCache = Omit<Cache, 'store'> &
Pick<Cache['store'], 'mset' | 'mget' | 'mdel'>;

/**
* Module that lets you specify a hierarchy of caches.
Expand Down
52 changes: 27 additions & 25 deletions test/multi-caching.test.ts
Expand Up @@ -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;
Expand Down Expand Up @@ -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]);
Expand All @@ -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();
});
});

Expand Down

0 comments on commit bf68d36

Please sign in to comment.