diff --git a/.ci/doc/config.yml b/.ci/doc/config.yml index 4dc83e7d8..7c5714937 100644 --- a/.ci/doc/config.yml +++ b/.ci/doc/config.yml @@ -14,10 +14,10 @@ runners: lint: global: true cmd: eslint -c /mnt/.ci/doc/eslint.json {{ snippet.dir }} - before: timeout -t 600 ash -c 'until stat /tmp/runner_ready_to_lint; do sleep 1; done' + before: timeout 600 ash -c 'until stat /tmp/runner_ready_to_lint; do sleep 1; done' run: cmd: node {{ snippet.source }} - before: timeout -t 600 ash -c 'until stat /tmp/runner_is_ready && curl -f -s -o /dev/null http://kuzzle:7512/_now; do sleep 1; done' + before: timeout 600 ash -c 'until stat /tmp/runner_is_ready && curl -f -s -o /dev/null http://kuzzle:7512/_now; do sleep 1; done' web: service: doc-runner-web @@ -43,5 +43,3 @@ runners: run: cmd: node puppeteer.js /tmp/{{ snippet.name }}/index.html before: timeout 600 bash -c 'until curl -f -s -o /dev/null http://kuzzle:7512/_now; do sleep 1; done' - - diff --git a/src/Kuzzle.js b/src/Kuzzle.js index 1a37f1727..ba039be47 100644 --- a/src/Kuzzle.js +++ b/src/Kuzzle.js @@ -406,14 +406,16 @@ class Kuzzle extends KuzzleEventEmitter { request.requestId = uuidv4(); } - // we follow the api but allow some more logical "mistakes" (the only allowed value for refresh arg is "wait_for") - if (request.refresh) { + // we follow the api but allow some more logical "mistakes" + // (the only allowed value for refresh arg is "wait_for") + if (request.refresh || options.refresh) { request.refresh = 'wait_for'; } - if (!request.volatile) { + if (! request.volatile) { request.volatile = this.volatile; - } else if ( + } + else if ( typeof request.volatile !== 'object' || Array.isArray(request.volatile) ) { diff --git a/src/controllers/collection.js b/src/controllers/collection.js index acb1f9739..1efe54d28 100644 --- a/src/controllers/collection.js +++ b/src/controllers/collection.js @@ -12,21 +12,23 @@ class CollectionController extends BaseController { } create (index, collection, mappings = {}, options = {}) { - return this.query({ + const request = { index, collection, body: mappings, action: 'create' - }, options) + }; + return this.query(request, options) .then(response => response.result); } deleteSpecifications (index, collection, options = {}) { - return this.query({ + const request = { index, collection, action: 'deleteSpecifications' - }, options) + }; + return this.query(request, options) .then(response => response.result); } @@ -97,12 +99,12 @@ class CollectionController extends BaseController { } truncate (index, collection, options = {}) { - return this.query({ + const request = { index, collection, - action: 'truncate', - refresh: options.refresh - }, options) + action: 'truncate' + }; + return this.query(request, options) .then(response => response.result); } diff --git a/src/controllers/document.js b/src/controllers/document.js index 6fa829d02..451fae5c9 100644 --- a/src/controllers/document.js +++ b/src/controllers/document.js @@ -16,10 +16,8 @@ class DocumentController extends BaseController { index, collection, body, - action: 'count', - includeTrash: options.includeTrash + action: 'count' }; - delete options.includeTrash; return this.query(request, options) .then(response => response.result.count); @@ -31,11 +29,8 @@ class DocumentController extends BaseController { collection, _id, body: document, - action: 'create', - refresh: options.refresh + action: 'create' }; - delete options.refresh; - return this.query(request, options) .then(response => response.result); } @@ -46,10 +41,8 @@ class DocumentController extends BaseController { collection, _id, body, - action: 'createOrReplace', - refresh: options.refresh + action: 'createOrReplace' }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -60,10 +53,8 @@ class DocumentController extends BaseController { index, collection, _id, - action: 'delete', - refresh: options.refresh + action: 'delete' }; - delete options.refresh; return this.query(request, options) .then(response => response.result._id); @@ -74,10 +65,8 @@ class DocumentController extends BaseController { index, collection, body, - action: 'deleteByQuery', - refresh: options.refresh + action: 'deleteByQuery' }; - delete options.refresh; return this.query(request, options) .then(response => response.result.ids); @@ -100,10 +89,8 @@ class DocumentController extends BaseController { index, collection, _id, - action: 'get', - includeTrash: options.includeTrash + action: 'get' }; - delete options.includeTrash; return this.query(request, options) .then(response => response.result); @@ -114,10 +101,8 @@ class DocumentController extends BaseController { index, collection, body: {documents}, - action: 'mCreate', - refresh: options.refresh + action: 'mCreate' }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -128,10 +113,8 @@ class DocumentController extends BaseController { index, collection, body: {documents}, - action: 'mCreateOrReplace', - refresh: options.refresh + action: 'mCreateOrReplace' }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -142,10 +125,8 @@ class DocumentController extends BaseController { index, collection, body: {ids}, - action: 'mDelete', - refresh: options.refresh + action: 'mDelete' }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -156,10 +137,8 @@ class DocumentController extends BaseController { index, collection, body: {ids}, - action: 'mGet', - includeTrash: options.includeTrash + action: 'mGet' }; - delete options.includeTrash; return this.query(request, options) .then(response => response.result); @@ -170,10 +149,8 @@ class DocumentController extends BaseController { index, collection, body: {documents}, - action: 'mReplace', - refresh: options.refresh + action: 'mReplace' }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -184,10 +161,8 @@ class DocumentController extends BaseController { index, collection, body: {documents}, - action: 'mUpdate', - refresh: options.refresh + action: 'mUpdate' }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -199,10 +174,8 @@ class DocumentController extends BaseController { collection, _id, body, - action: 'replace', - refresh: options.refresh + action: 'replace' }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -216,7 +189,7 @@ class DocumentController extends BaseController { action: 'search', }; - for (const opt of ['from', 'size', 'scroll', 'includeTrash']) { + for (const opt of ['from', 'size', 'scroll']) { request[opt] = options[opt]; delete options[opt]; } @@ -237,10 +210,8 @@ class DocumentController extends BaseController { _id, body, action: 'update', - refresh: options.refresh, retryOnConflict: options.retryOnConflict }; - delete options.refresh; delete options.retryOnConflict; return this.query(request, options) diff --git a/src/controllers/index.js b/src/controllers/index.js index 6c7602630..ebd66435c 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -9,23 +9,25 @@ class IndexController extends BaseController { super(kuzzle, 'index'); } - create (index, options) { - return this.query({ + create (index, options = {}) { + const request = { index, - action : 'create' - }, options) + action: 'create' + }; + return this.query(request, options) .then(response => response.result); } - delete (index, options) { - return this.query({ + delete (index, options = {}) { + const request = { index, - action : 'delete' - }, options) + action: 'delete' + }; + return this.query(request, options) .then(response => response.result.acknowledged); } - exists (index, options) { + exists (index, options = {}) { return this.query({ index, action : 'exists' @@ -40,13 +42,15 @@ class IndexController extends BaseController { .then(response => response.result.indexes); } - mDelete (indexes, options) { - return this.query({ + mDelete (indexes, options = {}) { + const request = { action: 'mDelete', body: { indexes } - }, options) + }; + + return this.query(request, options) .then(response => response.result.deleted); } } diff --git a/src/controllers/security/index.js b/src/controllers/security/index.js index 1591bd94d..ec3de7759 100644 --- a/src/controllers/security/index.js +++ b/src/controllers/security/index.js @@ -42,10 +42,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'createOrReplaceProfile', - refresh: options.refresh + action: 'createOrReplaceProfile' }; - delete options.refresh; return this.query(request, options) .then(response => new Profile(this.kuzzle, response.result._id, response.result._source.policies)); @@ -55,10 +53,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'createOrReplaceRole', - refresh: options.refresh + action: 'createOrReplaceRole' }; - delete options.refresh; return this.query(request, options) .then(response => new Role(this.kuzzle, response.result._id, response.result._source.controllers)); @@ -68,10 +64,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'createProfile', - refresh: options.refresh + action: 'createProfile' }; - delete options.refresh; return this.query(request, options) .then(response => new Profile(this.kuzzle, response.result._id, response.result._source.policies)); @@ -85,10 +79,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'createRestrictedUser', - refresh: options.refresh + action: 'createRestrictedUser' }; - delete options.refresh; return this.query(request, options) .then(response => new User(this.kuzzle, response.result._id, response.result._source)); @@ -98,10 +90,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'createRole', - refresh: options.refresh + action: 'createRole' }; - delete options.refresh; return this.query(request, options) .then(response => new Role(this.kuzzle, response.result._id, response.result._source.controllers)); @@ -111,45 +101,48 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'createUser', - refresh: options.refresh + action: 'createUser' }; - delete options.refresh; return this.query(request, options) .then(response => new User(this.kuzzle, response.result._id, response.result._source)); } deleteCredentials (strategy, _id, options = {}) { - return this.query({ + const request = { strategy, _id, action: 'deleteCredentials' - }, options) + }; + + return this.query(request, options) .then(response => response.result); } deleteProfile (_id, options = {}) { - return this.query({ + const request = { _id, action: 'deleteProfile' - }, options) + }; + return this.query(request, options) .then(response => response.result); } deleteRole (_id, options = {}) { - return this.query({ + const request = { _id, action: 'deleteRole' - }, options) + }; + return this.query(request, options) .then(response => response.result); } deleteUser (_id, options = {}) { - return this.query({ + const request = { _id, action: 'deleteUser' - }, options) + }; + return this.query(request, options) .then(response => response.result); } @@ -259,10 +252,8 @@ class SecurityController extends BaseController { mDeleteProfiles (ids, options = {}) { const request = { action: 'mDeleteProfiles', - body: {ids}, - refresh: options.refresh + body: {ids} }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -271,10 +262,8 @@ class SecurityController extends BaseController { mDeleteRoles (ids, options = {}) { const request = { action: 'mDeleteRoles', - body: {ids}, - refresh: options.refresh + body: {ids} }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -283,10 +272,8 @@ class SecurityController extends BaseController { mDeleteUsers (ids, options = {}) { const request = { action: 'mDeleteUsers', - body: {ids}, - refresh: options.refresh + body: {ids} }; - delete options.refresh; return this.query(request, options) .then(response => response.result); @@ -312,11 +299,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'replaceUser', - refresh: options.refresh + action: 'replaceUser' }; - delete options.refresh; - return this.query(request, options) .then(response => new User(this.kuzzle, response.result._id, response.result._source)); } @@ -377,11 +361,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'updateProfile', - refresh: options.refresh + action: 'updateProfile' }; - delete options.refresh; - return this.query(request, options) .then(response => new Profile(this.kuzzle, response.result._id, response.result._source.policies)); } @@ -398,10 +379,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'updateRole', - refresh: options.refresh + action: 'updateRole' }; - delete options.refresh; return this.query(request, options) .then(response => new Role(this.kuzzle, response.result._id, response.result._source.controllers)); @@ -419,11 +398,8 @@ class SecurityController extends BaseController { const request = { _id, body, - action: 'updateUser', - refresh: options.refresh + action: 'updateUser' }; - delete options.refresh; - return this.query(request, options) .then(response => new User(this.kuzzle, response.result._id, response.result._source)); } diff --git a/test.js b/test.js new file mode 100644 index 000000000..1500a87d7 --- /dev/null +++ b/test.js @@ -0,0 +1,54 @@ +// Loads the Kuzzle SDK modules +const { + Kuzzle, + WebSocket, + Http +} = require('./index'); + +// Instantiates a Kuzzle client with the Http protocol +// Replace 'kuzzle' with your Kuzzle server hostname (e.g. 'localhost') +const kuzzle = new Kuzzle( + new WebSocket('localhost') +); + +let i = 0; +// Adds a listener to detect any connection problems +kuzzle.on('disconnected', () => { + console.log('disconnected') + if (i > 5) { + console.log('Max tries') + kuzzle.disconnect() + } + i++; +}) +kuzzle.on('reconnected', () => console.log('reconnected')) + +const run = async () => { + try { + // Connects to the Kuzzle server + await kuzzle.connect(); + // await kuzzle.index.create('nyc-open-data') + // await kuzzle.collection.create('nyc-open-data', 'yellow-taxi') + + // const documents = [ + // { + // _id: 'some-id', + // body: { 'capacity': 4 } + // }, + // { + // body: { this: 'document id is auto-computed' } + // } + // ]; + // const response = await kuzzle.document.mCreate( + // 'nyc-open-data', + // 'yellow-taxi', + // documents + // ); + + // console.log(JSON.stringify(response, null, 2)); + } catch (error) { + console.error(error); + } +}; + +run(); \ No newline at end of file diff --git a/test.sh b/test.sh new file mode 100644 index 000000000..153404505 --- /dev/null +++ b/test.sh @@ -0,0 +1,3 @@ + +if [[ $TRAVIS_BRANCH =~ ^master|[0-9]+-stable$ ]]; then BRANCH=stable; else BRANCH=dev; fi +echo $BRANCH diff --git a/test/controllers/collection.test.js b/test/controllers/collection.test.js index 724b2a2df..0d810c397 100644 --- a/test/controllers/collection.test.js +++ b/test/controllers/collection.test.js @@ -295,8 +295,7 @@ describe('Collection Controller', () => { controller: 'collection', action: 'truncate', index: 'index', - collection: 'collection', - refresh: undefined + collection: 'collection' }, options); should(res.acknowledged).be.a.Boolean().and.be.true(); diff --git a/test/controllers/document.test.js b/test/controllers/document.test.js index d4f4275a0..58c3a8abe 100644 --- a/test/controllers/document.test.js +++ b/test/controllers/document.test.js @@ -28,33 +28,12 @@ describe('Document Controller', () => { action: 'count', index: 'index', collection: 'collection', - body: {foo: 'bar'}, - includeTrash: undefined + body: {foo: 'bar'} }, options); should(res).be.a.Number().and.be.equal(1234); }); }); - - it('should inject the "includeTrash" option into the request', () => { - kuzzle.query.resolves({result: {count: 1234}}); - - return kuzzle.document.count('index', 'collection', {foo: 'bar'}, {includeTrash: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'count', - index: 'index', - collection: 'collection', - body: {foo: 'bar'}, - includeTrash: true - }, {}); - - should(res).be.a.Number().and.be.equal(1234); - }); - }); }); describe('create', () => { @@ -76,39 +55,12 @@ describe('Document Controller', () => { index: 'index', collection: 'collection', _id: 'document-id', - body: {foo: 'bar'}, - refresh: undefined + body: {foo: 'bar'} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = { - _id: 'document-id', - _version: 1, - _source: {foo: 'bar'} - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.create('index', 'collection', {foo: 'bar'}, 'document-id', {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'create', - index: 'index', - collection: 'collection', - _id: 'document-id', - body: {foo: 'bar'}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('createOrReplace', () => { @@ -131,40 +83,12 @@ describe('Document Controller', () => { index: 'index', collection: 'collection', _id: 'document-id', - body: {foo: 'bar'}, - refresh: undefined + body: {foo: 'bar'} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = { - _id: 'document-id', - _version: 1, - _source: {foo: 'bar'}, - created: false - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.createOrReplace('index', 'collection', 'document-id', {foo: 'bar'}, {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'createOrReplace', - index: 'index', - collection: 'collection', - _id: 'document-id', - body: {foo: 'bar'}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('delete', () => { @@ -180,33 +104,12 @@ describe('Document Controller', () => { action: 'delete', index: 'index', collection: 'collection', - _id: 'document-id', - refresh: undefined + _id: 'document-id' }, options); should(res).equal('document-id'); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({result: {_id: 'document-id'}}); - - return kuzzle.document.delete('index', 'collection', 'document-id', {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'delete', - index: 'index', - collection: 'collection', - _id: 'document-id', - refresh: true - }, {}); - - should(res).equal('document-id'); - }); - }); }); describe('deleteByQuery', () => { @@ -222,8 +125,7 @@ describe('Document Controller', () => { action: 'deleteByQuery', index: 'index', collection: 'collection', - body: {foo: 'bar'}, - refresh: undefined + body: {foo: 'bar'} }, options); should(res).be.an.Array(); @@ -233,30 +135,6 @@ describe('Document Controller', () => { should(res[2]).be.equal('baz'); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({result: {ids: ['foo', 'bar', 'baz']}}); - - return kuzzle.document.deleteByQuery('index', 'collection', {foo: 'bar'}, {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'deleteByQuery', - index: 'index', - collection: 'collection', - body: {foo: 'bar'}, - refresh: true - }, {}); - - should(res).be.an.Array(); - should(res.length).be.equal(3); - should(res[0]).be.equal('foo'); - should(res[1]).be.equal('bar'); - should(res[2]).be.equal('baz'); - }); - }); }); describe('get', () => { @@ -279,8 +157,7 @@ describe('Document Controller', () => { action: 'get', index: 'index', collection: 'collection', - _id: 'document-id', - includeTrash: undefined + _id: 'document-id' }, options); should(res._id).be.equal('document-id'); @@ -289,36 +166,6 @@ describe('Document Controller', () => { should(res._source.foo).be.equal('bar'); }); }); - - it('should inject the "includeTrash" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'document-id', - _index: 'index', - _type: 'collection', - _source: {foo: 'bar'} - } - }); - - return kuzzle.document.get('index', 'collection', 'document-id', {includeTrash: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'get', - index: 'index', - collection: 'collection', - _id: 'document-id', - includeTrash: true - }, {}); - - should(res._id).be.equal('document-id'); - should(res._index).be.equal('index'); - should(res._type).be.equal('collection'); - should(res._source.foo).be.equal('bar'); - }); - }); }); describe('mCreate', () => { @@ -342,41 +189,12 @@ describe('Document Controller', () => { action: 'mCreate', index: 'index', collection: 'collection', - body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]}, - refresh: undefined + body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = { - hits: [{ - _id: 'document-id', - _version: 1, - _source: {foo: 'bar'} - }], - total: 1 - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.mCreate('index', 'collection', [{_id: 'document-id', body: {foo: 'bar'}}], {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'mCreate', - index: 'index', - collection: 'collection', - body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('mCreateOrReplace', () => { @@ -400,41 +218,12 @@ describe('Document Controller', () => { action: 'mCreateOrReplace', index: 'index', collection: 'collection', - body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]}, - refresh: undefined + body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = { - hits: [{ - _id: 'document-id', - _version: 1, - _source: {foo: 'bar'} - }], - total: 1 - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.mCreateOrReplace('index', 'collection', [{_id: 'document-id', body: {foo: 'bar'}}], {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'mCreateOrReplace', - index: 'index', - collection: 'collection', - body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('mDelete', () => { @@ -451,34 +240,12 @@ describe('Document Controller', () => { action: 'mDelete', index: 'index', collection: 'collection', - body: {ids: ['document1', 'document2']}, - refresh: undefined + body: {ids: ['document1', 'document2']} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = ['document1', 'document2']; - kuzzle.query.resolves({result}); - - return kuzzle.document.mDelete('index', 'collection', ['document1', 'document2'], {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'mDelete', - index: 'index', - collection: 'collection', - body: {ids: ['document1', 'document2']}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('mGet', () => { @@ -501,40 +268,12 @@ describe('Document Controller', () => { action: 'mGet', index: 'index', collection: 'collection', - body: {ids: ['document1', 'document2']}, - includeTrash: undefined + body: {ids: ['document1', 'document2']} }, options); should(res).be.equal(result); }); }); - - it('should inject the "includeTrash" option into the request', () => { - const result = { - hits: [ - {_id: 'document1', _version: 1, _source: {foo: 'bar'}}, - {_id: 'document2', _version: 3, _source: {foo: 'baz'}}, - ], - total: 2 - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.mGet('index', 'collection', ['document1', 'document2'], {includeTrash: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'mGet', - index: 'index', - collection: 'collection', - body: {ids: ['document1', 'document2']}, - includeTrash: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('mReplace', () => { @@ -558,41 +297,12 @@ describe('Document Controller', () => { action: 'mReplace', index: 'index', collection: 'collection', - body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]}, - refresh: undefined + body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = { - hits: [{ - _id: 'document-id', - _version: 1, - _source: {foo: 'bar'} - }], - total: 1 - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.mReplace('index', 'collection', [{_id: 'document-id', body: {foo: 'bar'}}], {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'mReplace', - index: 'index', - collection: 'collection', - body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('mUpdate', () => { @@ -616,41 +326,12 @@ describe('Document Controller', () => { action: 'mUpdate', index: 'index', collection: 'collection', - body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]}, - refresh: undefined + body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = { - hits: [{ - _id: 'document-id', - _version: 1, - _source: {foo: 'bar'} - }], - total: 1 - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.mUpdate('index', 'collection', [{_id: 'document-id', body: {foo: 'bar'}}], {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'mUpdate', - index: 'index', - collection: 'collection', - body: {documents: [{_id: 'document-id', body: {foo: 'bar'}}]}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('replace', () => { @@ -673,40 +354,12 @@ describe('Document Controller', () => { index: 'index', collection: 'collection', _id: 'document-id', - body: {foo: 'bar'}, - refresh: undefined + body: {foo: 'bar'} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = { - _id: 'document-id', - _version: 1, - _source: {foo: 'bar'}, - created: false - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.replace('index', 'collection', 'document-id', {foo: 'bar'}, {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'replace', - index: 'index', - collection: 'collection', - _id: 'document-id', - body: {foo: 'bar'}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('search', () => { @@ -734,8 +387,7 @@ describe('Document Controller', () => { body: {foo: 'bar'}, from: 0, size: 10, - scroll: undefined, - includeTrash: undefined + scroll: undefined }, options); should(res).be.an.instanceOf(DocumentSearchResult); @@ -746,42 +398,6 @@ describe('Document Controller', () => { }); }); - it('should inject the "includeTrash" option into the request', () => { - const result = { - scrollId: 'scroll-id', - hits: [ - {_id: 'document1', _score: 0.9876, _source: {foo: 'bar'}}, - {_id: 'document2', _score: 0.6789, _source: {foo: 'barbar'}}, - {_id: 'document3', _score: 0.6543, _source: {foo: 'barbaz'}} - ], - total: 3 - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.search('index', 'collection', {foo: 'bar'}, {includeTrash: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'search', - index: 'index', - collection: 'collection', - body: {foo: 'bar'}, - from: 0, - size: 10, - scroll: undefined, - includeTrash: true - }, {}); - - should(res).be.an.instanceOf(DocumentSearchResult); - should(res._options).be.empty(); - should(res._response).be.equal(result); - should(res.fetched).be.equal(3); - should(res.total).be.equal(3); - }); - }); - it('should inject the "from", "size", "scroll" options into the request', () => { const result = { scrollId: 'scroll-id', @@ -805,8 +421,7 @@ describe('Document Controller', () => { body: {foo: 'bar'}, from: 1, size: 2, - scroll: '1m', - includeTrash: undefined + scroll: '1m' }, {}); should(res).be.an.instanceOf(DocumentSearchResult); @@ -880,7 +495,6 @@ describe('Document Controller', () => { collection: 'collection', _id: 'document-id', body: {foo: 'bar'}, - refresh: undefined, retryOnConflict: undefined }, options); @@ -888,34 +502,6 @@ describe('Document Controller', () => { }); }); - it('should inject the "refresh" option into the request', () => { - const result = { - _id: 'document-id', - _version: 1, - _source: {foo: 'bar'}, - created: false - }; - kuzzle.query.resolves({result}); - - return kuzzle.document.update('index', 'collection', 'document-id', {foo: 'bar'}, {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'document', - action: 'update', - index: 'index', - collection: 'collection', - _id: 'document-id', - body: {foo: 'bar'}, - refresh: true, - retryOnConflict: undefined - }, {}); - - should(res).be.equal(result); - }); - }); - it('should inject the "retryOnConflict" option into the request', () => { const result = { _id: 'document-id', @@ -936,7 +522,6 @@ describe('Document Controller', () => { collection: 'collection', _id: 'document-id', body: {foo: 'bar'}, - refresh: undefined, retryOnConflict: true }, {}); diff --git a/test/controllers/security.test.js b/test/controllers/security.test.js index 31cd71ee9..2b90744ec 100644 --- a/test/controllers/security.test.js +++ b/test/controllers/security.test.js @@ -123,8 +123,7 @@ describe('Security Controller', () => { _id: 'profileId', body: {foo: 'bar'}, controller: 'security', - action: 'createOrReplaceProfile', - refresh: undefined + action: 'createOrReplaceProfile' }, options); should(profile).be.an.instanceOf(Profile); @@ -132,36 +131,6 @@ describe('Security Controller', () => { should(profile.policies).be.eql(['foo', 'bar']); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'profileId', - _index: '%kuzzle', - _type: 'profiles', - _version: 1, - _source: { policies: ['foo', 'bar'] }, - created: false - } - }); - - return kuzzle.security.createOrReplaceProfile('profileId', {foo: 'bar'}, {refresh: true}) - .then(profile => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'profileId', - body: {foo: 'bar'}, - controller: 'security', - action: 'createOrReplaceProfile', - refresh: true - }, {}); - - should(profile).be.an.instanceOf(Profile); - should(profile._id).be.eql('profileId'); - should(profile.policies).be.eql(['foo', 'bar']); - }); - }); }); describe('createOrReplaceRole', () => { @@ -185,8 +154,7 @@ describe('Security Controller', () => { _id: 'roleId', body: {foo: 'bar'}, controller: 'security', - action: 'createOrReplaceRole', - refresh: undefined + action: 'createOrReplaceRole' }, options); should(role).be.an.instanceOf(Role); @@ -194,36 +162,6 @@ describe('Security Controller', () => { should(role.controllers).be.eql({foo: {actions: {bar: true}}}); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'roleId', - _index: '%kuzzle', - _type: 'profiles', - _version: 1, - _source: { controllers: {foo: {actions: {bar: true}}} }, - created: false - } - }); - - return kuzzle.security.createOrReplaceRole('roleId', {foo: 'bar'}, {refresh: true}) - .then(role => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'roleId', - body: {foo: 'bar'}, - controller: 'security', - action: 'createOrReplaceRole', - refresh: true - }, {}); - - should(role).be.an.instanceOf(Role); - should(role._id).be.eql('roleId'); - should(role.controllers).be.eql({foo: {actions: {bar: true}}}); - }); - }); }); describe('createProfile', () => { @@ -247,8 +185,7 @@ describe('Security Controller', () => { _id: 'profileId', body: {foo: 'bar'}, controller: 'security', - action: 'createProfile', - refresh: undefined + action: 'createProfile' }, options); should(profile).be.an.instanceOf(Profile); @@ -256,36 +193,6 @@ describe('Security Controller', () => { should(profile.policies).be.eql(['foo', 'bar']); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'profileId', - _index: '%kuzzle', - _type: 'profiles', - _version: 1, - _source: { policies: ['foo', 'bar'] }, - created: true - } - }); - - return kuzzle.security.createProfile('profileId', {foo: 'bar'}, {refresh: true}) - .then(profile => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'profileId', - body: {foo: 'bar'}, - controller: 'security', - action: 'createProfile', - refresh: true - }, {}); - - should(profile).be.an.instanceOf(Profile); - should(profile._id).be.eql('profileId'); - should(profile.policies).be.eql(['foo', 'bar']); - }); - }); }); describe('createRole', () => { @@ -309,8 +216,7 @@ describe('Security Controller', () => { _id: 'roleId', body: {foo: 'bar'}, controller: 'security', - action: 'createRole', - refresh: undefined + action: 'createRole' }, options); should(role).be.an.instanceOf(Role); @@ -318,36 +224,6 @@ describe('Security Controller', () => { should(role.controllers).be.eql({foo: {actions: {bar: true}}}); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'roleId', - _index: '%kuzzle', - _type: 'profiles', - _version: 1, - _source: { controllers: {foo: {actions: {bar: true}}} }, - created: true - } - }); - - return kuzzle.security.createRole('roleId', {foo: 'bar'}, {refresh: true}) - .then(role => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'roleId', - body: {foo: 'bar'}, - controller: 'security', - action: 'createRole', - refresh: true - }, {}); - - should(role).be.an.instanceOf(Role); - should(role._id).be.eql('roleId'); - should(role.controllers).be.eql({foo: {actions: {bar: true}}}); - }); - }); }); describe('createUser', () => { @@ -378,8 +254,7 @@ describe('Security Controller', () => { _id: 'userId', body, controller: 'security', - action: 'createUser', - refresh: undefined + action: 'createUser' }, options); should(user).be.an.instanceOf(User); @@ -388,44 +263,6 @@ describe('Security Controller', () => { should(user.profileIds).be.eql(['profileId']); }); }); - - it('should inject the "refresh" option into the request', () => { - const body = { - content: {foo: 'bar'}, - credentials: { - strategy: {foo: 'bar'} - } - }; - - kuzzle.query.resolves({ - result: { - _id: 'kuid', - _index: '%kuzzle', - _source: { profileIds: ['profileId'], name: 'John Doe' }, - _type: 'users', - _version: 1, - created: true - } - }); - - return kuzzle.security.createUser('userId', body, {refresh: true}) - .then(user => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'userId', - body, - controller: 'security', - action: 'createUser', - refresh: true - }, {}); - - should(user).be.an.instanceOf(User); - should(user._id).be.eql('kuid'); - should(user.content).be.eql({name: 'John Doe', profileIds: ['profileId']}); - should(user.profileIds).be.eql(['profileId']); - }); - }); }); describe('createRestrictedUser', () => { @@ -456,8 +293,7 @@ describe('Security Controller', () => { body, _id: 'userId', controller: 'security', - action: 'createRestrictedUser', - refresh: undefined + action: 'createRestrictedUser' }, options); should(user).be.an.instanceOf(User); @@ -466,44 +302,6 @@ describe('Security Controller', () => { should(user.profileIds).be.eql(['profileId']); }); }); - - it('should inject the "refresh" option into the request', () => { - const body = { - content: {foo: 'bar'}, - credentials: { - strategy: {foo: 'bar'} - } - }; - - kuzzle.query.resolves({ - result: { - _id: 'kuid', - _index: '%kuzzle', - _source: { profileIds: ['profileId'], name: 'John Doe' }, - _type: 'users', - _version: 1, - created: true - } - }); - - return kuzzle.security.createRestrictedUser(body, null, {refresh: true}) - .then(user => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - body, - _id: null, - controller: 'security', - action: 'createRestrictedUser', - refresh: true - }, {}); - - should(user).be.an.instanceOf(User); - should(user._id).be.eql('kuid'); - should(user.content).be.eql({name: 'John Doe', profileIds: ['profileId']}); - should(user.profileIds).be.eql(['profileId']); - }); - }); }); describe('deleteCredentials', () => { @@ -918,32 +716,12 @@ describe('Security Controller', () => { .be.calledWith({ controller: 'security', action: 'mDeleteProfiles', - body: {ids: ['profile1', 'profile2']}, - refresh: undefined + body: {ids: ['profile1', 'profile2']} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = ['profile1', 'profile2']; - kuzzle.query.resolves({result}); - - return kuzzle.security.mDeleteProfiles(['profile1', 'profile2'], {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'security', - action: 'mDeleteProfiles', - body: {ids: ['profile1', 'profile2']}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('mDeleteRoles', () => { @@ -958,32 +736,12 @@ describe('Security Controller', () => { .be.calledWith({ controller: 'security', action: 'mDeleteRoles', - body: {ids: ['role1', 'role2']}, - refresh: undefined + body: {ids: ['role1', 'role2']} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = ['role1', 'role2']; - kuzzle.query.resolves({result}); - - return kuzzle.security.mDeleteRoles(['role1', 'role2'], {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'security', - action: 'mDeleteRoles', - body: {ids: ['role1', 'role2']}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('mDeleteUsers', () => { @@ -998,32 +756,12 @@ describe('Security Controller', () => { .be.calledWith({ controller: 'security', action: 'mDeleteUsers', - body: {ids: ['user1', 'user2']}, - refresh: undefined + body: {ids: ['user1', 'user2']} }, options); should(res).be.equal(result); }); }); - - it('should inject the "refresh" option into the request', () => { - const result = ['user1', 'user2']; - kuzzle.query.resolves({result}); - - return kuzzle.security.mDeleteUsers(['user1', 'user2'], {refresh: true}) - .then(res => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - controller: 'security', - action: 'mDeleteUsers', - body: {ids: ['user1', 'user2']}, - refresh: true - }, {}); - - should(res).be.equal(result); - }); - }); }); describe('mGetProfiles', () => { @@ -1117,8 +855,7 @@ describe('Security Controller', () => { _id: 'userId', body: {foo: 'bar'}, controller: 'security', - action: 'replaceUser', - refresh: undefined + action: 'replaceUser' }, options); should(user).be.an.instanceOf(User); @@ -1127,37 +864,6 @@ describe('Security Controller', () => { should(user.profileIds).be.eql(['profileId']); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'kuid', - _index: '%kuzzle', - _source: { profileIds: ['profileId'], name: 'John Doe' }, - _type: 'users', - _version: 1, - created: true - } - }); - - return kuzzle.security.replaceUser('userId', {foo: 'bar'}, {refresh: true}) - .then(user => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'userId', - body: {foo: 'bar'}, - controller: 'security', - action: 'replaceUser', - refresh: true - }, {}); - - should(user).be.an.instanceOf(User); - should(user._id).be.eql('kuid'); - should(user.content).be.eql({name: 'John Doe', profileIds: ['profileId']}); - should(user.profileIds).be.eql(['profileId']); - }); - }); }); describe('searchProfiles', () => { @@ -1399,8 +1105,7 @@ describe('Security Controller', () => { _id: 'profileId', body: {foo: 'bar'}, controller: 'security', - action: 'updateProfile', - refresh: undefined + action: 'updateProfile' }, options); should(profile).be.an.instanceOf(Profile); @@ -1408,36 +1113,6 @@ describe('Security Controller', () => { should(profile.policies).be.eql(['foo', 'bar']); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'profileId', - _index: '%kuzzle', - _type: 'profiles', - _version: 2, - _source: { policies: ['foo', 'bar'] }, - created: false - } - }); - - return kuzzle.security.updateProfile('profileId', {foo: 'bar'}, {refresh: true}) - .then(profile => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'profileId', - body: {foo: 'bar'}, - controller: 'security', - action: 'updateProfile', - refresh: true - }, {}); - - should(profile).be.an.instanceOf(Profile); - should(profile._id).be.eql('profileId'); - should(profile.policies).be.eql(['foo', 'bar']); - }); - }); }); describe('updateProfileMapping', () => { @@ -1480,8 +1155,7 @@ describe('Security Controller', () => { _id: 'roleId', body: {foo: 'bar'}, controller: 'security', - action: 'updateRole', - refresh: undefined + action: 'updateRole' }, options); should(role).be.an.instanceOf(Role); @@ -1489,36 +1163,6 @@ describe('Security Controller', () => { should(role.controllers).be.eql({foo: {actions: {bar: true}}}); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'roleId', - _index: '%kuzzle', - _type: 'roles', - _version: 2, - _source: { controllers: {foo: {actions: {bar: true}}} }, - created: false - } - }); - - return kuzzle.security.updateRole('roleId', {foo: 'bar'}, {refresh: true}) - .then(role => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'roleId', - body: {foo: 'bar'}, - controller: 'security', - action: 'updateRole', - refresh: true - }, {}); - - should(role).be.an.instanceOf(Role); - should(role._id).be.eql('roleId'); - should(role.controllers).be.eql({foo: {actions: {bar: true}}}); - }); - }); }); describe('updateRoleMapping', () => { @@ -1561,8 +1205,7 @@ describe('Security Controller', () => { _id: 'userId', body: {foo: 'bar'}, controller: 'security', - action: 'updateUser', - refresh: undefined + action: 'updateUser' }, options); should(user).be.an.instanceOf(User); @@ -1571,37 +1214,6 @@ describe('Security Controller', () => { should(user.profileIds).be.eql(['profileId']); }); }); - - it('should inject the "refresh" option into the request', () => { - kuzzle.query.resolves({ - result: { - _id: 'kuid', - _index: '%kuzzle', - _source: { profileIds: ['profileId'], name: 'John Doe' }, - _type: 'users', - _version: 2, - created: false - } - }); - - return kuzzle.security.updateUser('userId', {foo: 'bar'}, {refresh: true}) - .then(user => { - should(kuzzle.query) - .be.calledOnce() - .be.calledWith({ - _id: 'userId', - body: {foo: 'bar'}, - controller: 'security', - action: 'updateUser', - refresh: true - }, {}); - - should(user).be.an.instanceOf(User); - should(user._id).be.eql('kuid'); - should(user.content).be.eql({name: 'John Doe', profileIds: ['profileId']}); - should(user.profileIds).be.eql(['profileId']); - }); - }); }); describe('updateUserMapping', () => { diff --git a/test1.js b/test1.js new file mode 100644 index 000000000..63cbc2e8b --- /dev/null +++ b/test1.js @@ -0,0 +1,41 @@ +// Loads the Kuzzle SDK module and the websocket protocol +const { + Kuzzle, + WebSocket +} = require('kuzzle-sdk'); + +// Instantiates a Kuzzle client +const + kuzzle = new Kuzzle( + new WebSocket('kuzzle', { autoReconnect: false }) + ); + +// Adds a listener to detect any connection problems +kuzzle.on('networkError', error => { + console.error(`Network Error: ${error.message}`); +}); + +(async () => { + try { + await kuzzle.connect(); + } catch (error) { + console.log(`Can not connect to Kuzzle: ${error.message}`); + } + try { + const count = await kuzzle.document.count( + 'nyc-open-data', + 'yellow-taxi', + { + query: { + match: { license: 'valid' } + } + } + ); + + console.log(`Found ${count} documents matching license:valid`); + } catch (error) { + console.error(error.message); + } finally { + kuzzle.disconnect(); + } +})();