From f1dc6e60dcd5993940e15b3c8e5f624e7ff009d7 Mon Sep 17 00:00:00 2001 From: Joe Fleming Date: Mon, 25 Apr 2016 17:00:37 -0700 Subject: [PATCH] make workers private, add getter, add destroy test --- src/index.js | 11 ++++++++--- test/src/index.js | 21 +++++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/index.js b/src/index.js index 683e2be..e04b2ee 100644 --- a/src/index.js +++ b/src/index.js @@ -19,8 +19,8 @@ export default class Elastique extends events.EventEmitter { timeout: 10000, }, omit(options, [ 'client' ])); this.client = createClient(options.client || {}); - this.workers = []; + this._workers = []; this._initTasks().catch((err) => this.emit('error', err)); } @@ -48,11 +48,16 @@ export default class Elastique extends events.EventEmitter { registerWorker(type, workerFn, opts) { const worker = new Worker(this, type, workerFn, opts); - this.workers.push(worker); + this._workers.push(worker); return worker; } + getWorkers() { + return this._workers.map((fn) => fn); + } + destroy() { - this.workers.forEach((worker) => worker.destroy()); + const workers = this._workers.filter((worker) => worker.destroy()); + this._workers = workers; } } diff --git a/test/src/index.js b/test/src/index.js index 093f78e..e007b59 100644 --- a/test/src/index.js +++ b/test/src/index.js @@ -1,7 +1,7 @@ import events from 'events'; import expect from 'expect.js'; import sinon from 'sinon'; -import { noop } from 'lodash'; +import { noop, times } from 'lodash'; import elasticsearchMock from '../fixtures/elasticsearch'; import Elastique from '../../lib/index'; @@ -51,13 +51,26 @@ describe('Elastique class', function () { describe('Registering workers', function () { it('should keep track of workers', function () { const queue = new Elastique('elastique', { client }); - expect(queue.workers).to.eql([]); - expect(queue.workers).to.have.length(0); + expect(queue.getWorkers()).to.eql([]); + expect(queue.getWorkers()).to.have.length(0); queue.registerWorker('test', noop); queue.registerWorker('test', noop); queue.registerWorker('test2', noop); - expect(queue.workers).to.have.length(3); + expect(queue.getWorkers()).to.have.length(3); + }); + }); + + describe('Destroy', function () { + it('should destroy workers', function () { + const queue = new Elastique('elastique', { client }); + const stubs = times(3, () => { return { destroy: sinon.stub() }; }); + stubs.forEach((stub) => queue._workers.push(stub)); + expect(queue.getWorkers()).to.have.length(3); + + queue.destroy(); + stubs.forEach((stub) => sinon.assert.calledOnce(stub.destroy)); + expect(queue.getWorkers()).to.have.length(0); }); });