Skip to content
This repository has been archived by the owner on Jul 4, 2023. It is now read-only.

Commit

Permalink
feat: command executor method (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
sergioCB95 committed Jul 16, 2021
1 parent 3f349bb commit 686d7b6
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 217 deletions.
13 changes: 13 additions & 0 deletions commands/commandExecutor.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const debug = require('debug')('systemic-aws-sqs');

module.exports = client => async ({ commandParams, commandName }) => {
try {
debug(`Calling ${commandName}`);
const data = await client[commandName](commandParams);
debug(`${commandName} executed successfully`);
return data;
} catch (error) {
debug(`Error executing ${commandName}: ${error.message}`);
throw error;
}
};
22 changes: 0 additions & 22 deletions commands/getQueueUrl.js

This file was deleted.

35 changes: 0 additions & 35 deletions commands/receiveMessage.js

This file was deleted.

35 changes: 0 additions & 35 deletions commands/sendMessage.js

This file was deleted.

8 changes: 4 additions & 4 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
const debug = require("debug")("systemic-aws-sqs");
const { SQSClient } = require("@aws-sdk/client-sqs");
const { SQS, SQSClient } = require("@aws-sdk/client-sqs");

const commands = require("require-all")(__dirname + "/commands");

let client = null;
let aggregatedSQS = null;

module.exports = () => {
const start = async ({ config }) => {
debug("Initializing SQSClient");
client = new SQSClient(config);
aggregatedSQS = new SQS(config);

return {
client,
getQueueUrl: commands["getQueueUrl"](client),
sendMessage: commands["sendMessage"](client),
receiveMessage: commands["receiveMessage"](client),
commandExecutor: commands['commandExecutor'](aggregatedSQS),
};
};

Expand Down
75 changes: 75 additions & 0 deletions test/__tests__/commandExecutor.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
const crypto = require("crypto");

const startSQSComponent = require("../helpers/startSQSComponent");
const createSQSQueue = require("../helpers/createSQSQueue");
const deleteSQSQueue = require("../helpers/deleteSQSQueue");

const getLocalstackConfig = require("../fixtures/getLocalstackConfig");

let sqs;
let createQueue;
let deleteQueue;

describe("Systemic SQS - commandExecutor function", () => {
beforeAll(async () => {
sqs = await startSQSComponent(getLocalstackConfig());
createQueue = createSQSQueue(sqs);
deleteQueue = deleteSQSQueue(sqs);
});

it("should execute the \"getQueueUrl\" command and retrieve it", async () => {
const awsAccountId = "000000000000";
const queueName = "testQName";
await createQueue(queueName);

const commandParams = { QueueName: queueName, AwsAccountId: awsAccountId }
const res = await sqs.commandExecutor({ commandParams, commandName: 'getQueueUrl' });

expect(res.QueueUrl).toBe(`http://localhost/${awsAccountId}/${queueName}`);

await deleteQueue(queueName);
});

it("should execute the \"receiveMessage\" command and receive a message from the queue", async () => {
const awsAccountId = "000000000000";
const messageBody = "Example message";
const queueName = "receiveMessageQueueName";

await createQueue(queueName);

const getUrlCommandParams = { QueueName: queueName, AwsAccountId: awsAccountId }
const urlResponse = await sqs.commandExecutor({ commandParams: getUrlCommandParams, commandName: 'getQueueUrl' });

const sendMessageCommandParams = { QueueUrl: urlResponse.QueueUrl, MessageBody: messageBody }
await sqs.commandExecutor({ commandParams: sendMessageCommandParams, commandName: 'sendMessage' });

const res = await sqs.commandExecutor({ commandParams: { QueueUrl: urlResponse.QueueUrl }, commandName: 'receiveMessage' });

expect(res.Messages).toHaveLength(1);
expect(res.Messages[0].Body).toBe(messageBody);

await deleteQueue(queueName);
});

it("should execute the \"sendMessage\" command and send a message", async () => {
const awsAccountId = "000000000000";
const messageBody = "Example message";
const queueName = "testQName1";
await createQueue(queueName);

const getUrlCommandParams = { QueueName: queueName, AwsAccountId: awsAccountId }
const urlResponse = await sqs.commandExecutor({ commandParams: getUrlCommandParams, commandName: 'getQueueUrl' });

const sendMessageCommandParams = { QueueUrl: urlResponse.QueueUrl, MessageBody: messageBody }
const res = await sqs.commandExecutor({ commandParams: sendMessageCommandParams, commandName: 'sendMessage' });

const md5MessageBodySent = crypto
.createHash("md5")
.update(messageBody)
.digest("hex");
expect(res.$metadata.httpStatusCode).toBe(200); //enviado
expect(res.MD5OfMessageBody).toBe(md5MessageBodySent); // comprobación de md5

await deleteQueue(queueName);
});
});
31 changes: 0 additions & 31 deletions test/__tests__/getQueueUrl.test.js

This file was deleted.

40 changes: 0 additions & 40 deletions test/__tests__/receiveMessage.test.js

This file was deleted.

43 changes: 0 additions & 43 deletions test/__tests__/sendMessage.test.js

This file was deleted.

10 changes: 7 additions & 3 deletions test/helpers/createSQSQueue.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
const { CreateQueueCommand } = require("@aws-sdk/client-sqs");

module.exports = (sqs) => (queueName) => sqs.client.send(new CreateQueueCommand({ QueueName: queueName }));
const commandConfig = (queueName) => ({
commandParams: {
QueueName: queueName
},
commandName:'createQueue'
})
module.exports = (sqs) => (queueName) => sqs.commandExecutor(commandConfig(queueName))
12 changes: 8 additions & 4 deletions test/helpers/deleteSQSQueue.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
const { DeleteQueueCommand } = require("@aws-sdk/client-sqs");

module.exports = (sqs) => (queueName) => sqs.client
.send(new DeleteQueueCommand({ QueueUrl: `https://localhost/000000000000/${queueName}` }));
const commandConfig = (queueName) => ({
commandParams: {
QueueUrl: queueName
},
commandName:'deleteQueue'
})
module.exports = (sqs) => (queueName) => sqs
.commandExecutor(commandConfig(`https://localhost/000000000000/${queueName}`))

0 comments on commit 686d7b6

Please sign in to comment.