This repository has been archived by the owner on Dec 8, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathslack-client-test.js
121 lines (103 loc) · 3.88 KB
/
slack-client-test.js
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
'use strict';
var SlackClient = require('../lib/slack-client');
var ApiStubServer = require('./helpers/api-stub-server');
var helpers = require('./helpers');
var url = require('url');
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.should();
chai.use(chaiAsPromised);
describe('SlackClient', function() {
var slackClient, config, slackApiServer, slackToken, setResponse, payload,
params;
before(function() {
slackApiServer = new ApiStubServer();
config = helpers.baseConfig();
config.slackApiBaseUrl = slackApiServer.address() + '/api/';
slackClient = new SlackClient(undefined, config);
slackToken = '<18F-slack-api-token>';
process.env.HUBOT_SLACK_TOKEN = slackToken;
});
after(function() {
delete process.env.HUBOT_SLACK_TOKEN;
slackApiServer.close();
});
afterEach(function() {
slackApiServer.urlsToResponses = {};
});
setResponse = function(expectedUrl, expectedParams, statusCode, payload) {
slackApiServer.urlsToResponses[expectedUrl] = {
expectedParams: expectedParams,
statusCode: statusCode,
payload: payload
};
};
describe('API base URL', function() {
it('should parse the local server URL', function() {
url.format(slackClient.baseurl).should.eql(
slackApiServer.address() + '/api/');
slackClient.requestFactory.globalAgent.protocol.should.eql('http:');
});
it('should parse API_BASE_URL if config base URL undefined', function() {
var slackClient = new SlackClient(undefined, helpers.baseConfig());
url.format(slackClient.baseurl).should.eql(SlackClient.API_BASE_URL);
slackClient.requestFactory.globalAgent.protocol.should.eql('https:');
});
});
describe('getReactions', function() {
beforeEach(function() {
params = {
channel: helpers.CHANNEL_ID,
timestamp: helpers.TIMESTAMP,
token: slackToken
};
payload = helpers.messageWithReactions();
});
it('should make a successful request', function() {
setResponse('/api/reactions.get', params, 200, payload);
return slackClient.getReactions(helpers.CHANNEL_ID, helpers.TIMESTAMP)
.should.become(payload);
});
it('should fail to make a request if the server is down', function() {
var config = helpers.baseConfig(),
slackClient;
config.slackApiBaseUrl = 'http://localhost';
slackClient = new SlackClient(undefined, config);
return slackClient.getReactions(helpers.CHANNEL_ID, helpers.TIMESTAMP)
.should.be.rejectedWith('failed to make Slack API request ' +
'for method reactions.get:');
});
it('should make an unsuccessful request', function() {
payload = {
ok: false,
error: 'not_authed'
};
setResponse('/api/reactions.get', params, 200, payload);
return slackClient.getReactions(helpers.CHANNEL_ID, helpers.TIMESTAMP)
.should.be.rejectedWith(Error, 'Slack API method reactions.get ' +
'failed: ' + payload.error);
});
it('should make a request that produces a non-200 response', function() {
setResponse('/api/reactions.get', params, 404, 'Not found');
return slackClient.getReactions(helpers.CHANNEL_ID, helpers.TIMESTAMP)
.should.be.rejectedWith(Error, 'received 404 response from ' +
'Slack API method reactions.get: "Not found"');
});
});
describe('addSuccessReaction', function() {
beforeEach(function() {
params = {
channel: helpers.CHANNEL_ID,
timestamp: helpers.TIMESTAMP,
name: config.successReaction,
token: slackToken
};
payload = { ok: true };
});
it('should make a successful request', function() {
setResponse('/api/reactions.add', params, 200, payload);
return slackClient.addSuccessReaction(
helpers.CHANNEL_ID, helpers.TIMESTAMP).should.become(payload);
});
});
});