@gasbuddy/configured-rabbitmq-client
Version:
A configuration driven RabbitMQ client
84 lines (68 loc) • 3.2 kB
JavaScript
import tap from 'tap';
import _ from 'lodash';
import { normalizeExchangeGroups, fooFooConfigFromExchangeGroups } from '../src/exchangeGroups';
const simpleCase = {
keys: 'simplekey',
};
const noRetryCase = {
retries: 0,
keys: 'noretrykey',
};
const complexCase = {
retryDelay: 10,
exchange: 'conf.ex',
queue: {
name: 'autodeletequeue',
autoDelete: true,
},
retryQueue: 'crazyretryqueuename',
keys: ['somekey', 'someotherkey'],
};
const rejectedOnlyCase = {
retries: 0,
rejectedExchange: true,
keys: 'rejectedonlykey',
};
const perMessageTtl = {
perMessageTtl: true,
keys: 'somekey',
};
const exchangeGroups = {
simpleCase,
noRetryCase,
complexCase,
rejectedOnlyCase,
perMessageTtl,
};
tap.test('test exchange group normalization', async (t) => {
const finalGroups = normalizeExchangeGroups(exchangeGroups);
t.ok(finalGroups.simpleCase.exchange.name === 'simpleCase', 'Exchange should be named the same as the group');
t.ok(finalGroups.simpleCase.queue.name === 'simpleCase.q', 'Exchange should be named the same as the group with q');
t.ok(finalGroups.simpleCase.retries > 0
&& finalGroups.simpleCase.retryDelay > 0
&& finalGroups.simpleCase.retryExchange
&& finalGroups.simpleCase.retryQueue
&& finalGroups.simpleCase.rejectedExchange
&& finalGroups.simpleCase.rejectedQueue, 'Retry queues should be generated by default');
t.ok(!finalGroups.noRetryCase.retryExchange
&& !finalGroups.noRetryCase.retryQueue
&& !finalGroups.noRetryCase.rejectedExchange
&& !finalGroups.noRetryCase.rejectedQueue, 'Retry queues should not be generated when retries is set to 0');
t.ok(finalGroups.complexCase.queue.name === complexCase.queue.name, 'Deep queue name is accepted');
t.ok(finalGroups.complexCase.queue.autoDelete === complexCase.queue.autoDelete, 'Deep queue properties are accepted');
t.ok(finalGroups.complexCase.retryQueue.name === complexCase.retryQueue, 'Additional queue overrides are accepted.');
t.ok(finalGroups.complexCase.retryQueue.messageTtl === complexCase.retryDelay, 'messageTtl should match retryDelay on retry queue');
t.ok(finalGroups.rejectedOnlyCase.exchange
&& finalGroups.rejectedOnlyCase.queue
&& !finalGroups.rejectedOnlyCase.retryExchange
&& !finalGroups.rejectedOnlyCase.retryQueue
&& finalGroups.rejectedOnlyCase.rejectedExchange
&& finalGroups.rejectedOnlyCase.rejectedQueue && 'Rejected queue should be generated when specified with zero retries');
t.ok(finalGroups.perMessageTtl.retryQueue.messageTtl === undefined, 'retryQueue messageTtl should be undefined when perMessageTtl is set');
});
tap.test('test exchange group to rabbit config translation', async (t) => {
const finalGroups = normalizeExchangeGroups(exchangeGroups);
const config = fooFooConfigFromExchangeGroups(finalGroups);
t.ok(_.find(config.queues, ['name', finalGroups.complexCase.queue.name]).autoDelete === complexCase.queue.autoDelete, 'Specific configuration propogates to rabbit config');
t.ok(_.find(config.exchanges, ['name', finalGroups.rejectedOnlyCase.exchange.name]), 'No retry rejected exchange gets made');
});