Skip to content
This repository has been archived by the owner on Oct 24, 2019. It is now read-only.

Commit

Permalink
reorg slack code for testing
Browse files Browse the repository at this point in the history
  • Loading branch information
Zachariah Mully committed Sep 20, 2017
1 parent 1efc520 commit 3a1a637
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 32 deletions.
41 changes: 26 additions & 15 deletions lib/slack.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
'use strict';

const encode = require('./utils').encode;
const slack = {};

module.exports.alertToSlack = alertToSlack;
module.exports.ingestSNS = ingestSNS;
module.exports.postAlert = postAlert;

function alertToSlack(snsMessage, destination, client, slackChannel, callback) {
slack.alertToSlack = function(snsMessage, destination, client, slackChannel, callback) {
if (!snsMessage.number) {
console.log(`${snsMessage.requestId} No GitHub issue number found in message body`);
return callback('No GitHub issue number found in message body');
Expand All @@ -15,9 +12,10 @@ function alertToSlack(snsMessage, destination, client, slackChannel, callback) {
if (err) return callback(err);
console.log(`${snsMessage.requestId} generated Slack callback_id ${res} for issue ${snsMessage.number} user ${destination}`);
snsMessage.callback_id = res; // eslint-disable-line camelcase
ingestSNS(snsMessage, (err, message, prompt) => {
slack.ingestSNS(snsMessage, (err, message, prompt) => {
if (err) return callback(err);
postAlert(destination, message, client, slackChannel, snsMessage.requestId, (err, res) => {
slack.postAlert(destination, message, client, slackChannel, snsMessage.requestId, (err, res) => {
console.log('message');
if (err && err == 'badSlack') {
return callback();
} else if (err) {
Expand All @@ -30,20 +28,28 @@ function alertToSlack(snsMessage, destination, client, slackChannel, callback) {
url: snsMessage.url
};
if (prompt) {
postAlert(destination, prompt, client, slackChannel, snsMessage.requestId, (err, res) => {
console.log('prompt');
slack.postAlert(destination, prompt, client, slackChannel, snsMessage.requestId, (err, res) => {
if (err && err == 'badSlack') {
return callback();
};
if (err) return callback(err);
status.message = `${status.message}, Prompt: ${res.message.text}`;
console.log(`${snsMessage.requestId} sent Slack message for issue ${snsMessage.number} to ${destination}`);
return callback(null, status);
});
} else {
console.log(`${snsMessage.requestId} sent Slack message for issue ${snsMessage.number} to ${destination}`);
return callback(null, status);
}
console.log(`${snsMessage.requestId} sent Slack message for issue ${snsMessage.number} sent to ${destination}`);
return callback(null, status);
});
});
});
}
}
};

function ingestSNS(snsMessage, callback) {
slack.ingestSNS = function(snsMessage, callback) {
console.log('ingestSNS called');
try {
let message = {
text: snsMessage.body.slack.message,
Expand Down Expand Up @@ -89,9 +95,9 @@ function ingestSNS(snsMessage, callback) {
} catch (err) {
return callback(`${snsMessage.requestId} sns message parsing error: ${err}`);
}
}
};

function postAlert(destination, alert, client, slackChannel, requestId, callback) {
slack.postAlert = function(destination, alert, client, slackChannel, requestId, callback) {
let options;

if (!alert.text) return callback(`${requestId} missing Slack message body`);
Expand Down Expand Up @@ -122,4 +128,9 @@ function postAlert(destination, alert, client, slackChannel, requestId, callback
return callback(null, res);
}
});
}
};

// module.exports.alertToSlack = alertToSlack;
// module.exports.ingestSNS = ingestSNS;
// module.exports.postAlert = postAlert;
module.exports = slack;
2 changes: 1 addition & 1 deletion test/fixtures/slack.fixtures.js
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ module.exports.slack = {
statusPrompt: {
alert: true,
destination: '@testUser',
message: 'testSlackMessage, Prompt: testSlackMessage',
message: 'testSlackMessage, Prompt: testSlackPrompt',
url: 'https://github.com/testOwner/testRepo/issues/7'
},
statusBroadcast: [
Expand Down
31 changes: 15 additions & 16 deletions test/lib/slack.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ test('[slack] [postAlert] username success', (t) => {
});

test('[slack] [alertToSlack] ingestSNS error', (t) => {
const stub = sinon.stub(file, 'ingestSNS').returns(fixtures.sns.malformedError);
const stub = sinon.stub(file, 'ingestSNS').yields(fixtures.sns.malformedError);
file.alertToSlack({number: 7, requestId: 123}, fixtures.slack.username, fixtures.clients.empty, 'test-channel', (err, status) => {
t.equal(err, fixtures.sns.malformedError, '-- should pass through error message');
t.end();
Expand All @@ -100,8 +100,8 @@ test('[slack] [alertToSlack] encode error', (t) => {
});

test('[slack] [alertToSlack] postAlert message error', (t) => {
const stub0 = sinon.stub(file, 'ingestSNS').returns(null, fixtures.slack.message);
const stub1 = sinon.stub(file, 'postAlert').returns(fixtures.slack.error);
const stub0 = sinon.stub(file, 'ingestSNS').yields(null, fixtures.slack.message);
const stub1 = sinon.stub(file, 'postAlert').yields('badSlack');
file.alertToSlack(fixtures.sns.success, fixtures.slack.username, fixtures.clients.error, 'test-channel', (err, status) => {
t.error(err, '-- does not error on bad Slack message');
t.equal(status, undefined, '-- bad Slack message generates no response object');
Expand All @@ -113,8 +113,8 @@ test('[slack] [alertToSlack] postAlert message error', (t) => {


test('[slack] [alertToSlack] postAlert message, no prompt', (t) => {
const stub0 = sinon.stub(file, 'ingestSNS').returns(null, fixtures.slack.message);
const stub1 = sinon.stub(file, 'postAlert').returns(null, fixtures.slack.success);
const stub0 = sinon.stub(file, 'ingestSNS').yields(null, fixtures.slack.message);
const stub1 = sinon.stub(file, 'postAlert').yields(null, fixtures.slack.success);
file.alertToSlack(fixtures.sns.successNoPrompt, fixtures.slack.username, fixtures.clients.success, 'test-channel', (err, status) => {
t.ifError(err, '-- should not error');
t.equal(status.alert, true, '-- should be true');
Expand All @@ -128,10 +128,10 @@ test('[slack] [alertToSlack] postAlert message, no prompt', (t) => {
// NOTE: Make a second pass at this test case, can be improved

test('[slack] [alertToSlack] postAlert message and prompt success', (t) => {
const stub0 = sinon.stub(file, 'ingestSNS').returns(null, fixtures.slack.message, fixtures.slack.prompt);
const stub0 = sinon.stub(file, 'ingestSNS').yields(null, fixtures.slack.message, fixtures.slack.prompt);
const stub1 = sinon.stub(file, 'postAlert');
stub1.withArgs(fixtures.slack.username, fixtures.slack.message, fixtures.clients.success).returns(null, fixtures.slack.success);
stub1.withArgs(fixtures.slack.username, fixtures.slack.prompt, fixtures.clients.success).returns(null, fixtures.slack.successPrompt);
stub1.withArgs(fixtures.slack.username, fixtures.slack.message, fixtures.clients.success).yields(null, fixtures.slack.success);
stub1.withArgs(fixtures.slack.username, fixtures.slack.prompt, fixtures.clients.success).yields(null, fixtures.slack.successPrompt);
file.alertToSlack(fixtures.sns.success, fixtures.slack.username, fixtures.clients.success, 'test-channel', (err, status) => {
t.ifError(err, '-- should not error');
t.equal(status.alert, true, '-- should be true');
Expand All @@ -143,14 +143,13 @@ test('[slack] [alertToSlack] postAlert message and prompt success', (t) => {
});

test('[slack] [alertToSlack] postAlert message success, prompt error', (t) => {
const stub0 = sinon.stub(file, 'ingestSNS').returns(null, fixtures.slack.message, fixtures.slack.prompt);
const stub1 = sinon.stub(file, 'postAlert');
stub1.withArgs(fixtures.slack.username, fixtures.slack.message, fixtures.clients.success, 'test-channel', 123).returns(null, fixtures.slack.success);
stub1.withArgs(fixtures.slack.username, fixtures.slack.message, fixtures.clients.error, 'test-channel', 123).returns(fixtures.slack.error);
file.alertToSlack(fixtures.sns.success, fixtures.slack.username, fixtures.clients.promptError, 'test-channel', (err, status) => {
t.comment(err);
t.equal(err.ok, false, '-- ok should be false');
t.deepEqual(err, fixtures.slack.error, '-- should pass through error response object');
const ingestSnsStub = sinon.stub(file, 'ingestSNS').yields(null, fixtures.slack.message, fixtures.slack.prompt);
const postAlertStub = sinon.stub(file, 'postAlert');
postAlertStub.withArgs(fixtures.slack.username, fixtures.slack.message, fixtures.clients.success, 'test-channel', 123).yields(null, fixtures.slack.success);
postAlertStub.withArgs(fixtures.slack.username, fixtures.slack.prompt, fixtures.clients.success,'test-channel', 123).yields('badSlack');
file.alertToSlack(fixtures.sns.success, fixtures.slack.username, fixtures.clients.success, 'test-channel', (err, status) => {
t.ifError(err, '-- should not error');
t.equal(status, undefined, '-- does not pass status object when badSlacking');
t.end();
});
file.ingestSNS.restore();
Expand Down

0 comments on commit 3a1a637

Please sign in to comment.