1
+ import { strict as assert } from 'node:assert' ;
2
+ import testUtils , { GLOBAL , sleep } 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, thows 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' , { mode : 'FNX' , expiration : 'KEEPTTL' } , 'field' , 'value' ) ;
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' , { mode : 'FXX' , expiration : { type : 'EX' , value : 500 } } , 'field' , 'value' ) ;
66
+ assert . deepEqual ( parser . redisArgs , [ 'HSETEX' , 'key' , 'FXX' , 'EX' , '500' , 'FIELDS' , '1' , 'field' , 'value' ] ) ;
67
+ } ) ;
68
+ } ) ;
69
+
70
+
71
+ // TODO: enable when new test container is released
72
+ describe . skip ( 'HSETEX call' , ( ) => {
73
+ testUtils . testWithClientIfVersionWithinRange ( [ [ 8 ] , 'LATEST' ] , 'hSetEx empty single field' , async client => {
74
+ assert . deepEqual (
75
+ await client . hSetEx ( 'key' , { expiration : { type : "EX" , value : 500 } , mode : "FNX" } , 'filed1' , 'value1' ) ,
76
+ 1
77
+ ) ;
78
+
79
+ assert . deepEqual (
80
+ await client . hSetEx ( 'key' , { expiration : { type : "EX" , value : 500 } , mode : "FXX" } , [ 'filed1' , 'value1' , 'field2' , 'value2' ] ) ,
81
+ 0
82
+ ) ;
83
+
84
+ assert . deepEqual (
85
+ await client . hSetEx ( 'key' , { expiration : { type : "EX" , value : 500 } , mode : "FNX" } , [ 'filed1' , 'value1' , 'field2' , 'value2' ] ) ,
86
+ 1
87
+ ) ;
88
+
89
+ assert . deepEqual (
90
+ await client . hSetEx ( 'key' , { expiration : { type : "EX" , value : 500 } , mode : "FNX" } , 'filed2' , 'value2' ) ,
91
+ 1
92
+ ) ;
93
+
94
+ assert . deepEqual (
95
+ await client . hSetEx ( 'key' , { expiration : { type : "EX" , value : 500 } , mode : "FXX" } , [ 'filed1' , 'value1' , 'field2' , 'value2' ] ) ,
96
+ 1
97
+ ) ;
98
+ } , GLOBAL . SERVERS . OPEN ) ;
99
+ } ) ;
0 commit comments