Skip to content

Commit

Permalink
[Test] Shared Queue
Browse files Browse the repository at this point in the history
Added a test suite for the shared queue module.
References #59, #60, #61 and #62.
  • Loading branch information
angel-penchev committed Feb 1, 2021
1 parent 3d81baa commit 3483af3
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 1 deletion.
1 change: 1 addition & 0 deletions server/.env.template
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
RABBITMQ_URL=amqp://queue
RABBITMQ_URL_TEST=amqp://localhost
POSTGRES_URL=database
POSTGRES_PORT=5432

Expand Down
6 changes: 6 additions & 0 deletions server/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
"eslint": "^7.13.0",
"eslint-config-google": "^0.14.0",
"jest": "^26.6.3",
"mock-amqplib": "^1.3.0",
"regenerator-runtime": "^0.13.7",
"sinon": "^9.2.3",
"slonik": "^23.5.4",
Expand Down
1 change: 1 addition & 0 deletions server/services/core/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ dotenv.config();

const config = Object.freeze({
rabbitMqUrl: String(process.env.RABBITMQ_URL),
rabbitMqUrlTest: String(process.env.RABBITMQ_URL_TEST),
postgresUrl: String(process.env.POSTGRES_URL),
postgresPort: parseInt(String(process.env.POSTGRES_PORT)),

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,51 @@
import amqp from 'mock-amqplib';
import config from '../../config';
import {SharedQueue} from '../../@types/global';
import makeSharedQueue from './shared-queue';

describe('shared-queue', () => {
it('must pass', () => {});
let sharedQueue: SharedQueue;

beforeEach(async () => {
sharedQueue = makeSharedQueue({
queueLibrary: amqp,
queueUrl: config.rabbitMqUrlTest,
});
});

it('must emit event on a single queue', async () => {
const message = {message: 'i do stuff'};
const queueName = 'test_queue';

// Asserting whether emitting to a single queue was successful
expect(async () => {
await sharedQueue.emit([queueName], message);
}).not.toThrow();
});

it('must get emitted messages when listening', async () => {
const message = {message: 'i do stuff'};
const queueName = 'test_queue';

// Asserting whether emitting to a single queue was successful
expect(async () => {
await sharedQueue.emit([queueName], message);
}).not.toThrow();

// Defining a callback function and a spy bound to it which will be used to
// verify the callback was called exactly once (only 1 message in queue)
let response: object;
const callbackObject = {
callback: (result: object) => response = result,
};
const spy = jest.spyOn(callbackObject, 'callback');

// Starting to listen for messages
await sharedQueue.listen(
queueName,
callbackObject.callback,
);
expect(response).toEqual(message);
expect(spy).toHaveBeenCalledTimes(1);
});
});

0 comments on commit 3483af3

Please sign in to comment.