Skip to content

Commit d7f8b88

Browse files
committed
fix #168
1 parent ea96b55 commit d7f8b88

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

src/Kuzzle.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,17 +1339,19 @@ Kuzzle.prototype.query = function (queryArgs, query, options, cb) {
13391339
if (self.state === 'connected' || (options && options.queuable === false)) {
13401340
if (self.state === 'connected') {
13411341
emitRequest.call(this, object, cb);
1342-
} else if (cb) {
1343-
cb(new Error('Unable to execute request: not connected to a Kuzzle server.\nDiscarded request: ' + JSON.stringify(object)));
1342+
} else {
1343+
discardRequest(object, cb);
13441344
}
1345-
} else if (self.queuing || ['initializing', 'connecting'].indexOf(self.state) !== -1) {
1345+
} else if (self.queuing || (options && options.queuable === true) || ['initializing', 'connecting'].indexOf(self.state) !== -1) {
13461346
cleanQueue.call(this, object, cb);
1347-
13481347
if (!self.queueFilter || self.queueFilter(object)) {
13491348
self.offlineQueue.push({ts: Date.now(), query: object, cb: cb});
13501349
self.emitEvent('offlineQueuePush', {query: object, cb: cb});
13511350
}
13521351
}
1352+
else {
1353+
discardRequest(object, cb);
1354+
}
13531355

13541356
return self;
13551357
};
@@ -1486,4 +1488,10 @@ Kuzzle.prototype.stopQueuing = function () {
14861488
return this;
14871489
};
14881490

1491+
function discardRequest(object, cb) {
1492+
if (cb) {
1493+
cb(new Error('Unable to execute request: not connected to a Kuzzle server.\nDiscarded request: ' + JSON.stringify(object)));
1494+
}
1495+
}
1496+
14891497
module.exports = Kuzzle;

test/kuzzle/query.test.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,21 @@ describe('Query management', function () {
255255
should(errorRaised).be.true();
256256
});
257257

258+
it('should discard the request if not connected and if queuing is deactivated', function () {
259+
var
260+
errorRaised = false;
261+
262+
callback = () => {
263+
errorRaised = true;
264+
};
265+
266+
kuzzle.state = 'reconnecting';
267+
kuzzle.queuing = false;
268+
kuzzle.query(queryArgs, { body: { some: 'query'}}, callback);
269+
should(emitted).be.false();
270+
should(errorRaised).be.true();
271+
});
272+
258273
it('should queue the request during offline mode, if queuing has been activated', function (done) {
259274
var
260275
query = { body: { some: 'query'}},
@@ -282,6 +297,33 @@ describe('Query management', function () {
282297
});
283298
});
284299

300+
it('should queue the request during offline mode, if queuable is set to true', function (done) {
301+
var
302+
query = { body: { some: 'query'}},
303+
cb = function () {},
304+
now = Date.now(),
305+
eventFired = false;
306+
307+
kuzzle.state = 'offline';
308+
kuzzle.queuing = false;
309+
kuzzle.addListener('offlineQueuePush', object => {
310+
eventFired = true;
311+
should(object.query.body).be.eql(query.body);
312+
});
313+
314+
kuzzle.query(queryArgs, query, {queuable: true}, cb);
315+
316+
process.nextTick(() => {
317+
should(emitted).be.false();
318+
should(kuzzle.offlineQueue.length).be.exactly(1);
319+
should(kuzzle.offlineQueue[0].ts).not.be.undefined().and.be.approximately(now, 10);
320+
should(kuzzle.offlineQueue[0].query).match(query);
321+
should(kuzzle.offlineQueue[0].cb).be.exactly(cb);
322+
should(eventFired).be.true();
323+
done();
324+
});
325+
});
326+
285327
it('should queue the request if a queue filter has been defined and if it allows queuing', function (done) {
286328
var
287329
query = { body: { some: 'query'}},

0 commit comments

Comments
 (0)