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