diff --git a/doc/7/controllers/security/refresh/index.md b/doc/7/controllers/security/refresh/index.md new file mode 100644 index 000000000..6e3f6fa3c --- /dev/null +++ b/doc/7/controllers/security/refresh/index.md @@ -0,0 +1,35 @@ +--- +code: true +type: page +title: refresh +--- + +# refresh + +Forces an immediate [reindexation](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/docs-refresh.html) of the provided security collection. + +The available security collections are: `users`, `profiles`, `roles`. + +When writing or deleting documents in Kuzzle, the changes need to be indexed before being reflected in the search results. +By default, this operation can take up to 1 second. + +::: warning +Forcing immediate refreshes comes with performance costs, and should only performed when absolutely necessary. +::: + + +```js +refresh(collection); +``` + +## Arguments + +- `collection`: collection name to refresh + +## Resolves + +Resolves when the refresh has been done. + +## Usage + +<<< ./snippets/refresh.js \ No newline at end of file diff --git a/doc/7/controllers/security/refresh/snippets/refresh.js b/doc/7/controllers/security/refresh/snippets/refresh.js new file mode 100644 index 000000000..32bd8498f --- /dev/null +++ b/doc/7/controllers/security/refresh/snippets/refresh.js @@ -0,0 +1,6 @@ +try { + await kuzzle.security.refresh('users'); + console.log('Success'); +} catch (e) { + console.error(e); +} \ No newline at end of file diff --git a/doc/7/controllers/security/refresh/snippets/refresh.test.yml b/doc/7/controllers/security/refresh/snippets/refresh.test.yml new file mode 100644 index 000000000..deb50cd40 --- /dev/null +++ b/doc/7/controllers/security/refresh/snippets/refresh.test.yml @@ -0,0 +1,5 @@ +name: security#refresh +description: Refreshes security collection +hooks: +template: default +expected: Success diff --git a/src/controllers/Security.js b/src/controllers/Security.js index 94f4a3276..e9829ca97 100644 --- a/src/controllers/Security.js +++ b/src/controllers/Security.js @@ -376,6 +376,13 @@ class SecurityController extends BaseController { .then(response => response.result.hits.map(hit => new Role(this.kuzzle, hit._id, hit._source.controllers))); } + refresh(collection) { + return this.query({ + collection, + action: 'refresh' + }); + } + replaceUser (_id, body, options = {}) { const request = { _id, diff --git a/test/controllers/security.test.js b/test/controllers/security.test.js index d79b015dd..a60471267 100644 --- a/test/controllers/security.test.js +++ b/test/controllers/security.test.js @@ -909,6 +909,25 @@ describe('Security Controller', () => { }); }); + describe('refresh', () => { + it('should call security/refresh query and return a Promise', () => { + kuzzle.query.resolves(null); + + return kuzzle.security.refresh('collection') + .then(res => { + should(kuzzle.query) + .be.calledOnce() + .be.calledWith({ + controller: 'security', + action: 'refresh', + collection: 'collection' + }); + + should(res).be.Null(); + }); + }); + }); + describe('replaceUser', () => { it('should call security/replaceUser query with the user content and return a Promise which resolves a User object', () => { kuzzle.query.resolves({