@addapptables/microservice
Version:
addapptables microservice
60 lines (46 loc) • 2.07 kB
text/typescript
import * as chai from 'chai';
import * as sinon from 'sinon';
import { head } from 'ramda';
import { BrokerProcess } from '../../src/services/broker/broker-process';
import { Broker } from '../../src/services/broker/broker';
import { IBusAdapter } from '../../src/interfaces';
import { CraftsLoggerMock } from '../mocks/crafts-logger.mock';
describe('Broker process', () => {
let brokerProcess: BrokerProcess;
let adapter = {};
beforeEach(() => {
adapter = { publish(data: any, options?: any) { } }
brokerProcess = new BrokerProcess(<IBusAdapter>adapter, new CraftsLoggerMock({}));
});
it('should start the process adding data inside broker process', () => {
const data = {
context: 'test', action: 'createTest', data: { id: '1f558dcd-e8f4-400c-bc3d-71f7107d8fbb' },
};
brokerProcess['getData'] = function () { return this.data; }
const process = brokerProcess.add(data);
chai.expect(process instanceof BrokerProcess).to.be.true;
chai.expect(brokerProcess['getData']()).to.be.equal(data);
brokerProcess['getData'] = null;
});
it('should finish broker process publishing message', async () => {
const sandbox = sinon.createSandbox();
const data = { context: 'test', action: 'createTest', data: { id: '' } };
const cid = brokerProcess['cid'];
brokerProcess['data'] = data;
const add = sandbox.spy(Broker.getInstance(), 'add');
const publish = sandbox.stub(<any>adapter, 'publish').callsFake(async (data) => {
const callback = Broker.getInstance().get(cid);
await callback(data);
});
await brokerProcess.end();
chai.expect(add.getCall(0).args[0]).to.be.equal(cid);
chai.expect(typeof add.getCall(0).args[1]).to.be.equal('function');
chai.expect(add.calledOnce).to.be.true;
chai.expect(publish.calledOnce).to.be.true;
chai.expect(head(publish.getCall(0).args)).deep.equals({ ...data, cid });
sandbox.restore();
const instance = Broker.getInstance();
instance['brokers'] = undefined;
Broker['instance'] = undefined;
});
});