@@ -1070,6 +1070,7 @@ test('bulk delete', t => {
1070
1070
const [ { port } , server ] = await buildServer ( handler )
1071
1071
const client = new Client ( { node : `http://localhost:${ port } ` } )
1072
1072
let id = 0
1073
+
1073
1074
const result = await client . helpers . bulk ( {
1074
1075
datasource : dataset . slice ( ) ,
1075
1076
flushBytes : 1 ,
@@ -1106,6 +1107,70 @@ test('bulk delete', t => {
1106
1107
server . stop ( )
1107
1108
} )
1108
1109
1110
+ t . test ( 'Should call onDrop on the correct document when doing a mix of operations that includes deletes' , async t => {
1111
+ // checks to ensure onDrop doesn't provide the wrong document when some operations are deletes
1112
+ // see https://github.com/elastic/elasticsearch-js/issues/1751
1113
+ async function handler ( req : http . IncomingMessage , res : http . ServerResponse ) {
1114
+ res . setHeader ( 'content-type' , 'application/json' )
1115
+ res . end ( JSON . stringify ( {
1116
+ took : 0 ,
1117
+ errors : true ,
1118
+ items : [
1119
+ { delete : { status : 200 } } ,
1120
+ { index : { status : 429 } } ,
1121
+ { index : { status : 200 } }
1122
+ ]
1123
+ } ) )
1124
+ }
1125
+
1126
+ const [ { port } , server ] = await buildServer ( handler )
1127
+ const client = new Client ( { node : `http://localhost:${ port } ` } )
1128
+ let counter = 0
1129
+ const result = await client . helpers . bulk ( {
1130
+ datasource : dataset . slice ( ) ,
1131
+ concurrency : 1 ,
1132
+ wait : 10 ,
1133
+ retries : 0 ,
1134
+ onDocument ( doc ) {
1135
+ counter ++
1136
+ if ( counter === 1 ) {
1137
+ return {
1138
+ delete : {
1139
+ _index : 'test' ,
1140
+ _id : String ( counter )
1141
+ }
1142
+ }
1143
+ } else {
1144
+ return {
1145
+ index : {
1146
+ _index : 'test' ,
1147
+ }
1148
+ }
1149
+ }
1150
+ } ,
1151
+ onDrop ( doc ) {
1152
+ t . same ( doc , {
1153
+ status : 429 ,
1154
+ error : null ,
1155
+ operation : { index : { _index : 'test' } } ,
1156
+ document : { user : "arya" , age : 18 } ,
1157
+ retried : false ,
1158
+ } )
1159
+ }
1160
+ } )
1161
+
1162
+ t . type ( result . time , 'number' )
1163
+ t . type ( result . bytes , 'number' )
1164
+ t . match ( result , {
1165
+ total : 3 ,
1166
+ successful : 2 ,
1167
+ retry : 0 ,
1168
+ failed : 1 ,
1169
+ aborted : false
1170
+ } )
1171
+ server . stop ( )
1172
+ } )
1173
+
1109
1174
t . end ( )
1110
1175
} )
1111
1176
0 commit comments