1
+ import { strict as assert } from 'node:assert' ;
2
+ import testUtils , { GLOBAL } from '../test-utils' ;
3
+ import { BasicCommandParser } from '../client/parser' ;
4
+ import HSETEX from './HSETEX' ;
5
+
6
+ describe ( 'HSETEX parseCommand' , ( ) => {
7
+ it ( 'hSetEx parseCommand base' , ( ) => {
8
+ const parser = new BasicCommandParser ;
9
+ HSETEX . parseCommand ( parser , 'key' , [ 'field' , 'value' ] ) ;
10
+ assert . deepEqual ( parser . redisArgs , [ 'HSETEX' , 'key' , 'FIELDS' , '1' , 'field' , 'value' ] ) ;
11
+ } ) ;
12
+
13
+ it ( 'hSetEx parseCommand base empty obj' , ( ) => {
14
+ const parser = new BasicCommandParser ;
15
+ assert . throws ( ( ) => { HSETEX . parseCommand ( parser , 'key' , { } ) } ) ;
16
+ } ) ;
17
+
18
+ it ( 'hSetEx parseCommand base one key obj' , ( ) => {
19
+ const parser = new BasicCommandParser ;
20
+ HSETEX . parseCommand ( parser , 'key' , { 'k' : 'v' } ) ;
21
+ assert . deepEqual ( parser . redisArgs , [ 'HSETEX' , 'key' , 'FIELDS' , '1' , 'k' , 'v' ] ) ;
22
+ } ) ;
23
+
24
+ it ( 'hSetEx parseCommand array' , ( ) => {
25
+ const parser = new BasicCommandParser ;
26
+ HSETEX . parseCommand ( parser , 'key' , [ 'field1' , 'value1' , 'field2' , 'value2' ] ) ;
27
+ assert . deepEqual ( parser . redisArgs , [ 'HSETEX' , 'key' , 'FIELDS' , '2' , 'field1' , 'value1' , 'field2' , 'value2' ] ) ;
28
+ } ) ;
29
+
30
+ it ( 'hSetEx parseCommand array invalid args, throws an error' , ( ) => {
31
+ const parser = new BasicCommandParser ;
32
+ assert . throws ( ( ) => { HSETEX . parseCommand ( parser , 'key' , [ 'field1' , 'value1' , 'field2' ] ) } ) ;
33
+ } ) ;
34
+
35
+ it ( 'hSetEx parseCommand array in array' , ( ) => {
36
+ const parser1 = new BasicCommandParser ;
37
+ HSETEX . parseCommand ( parser1 , 'key' , [ [ 'field1' , 'value1' ] , [ 'field2' , 'value2' ] ] ) ;
38
+ assert . deepEqual ( parser1 . redisArgs , [ 'HSETEX' , 'key' , 'FIELDS' , '2' , 'field1' , 'value1' , 'field2' , 'value2' ] ) ;
39
+
40
+ const parser2 = new BasicCommandParser ;
41
+ HSETEX . parseCommand ( parser2 , 'key' , [ [ 'field1' , 'value1' ] , [ 'field2' , 'value2' ] , [ 'field3' , 'value3' ] ] ) ;
42
+ assert . deepEqual ( parser2 . redisArgs , [ 'HSETEX' , 'key' , 'FIELDS' , '3' , 'field1' , 'value1' , 'field2' , 'value2' , 'field3' , 'value3' ] ) ;
43
+ } ) ;
44
+
45
+ it ( 'hSetEx parseCommand map' , ( ) => {
46
+ const parser1 = new BasicCommandParser ;
47
+ HSETEX . parseCommand ( parser1 , 'key' , new Map ( [ [ 'field1' , 'value1' ] , [ 'field2' , 'value2' ] ] ) ) ;
48
+ assert . deepEqual ( parser1 . redisArgs , [ 'HSETEX' , 'key' , 'FIELDS' , '2' , 'field1' , 'value1' , 'field2' , 'value2' ] ) ;
49
+ } ) ;
50
+
51
+ it ( 'hSetEx parseCommand obj' , ( ) => {
52
+ const parser1 = new BasicCommandParser ;
53
+ HSETEX . parseCommand ( parser1 , 'key' , { field1 : "value1" , field2 : "value2" } ) ;
54
+ assert . deepEqual ( parser1 . redisArgs , [ 'HSETEX' , 'key' , 'FIELDS' , '2' , 'field1' , 'value1' , 'field2' , 'value2' ] ) ;
55
+ } ) ;
56
+
57
+ it ( 'hSetEx parseCommand options FNX KEEPTTL' , ( ) => {
58
+ const parser = new BasicCommandParser ;
59
+ HSETEX . parseCommand ( parser , 'key' , [ 'field' , 'value' ] , { mode : 'FNX' , expiration : 'KEEPTTL' } ) ;
60
+ assert . deepEqual ( parser . redisArgs , [ 'HSETEX' , 'key' , 'FNX' , 'KEEPTTL' , 'FIELDS' , '1' , 'field' , 'value' ] ) ;
61
+ } ) ;
62
+
63
+ it ( 'hSetEx parseCommand options FXX EX 500' , ( ) => {
64
+ const parser = new BasicCommandParser ;
65
+ HSETEX . parseCommand ( parser , 'key' , [ 'field' , 'value' ] , { mode : 'FXX' , expiration : { type : 'EX' , value : 500 } } ) ;
66
+ assert . deepEqual ( parser . redisArgs , [ 'HSETEX' , 'key' , 'FXX' , 'EX' , '500' , 'FIELDS' , '1' , 'field' , 'value' ] ) ;
67
+ } ) ;
68
+ } ) ;
69
+
70
+
71
+ describe ( 'HSETEX call' , ( ) => {
72
+ testUtils . testWithClientIfVersionWithinRange ( [ [ 8 ] , 'LATEST' ] , 'hSetEx calls' , async client => {
73
+ assert . deepEqual (
74
+ await client . hSetEx ( 'key_hsetex_call' , [ 'field1' , 'value1' ] , { expiration : { type : "EX" , value : 500 } , mode : "FNX" } ) ,
75
+ 1
76
+ ) ;
77
+
78
+ assert . deepEqual (
79
+ await client . hSetEx ( 'key_hsetex_call' , [ 'field1' , 'value1' , 'field2' , 'value2' ] , { expiration : { type : "EX" , value : 500 } , mode : "FXX" } ) ,
80
+ 0
81
+ ) ;
82
+
83
+ assert . deepEqual (
84
+ await client . hSetEx ( 'key_hsetex_call' , [ 'field1' , 'value1' , 'field2' , 'value2' ] , { expiration : { type : "EX" , value : 500 } , mode : "FNX" } ) ,
85
+ 0
86
+ ) ;
87
+
88
+ assert . deepEqual (
89
+ await client . hSetEx ( 'key_hsetex_call' , [ 'field2' , 'value2' ] , { expiration : { type : "EX" , value : 500 } , mode : "FNX" } ) ,
90
+ 1
91
+ ) ;
92
+
93
+ assert . deepEqual (
94
+ await client . hSetEx ( 'key_hsetex_call' , [ 'field1' , 'value1' , 'field2' , 'value2' ] , { expiration : { type : "EX" , value : 500 } , mode : "FXX" } ) ,
95
+ 1
96
+ ) ;
97
+ } , GLOBAL . SERVERS . OPEN ) ;
98
+ } ) ;
0 commit comments