1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-10 11:43:01 +03:00

implement some GEO commands, improve scan generic transformer, expose RPUSHX

This commit is contained in:
leibale
2021-07-19 16:39:09 -04:00
parent c72aab2fc2
commit a10b276144
24 changed files with 924 additions and 59 deletions

View File

@@ -1,8 +1,9 @@
import { strict as assert } from 'assert';
import { isKeyObject } from 'util/types';
import {
transformReplyBoolean,
transformReplyBooleanArray,
transformScanArguments,
pushScanArguments,
transformReplyNumberInfinity,
transformReplyNumberInfinityArray,
transformReplyNumberInfinityNull,
@@ -12,7 +13,11 @@ import {
transformReplyStreamMessages,
transformReplyStreamsMessages,
transformReplyStreamsMessagesNull,
transformReplySortedSetWithScores
transformReplySortedSetWithScores,
pushGeoCountArgument,
pushGeoSearchArguments,
transformGeoMembersWithReply,
GeoReplyWith
} from './generic-transformers';
describe('Generic Transformers', () => {
@@ -48,17 +53,17 @@ describe('Generic Transformers', () => {
});
});
describe('transformScanArguments', () => {
describe('pushScanArguments', () => {
it('cusror only', () => {
assert.deepEqual(
transformScanArguments(0),
pushScanArguments([], 0),
['0']
);
});
it('with MATCH', () => {
assert.deepEqual(
transformScanArguments(0, {
pushScanArguments([], 0, {
MATCH: 'pattern'
}),
['0', 'MATCH', 'pattern']
@@ -67,7 +72,7 @@ describe('Generic Transformers', () => {
it('with COUNT', () => {
assert.deepEqual(
transformScanArguments(0, {
pushScanArguments([], 0, {
COUNT: 1
}),
['0', 'COUNT', '1']
@@ -76,7 +81,7 @@ describe('Generic Transformers', () => {
it('with MATCH & COUNT', () => {
assert.deepEqual(
transformScanArguments(0, {
pushScanArguments([], 0, {
MATCH: 'pattern',
COUNT: 1
}),
@@ -99,7 +104,7 @@ describe('Generic Transformers', () => {
Infinity
);
});
it('-inf', () => {
assert.equal(
transformReplyNumberInfinity('-inf'),
@@ -271,4 +276,190 @@ describe('Generic Transformers', () => {
}]
);
});
describe('pushGeoCountArgument', () => {
it('undefined', () => {
assert.deepEqual(
pushGeoCountArgument([], undefined),
[]
);
});
it('number', () => {
assert.deepEqual(
pushGeoCountArgument([], 1),
['COUNT', '1']
);
});
it('with ANY', () => {
assert.deepEqual(
pushGeoCountArgument([], {
value: 1,
ANY: true
}),
['COUNT', '1', 'ANY']
);
});
});
describe('pushGeoSearchArguments', () => {
it('FROMMEMBER, BYRADIUS', () => {
assert.deepEqual(
pushGeoSearchArguments([], 'key', 'member', {
radius: 1,
unit: 'm'
}),
['key', 'FROMMEMBER', 'member', 'BYRADIUS', '1', 'm']
);
});
it('FROMLONLAT, BYBOX', () => {
assert.deepEqual(
pushGeoSearchArguments([], 'key', {
longitude: 1,
latitude: 2
}, {
width: 1,
height: 2,
unit: 'm'
}),
['key', 'FROMLONLAT', '1', '2', 'BYBOX', '1', '2', 'm']
);
});
it('with SORT', () => {
assert.deepEqual(
pushGeoSearchArguments([], 'key', 'member', {
radius: 1,
unit: 'm'
}, {
SORT: 'ASC'
}),
['key', 'FROMMEMBER', 'member', 'BYRADIUS', '1', 'm', 'ASC']
);
});
});
describe('transformGeoMembersWithReply', () => {
it('DISTANCE', () => {
assert.deepEqual(
transformGeoMembersWithReply([
[
'1',
'2'
],
[
'3',
'4'
]
], [GeoReplyWith.DISTANCE]),
[{
member: '1',
distance: '2'
}, {
member: '3',
distance: '4'
}]
);
});
it('HASH', () => {
assert.deepEqual(
transformGeoMembersWithReply([
[
'1',
2
],
[
'3',
4
]
], [GeoReplyWith.HASH]),
[{
member: '1',
hash: 2
}, {
member: '3',
hash: 4
}]
);
});
it('COORDINATES', () => {
assert.deepEqual(
transformGeoMembersWithReply([
[
'1',
[
'2',
'3'
]
],
[
'4',
[
'5',
'6'
]
]
], [GeoReplyWith.COORDINATES]),
[{
member: '1',
coordinates: {
longitude: '2',
latitude: '3'
}
}, {
member: '4',
coordinates: {
longitude: '5',
latitude: '6'
}
}]
);
});
it('DISTANCE, HASH, COORDINATES', () => {
assert.deepEqual(
transformGeoMembersWithReply([
[
'1',
'2',
3,
[
'4',
'5'
]
],
[
'6',
'7',
8,
[
'9',
'10'
]
]
], [GeoReplyWith.DISTANCE, GeoReplyWith.HASH, GeoReplyWith.COORDINATES]),
[{
member: '1',
distance: '2',
hash: 3,
coordinates: {
longitude: '4',
latitude: '5'
}
}, {
member: '6',
distance: '7',
hash: 8,
coordinates: {
longitude: '9',
latitude: '10'
}
}]
);
});
});
});