All files / redis-smq-monitor/tests/common message-producing.ts

100% Statements 49/49
100% Branches 10/10
100% Functions 8/8
100% Lines 49/49

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98  36x 36x 36x 36x       36x 36x 36x 36x   36x       36x 36x     36x       3x 3x 3x 3x 3x     36x       7x 7x 7x 7x 7x     36x       8x 8x       26x       8x 8x 8x   8x 8x 8x     36x       8x 8x       10x       8x 8x 8x   8x 8x 8x     36x       1x 1x 1x 1x 1x    
import { IConfig, TQueueParams } from 'redis-smq/dist/types';
import { config } from './config';
import { promisifyAll } from 'bluebird';
import { events, Message } from 'redis-smq';
import {
  untilConsumerEvent,
  untilMessageAcknowledged,
} from './consumer-events';
import { getProducer } from './producers';
import { getConsumer } from './consumers';
import { getQueueManagerAsync } from './queue-manager';
import { defaultQueue } from './common';
 
export async function createQueue(
  queue: string | TQueueParams,
  priorityQueuing: boolean,
) {
  const qm = await getQueueManagerAsync();
  await qm.queue.createAsync(queue, priorityQueuing);
}
 
export async function produceMessageWithPriority(
  queue: TQueueParams = defaultQueue,
  cfg: IConfig = config,
) {
  const producer = promisifyAll(getProducer(cfg));
  const message = new Message();
  message.setPriority(Message.MessagePriority.LOW).setQueue(queue);
  await producer.produceAsync(message);
  return { message, producer, queue };
}
 
export async function produceMessage(
  queue: TQueueParams = defaultQueue,
  cfg: IConfig = config,
) {
  const producer = getProducer(cfg);
  const message = new Message();
  message.setBody({ hello: 'world' }).setQueue(queue);
  await producer.produceAsync(message);
  return { producer, message, queue };
}
 
export async function produceAndDeadLetterMessage(
  queue: TQueueParams = defaultQueue,
  cfg: IConfig = config,
) {
  const producer = getProducer(cfg);
  const consumer = getConsumer({
    cfg,
    queue,
    messageHandler: jest.fn(() => {
      throw new Error('Explicit error');
    }),
  });
 
  const message = new Message();
  message.setBody({ hello: 'world' }).setQueue(queue);
  await producer.produceAsync(message);
 
  consumer.run();
  await untilConsumerEvent(consumer, events.MESSAGE_DEAD_LETTERED);
  return { producer, consumer, message, queue };
}
 
export async function produceAndAcknowledgeMessage(
  queue: TQueueParams = defaultQueue,
  cfg: IConfig = config,
) {
  const producer = getProducer(cfg);
  const consumer = getConsumer({
    cfg,
    queue,
    messageHandler: jest.fn((msg, cb) => {
      cb();
    }),
  });
 
  const message = new Message();
  message.setBody({ hello: 'world' }).setQueue(queue);
  await producer.produceAsync(message);
 
  consumer.run();
  await untilMessageAcknowledged(consumer);
  return { producer, consumer, queue, message };
}
 
export async function scheduleMessage(
  queue: TQueueParams = defaultQueue,
  cfg: IConfig = config,
) {
  const producer = promisifyAll(getProducer(cfg));
  const message = new Message();
  message.setScheduledDelay(10000).setQueue(queue);
  await producer.produceAsync(message);
  return { message, producer, queue };
}