From 31c91dececac6e07454efa31f5d3a19ae6860f89 Mon Sep 17 00:00:00 2001 From: dovi Date: Tue, 2 May 2023 17:43:10 -0400 Subject: [PATCH] fix ZUNIONSTORE --- .../client/lib/commands/ZUNIONSTORE.spec.ts | 103 +++++++++--------- packages/client/lib/commands/ZUNIONSTORE.ts | 49 +++++---- packages/client/lib/commands/index.ts | 5 +- todo.md | 2 - 4 files changed, 82 insertions(+), 77 deletions(-) diff --git a/packages/client/lib/commands/ZUNIONSTORE.spec.ts b/packages/client/lib/commands/ZUNIONSTORE.spec.ts index 4458dcb648..ae561aff65 100644 --- a/packages/client/lib/commands/ZUNIONSTORE.spec.ts +++ b/packages/client/lib/commands/ZUNIONSTORE.spec.ts @@ -1,56 +1,59 @@ -// import { strict as assert } from 'assert'; -// import testUtils, { GLOBAL } from '../test-utils'; -// import { transformArguments } from './ZUNIONSTORE'; +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import ZUNIONSTORE from './ZUNIONSTORE'; -// describe('ZUNIONSTORE', () => { -// describe('transformArguments', () => { -// it('key (string)', () => { -// assert.deepEqual( -// transformArguments('destination', 'key'), -// ['ZUNIONSTORE', 'destination', '1', 'key'] -// ); -// }); +describe('ZUNIONSTORE', () => { + describe('transformArguments', () => { + it('key (string)', () => { + assert.deepEqual( + ZUNIONSTORE.transformArguments('destination', 'key'), + ['ZUNIONSTORE', 'destination', '1', 'key'] + ); + }); -// it('keys (array)', () => { -// assert.deepEqual( -// transformArguments('destination', ['1', '2']), -// ['ZUNIONSTORE', 'destination', '2', '1', '2'] -// ); -// }); + it('keys (array)', () => { + assert.deepEqual( + ZUNIONSTORE.transformArguments('destination', ['1', '2']), + ['ZUNIONSTORE', 'destination', '2', '1', '2'] + ); + }); -// it('with WEIGHTS', () => { -// assert.deepEqual( -// transformArguments('destination', 'key', { -// WEIGHTS: [1] -// }), -// ['ZUNIONSTORE', 'destination', '1', 'key', 'WEIGHTS', '1'] -// ); -// }); + it('with WEIGHTS', () => { + assert.deepEqual( + ZUNIONSTORE.transformArguments('destination', 'key', { + WEIGHTS: [1] + }), + ['ZUNIONSTORE', 'destination', '1', 'key', 'WEIGHTS', '1'] + ); + }); -// it('with AGGREGATE', () => { -// assert.deepEqual( -// transformArguments('destination', 'key', { -// AGGREGATE: 'SUM' -// }), -// ['ZUNIONSTORE', 'destination', '1', 'key', 'AGGREGATE', 'SUM'] -// ); -// }); + it('with AGGREGATE', () => { + assert.deepEqual( + ZUNIONSTORE.transformArguments('destination', 'key', { + AGGREGATE: 'SUM' + }), + ['ZUNIONSTORE', 'destination', '1', 'key', 'AGGREGATE', 'SUM'] + ); + }); -// it('with WEIGHTS, AGGREGATE', () => { -// assert.deepEqual( -// transformArguments('destination', 'key', { -// WEIGHTS: [1], -// AGGREGATE: 'SUM' -// }), -// ['ZUNIONSTORE', 'destination', '1', 'key', 'WEIGHTS', '1', 'AGGREGATE', 'SUM'] -// ); -// }); -// }); + it('with WEIGHTS, AGGREGATE', () => { + assert.deepEqual( + ZUNIONSTORE.transformArguments('destination', 'key', { + WEIGHTS: [1], + AGGREGATE: 'SUM' + }), + ['ZUNIONSTORE', 'destination', '1', 'key', 'WEIGHTS', '1', 'AGGREGATE', 'SUM'] + ); + }); + }); -// testUtils.testWithClient('client.zUnionStore', async client => { -// assert.equal( -// await client.zUnionStore('destination', 'key'), -// 0 -// ); -// }, GLOBAL.SERVERS.OPEN); -// }); + testUtils.testAll('zUnionStore', async client => { + assert.equal( + await client.zUnionStore('destination', 'key'), + 0 + ); + }, { + client: GLOBAL.SERVERS.OPEN, + cluster: GLOBAL.CLUSTERS.OPEN + }); +}); diff --git a/packages/client/lib/commands/ZUNIONSTORE.ts b/packages/client/lib/commands/ZUNIONSTORE.ts index dab0417fac..ed70c75c3c 100644 --- a/packages/client/lib/commands/ZUNIONSTORE.ts +++ b/packages/client/lib/commands/ZUNIONSTORE.ts @@ -1,29 +1,30 @@ -// import { RedisCommandArgument, RedisCommandArguments } from '.'; -// import { pushVariadicArgument } from './generic-transformers'; +import { RedisArgument, NumberReply, Command, } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArgument } from './generic-transformers'; -// export const FIRST_KEY_INDEX = 1; +export interface ZUnionOptions { + WEIGHTS?: Array; + AGGREGATE?: 'SUM' | 'MIN' | 'MAX'; +} -// interface ZUnionOptions { -// WEIGHTS?: Array; -// AGGREGATE?: 'SUM' | 'MIN' | 'MAX'; -// } +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments( + destination: RedisArgument, + keys: RedisVariadicArgument, + options?: ZUnionOptions + ) { + const args = pushVariadicArgument(['ZUNIONSTORE', destination], keys); -// export function transformArguments( -// destination: RedisCommandArgument, -// keys: Array | RedisCommandArgument, -// options?: ZUnionOptions -// ): RedisCommandArguments { -// const args = pushVariadicArgument(['ZUNIONSTORE', destination], keys); + if (options?.WEIGHTS) { + args.push('WEIGHTS', ...options.WEIGHTS.map(weight => weight.toString())); + } -// if (options?.WEIGHTS) { -// args.push('WEIGHTS', ...options.WEIGHTS.map(weight => weight.toString())); -// } + if (options?.AGGREGATE) { + args.push('AGGREGATE', options.AGGREGATE); + } -// if (options?.AGGREGATE) { -// args.push('AGGREGATE', options.AGGREGATE); -// } - -// return args; -// } - -// export declare function transformReply(): number; + return args; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/index.ts b/packages/client/lib/commands/index.ts index 0d435c6a4c..c5c58f2877 100644 --- a/packages/client/lib/commands/index.ts +++ b/packages/client/lib/commands/index.ts @@ -171,6 +171,7 @@ import ZREVRANK from './ZREVRANK'; import ZSCAN from './ZSCAN'; import ZSCORE from './ZSCORE'; import ZUNION from './ZUNION'; +import ZUNIONSTORE from './ZUNIONSTORE'; import { Command } from '../RESP/types'; export default { @@ -520,5 +521,7 @@ export default { ZSCORE, zScore: ZSCORE, ZUNION, - zUnion: ZUNION + zUnion: ZUNION, + ZUNIONSTORE, + zUnionStore: ZUNIONSTORE, } as const satisfies Record; diff --git a/todo.md b/todo.md index adb88fe025..6a7744fc3f 100644 --- a/todo.md +++ b/todo.md @@ -15,11 +15,9 @@ # waiting List - `ZRANGEBYSCORE.ts` - `ZRANGEBYLEX.ts` -- `ZUNION.ts` - `ZREMRANGEBYLEX.ts` - `ZREMRANGEBYRANK.ts` - `ZREMRANGEBYSCORE.ts` -- `ZUNION.ts` - `ZUNIONSTORE.ts` # fot leiba