Skip to content

Commit 4446be6

Browse files
RI-3612-update test
1 parent db0b42c commit 4446be6

File tree

11 files changed

+50
-14
lines changed

11 files changed

+50
-14
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './redis-string';
2+
export * from './zset-score';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './zset-score.decorator';
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import {
2+
registerDecorator,
3+
ValidationOptions,
4+
} from 'class-validator';
5+
import { ZSetScoreValidator } from 'src/common/validators';
6+
7+
export function IsNumberOrString(validationOptions?: ValidationOptions) {
8+
return (object: any, propertyName: string) => {
9+
registerDecorator({
10+
name: 'IsNumberOrString',
11+
target: object.constructor,
12+
propertyName,
13+
options: validationOptions,
14+
validator: ZSetScoreValidator,
15+
});
16+
};
17+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './redis-string.validator';
2+
export * from './zset-score.validator';
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { isNumber } from 'lodash';
2+
import {
3+
ValidationArguments,
4+
ValidatorConstraint,
5+
ValidatorConstraintInterface,
6+
} from 'class-validator';
7+
8+
@ValidatorConstraint({ name: 'RedisStringValidator', async: true })
9+
export class ZSetScoreValidator implements ValidatorConstraintInterface {
10+
async validate(value: any) {
11+
return value === 'inf' || value === '-inf' || isNumber(value);
12+
}
13+
14+
defaultMessage(args: ValidationArguments) {
15+
return `${args.property || 'field'} must be a string or a number`;
16+
}
17+
}

redisinsight/api/src/modules/browser/dto/z-set.dto.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@ import {
99
IsNotEmptyObject,
1010
IsNumber, IsString,
1111
Min,
12-
ValidateNested
12+
ValidateNested,
1313
} from 'class-validator';
1414
import { Type } from 'class-transformer';
15-
import { isNumber } from 'lodash';
1615
import { SortOrder } from 'src/constants';
1716
import {
1817
DeleteMembersFromSetDto,
1918
DeleteMembersFromSetResponse,
2019
} from 'src/modules/browser/dto/set.dto';
2120
import { RedisString } from 'src/common/constants';
22-
import { IsRedisString, RedisStringType } from 'src/common/decorators';
21+
import { IsRedisString, RedisStringType, IsNumberOrString } from 'src/common/decorators';
2322
import {
2423
KeyDto, KeyResponse, KeyWithExpireDto, ScanDataTypeDto,
2524
} from './keys.dto';
@@ -100,8 +99,8 @@ export class ZSetMemberDto {
10099
default: 1,
101100
})
102101
@IsDefined()
103-
@Type((val) => isNumber(val) ? ScoreNumberValidation : ScoreStringValidation)
104-
score: number | string;
102+
@IsNumberOrString()
103+
score: number | 'inf' | '-inf';
105104
}
106105

107106
export class AddMembersToZSetDto extends KeyDto {

redisinsight/api/test/api/z-set/PATCH-instance-id-zSet.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ const dataSchema = Joi.object({
2222
member: Joi.object().keys({
2323
name: Joi.string().required(),
2424
// todo: allow(true) - is incorrect but will be transformed to number by BE. Investigate/fix it
25-
score: Joi.number().required().allow(true),
25+
score: Joi.number().required().allow('inf', '-inf').label('.score'),
2626
}).messages({
27-
'number.base': '{#lavel} must be a number',
27+
'number.base': '{#lavel} must be a string or a number',
2828
}),
2929
}).strict();
3030

redisinsight/api/test/api/z-set/POST-instance-id-zSet-get_members.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import {
66
requirements,
77
generateInvalidDataTestCases,
88
validateInvalidDataTestCase,
9-
getMainCheckFn, JoiRedisString
9+
getMainCheckFn,
10+
JoiRedisString,
1011
} from '../deps';
1112
const { server, request, constants, rte } = deps;
1213

@@ -38,7 +39,7 @@ const responseSchema = Joi.object().keys({
3839
total: Joi.number().integer().required(),
3940
members: Joi.array().items(Joi.object().keys({
4041
name: JoiRedisString.required(),
41-
score: Joi.number().required(),
42+
score: Joi.number().required().allow('inf', '-inf'),
4243
})).required(),
4344
}).required();
4445

redisinsight/api/test/api/z-set/POST-instance-id-zSet-search.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const responseSchema = Joi.object().keys({
4141
nextCursor: Joi.number().integer().required(),
4242
members: Joi.array().items(Joi.object().keys({
4343
name: JoiRedisString.required(),
44-
score: Joi.number().required(),
44+
score: Joi.number().required().allow('inf', '-inf'),
4545
})).required(),
4646
}).required();
4747

redisinsight/api/test/api/z-set/POST-instance-id-zSet.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const dataSchema = Joi.object({
2424
// todo: allow(true) - is incorrect but will be transformed to number by BE. Investigate/fix it
2525
score: Joi.number().required().allow(true).label('.score'),
2626
})).messages({
27-
'number.base': '{#lavel} must be a number',
27+
'number.base': '{#lavel} must be a string or a number',
2828
'array.sparse': 'members must be either object or array',
2929
'array.base': 'property {#label} must be either object or array',
3030
}),

0 commit comments

Comments
 (0)